Class: Bestguigui::Tiled::TileLayer
- Inherits:
-
Object
- Object
- Bestguigui::Tiled::TileLayer
- Defined in:
- lib/bestguigui/tiled.rb
Overview
Couche de tuiles. Les gids Tiled comptent depuis 1 (0 = case vide) —
tile_at/each_tile renvoient déjà des index 0-based, ou nil pour
une case vide.
Instance Attribute Summary collapse
-
#height ⇒ Object
readonly
Returns the value of attribute height.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#width ⇒ Object
readonly
Returns the value of attribute width.
Instance Method Summary collapse
-
#bake(tileset, tile_width:, tile_height:, retro: true) ⇒ Object
Compose toute la couche en une seule image (Gosu.render), une fois — pour un sol/fond statique dessiné à partir d'un tileset plutôt que tuile par tuile à chaque frame (1 draw call au lieu d'un par tuile visible, quelle que soit la taille du niveau).
-
#each_tile ⇒ Object
yield(x, y, tile_index) pour chaque case non vide.
-
#initialize(data) ⇒ TileLayer
constructor
A new instance of TileLayer.
- #tile_at(x, y) ⇒ Object
Constructor Details
#initialize(data) ⇒ TileLayer
Returns a new instance of TileLayer.
69 70 71 72 73 74 |
# File 'lib/bestguigui/tiled.rb', line 69 def initialize(data) @name = data["name"] @width = data["width"] @height = data["height"] @gids = data["data"] end |
Instance Attribute Details
#height ⇒ Object (readonly)
Returns the value of attribute height.
67 68 69 |
# File 'lib/bestguigui/tiled.rb', line 67 def height @height end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
67 68 69 |
# File 'lib/bestguigui/tiled.rb', line 67 def name @name end |
#width ⇒ Object (readonly)
Returns the value of attribute width.
67 68 69 |
# File 'lib/bestguigui/tiled.rb', line 67 def width @width end |
Instance Method Details
#bake(tileset, tile_width:, tile_height:, retro: true) ⇒ Object
Compose toute la couche en une seule image (Gosu.render), une fois — pour un sol/fond statique dessiné à partir d'un tileset plutôt que tuile par tuile à chaque frame (1 draw call au lieu d'un par tuile visible, quelle que soit la taille du niveau).
tileset = Gosu::Image.load_tiles("gfx/tileset.png", 16, 16, retro: true)
floor_image = map.tile_layer.bake(tileset, tile_width: 16, tile_height: 16)
Ne convient pas à un fond qui mélange remplissage + marqueurs épars
(une minimap, par exemple) — dans ce cas, Gosu.render directement
reste plus adapté qu'une grille de tuiles uniforme.
104 105 106 107 108 |
# File 'lib/bestguigui/tiled.rb', line 104 def bake(tileset, tile_width:, tile_height:, retro: true) Gosu.render(width * tile_width, height * tile_height, retro: retro) do each_tile { |x, y, tile| tileset[tile].draw(x * tile_width, y * tile_height, 0) } end end |
#each_tile ⇒ Object
yield(x, y, tile_index) pour chaque case non vide.
84 85 86 87 88 89 90 91 |
# File 'lib/bestguigui/tiled.rb', line 84 def each_tile @height.times do |y| @width.times do |x| tile = tile_at(x, y) yield x, y, tile unless tile.nil? end end end |
#tile_at(x, y) ⇒ Object
76 77 78 79 80 81 |
# File 'lib/bestguigui/tiled.rb', line 76 def tile_at(x, y) return nil if x.negative? || y.negative? || x >= @width || y >= @height gid = @gids[(y * @width) + x] gid.zero? ? nil : gid - 1 end |