Sha256: 1803a3c7a8029eb79b4e01fc03e62ecdc42642111ba99ac22d2df6b00e348b85

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

module Dedalus
  module Elements
    class SpriteField < Dedalus::Organism

      attr_accessor :grid, :sprite_map, :scale

      def show
        layers
      end

      def layers
        layer_stack = Dedalus::LayerStack.new
        layer_stack.push(Dedalus::Layer.new(background_image))
        layer_stack.push(Dedalus::Layer.new(image_grid))

        # p [ canvas_layer: canvas_layer ] 
        layer_stack.push(canvas_layer)
        layer_stack
      end

      def canvas_layer
        # TODO one sprite *layer*
        Dedalus::Layer.new(sprites, freeform: true)
      end

      def sprites
        sprite_map.flat_map do |location, sprite_list|
          sprite_list.map do |sprite|
            position = to_screen_coordinates(location: location)
            sprite.position = position
            p [ updated_sprite_position: sprite ]
            sprite
            # Sprite.new(sprite_attrs.merge(position: position))
          end
        end
      end

      def image_grid
        ImageGrid.new(
          tiles_path: 'media/images/tiles.png',
          grid: grid,
          tile_width: 64,
          tile_height: 64
        )
      end

      def to_screen_coordinates(location:)
        x,y = *location
        [(x * image_grid.tile_width), (y * image_grid.tile_height)]
      end

      def background_image
        Image.new(path: "media/images/cosmos.jpg", z_order: -1, scale: self.scale)
      end

      def self.description
        'sprites overlaid on an image grid'
      end

      def self.example_data
        {
          grid: [[0,0,0,0,0],
                 [0,0,0,0,0],
                 [1,1,1,1,1],
                 [1,1,1,1,1]],
          scale: 0.3,
          player_location: [2,2],
          sprite_map: { [1.2,2.4] => [ Sprite.new(Sprite.example_data) ] }
        }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dedalus-0.2.7 lib/dedalus/elements/sprite_field.rb