Sha256: 4b9905d6787cead82cf61fd7b2c1abc4c01abb521f6b3ef27aa1b6ce664e8fc5

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

module Dedalus
  module Elements
    class ImageGrid < Dedalus::Molecule
      attr_accessor :grid, :tiles_path, :tile_width, :tile_height
      attr_accessor :scale

      def show
        if grid
          grid.map do |row_elements|
            row_elements.map do |grid_value|
              if grid_value
                sprite_for(grid_value)
              else
                no_image
              end
            end
          end
        else
          []
        end
      end

      def name
        @name ||= 'an-image-grid' # a uniq id for recording
      end

      def scale
        @scale ||= 1.0
      end

      def record?
        !grid.empty?
      end

      def width
        if grid && grid.first
          grid.first.length * tile_width * scale
        else
          0
        end
      end

      def height
        if grid
          grid.length * tile_height * scale
        else
          0
        end
      end

      def sprite_for(frame)
        Sprite.new(
          frame: frame,
          asset_width: tile_width,
          asset_height: tile_height,
          path: tiles_path,
          scale: scale
        )
      end

      def no_image
        Void.new(height: tile_height * scale, width: tile_width * scale)
      end

      def self.description
        "a grid of images"
      end

      def self.example_data
        {
          tiles_path: "media/images/tiles.png",
          tile_width: 64,
          tile_height: 64,
          scale: 0.2,
          grid: [
            [ nil, 0, 2, 0, 1 ],
            [ 0, nil, 1, 0, 1 ],
            [ 0, 0, nil, 0, 1 ],
            [ 0, 1, 2, nil, 1 ],
          ]
        }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dedalus-0.2.16 lib/dedalus/elements/image_grid.rb