Re-added a way to erase (or change) a map's tiles

This commit is contained in:
Maruno17
2021-11-03 22:40:02 +00:00
parent c392f8c236
commit ae7721316f
3 changed files with 18 additions and 8 deletions

View File

@@ -385,6 +385,14 @@ class Game_Map
end end
end end
def set_tile(x, y, layer, id = 0)
self.data[x, y, layer] = id
end
def erase_tile(x, y, layer)
set_tile(x, y, layer, 0)
end
def refresh def refresh
for event in @events.values for event in @events.values
event.refresh event.refresh

View File

@@ -235,6 +235,7 @@ class TilemapRenderer
#============================================================================= #=============================================================================
class TileSprite < Sprite class TileSprite < Sprite
attr_accessor :filename attr_accessor :filename
attr_accessor :tile_id
attr_accessor :is_autotile attr_accessor :is_autotile
attr_accessor :animated attr_accessor :animated
attr_accessor :priority attr_accessor :priority
@@ -242,10 +243,11 @@ class TilemapRenderer
attr_accessor :bridge attr_accessor :bridge
attr_accessor :need_refresh attr_accessor :need_refresh
def set_bitmap(filename, autotile, animated, priority, bitmap) def set_bitmap(filename, tile_id, autotile, animated, priority, bitmap)
self.bitmap = bitmap self.bitmap = bitmap
self.src_rect = Rect.new(0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT) self.src_rect = Rect.new(0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT)
@filename = filename @filename = filename
@tile_id = tile_id
@is_autotile = autotile @is_autotile = autotile
@animated = animated @animated = animated
@priority = priority @priority = priority
@@ -348,8 +350,9 @@ class TilemapRenderer
def refresh; end def refresh; end
def refresh_tile_bitmap(tile, map, tile_id) def refresh_tile_bitmap(tile, map, tile_id)
tile.tile_id = tile_id
if tile_id < TILES_PER_AUTOTILE if tile_id < TILES_PER_AUTOTILE
tile.set_bitmap("", false, false, 0, nil) tile.set_bitmap("", tile_id, false, false, 0, nil)
tile.shows_reflection = false tile.shows_reflection = false
tile.bridge = false tile.bridge = false
else else
@@ -375,11 +378,11 @@ class TilemapRenderer
else # Single extra autotiles else # Single extra autotiles
filename = extra_autotile_arrays[1][tile_id - single_autotile_start_id] filename = extra_autotile_arrays[1][tile_id - single_autotile_start_id]
end end
tile.set_bitmap(filename, true, @autotiles.animated?(filename), tile.set_bitmap(filename, tile_id, true, @autotiles.animated?(filename),
priority, @autotiles[filename]) priority, @autotiles[filename])
else else
filename = map.tileset_name filename = map.tileset_name
tile.set_bitmap(filename, false, false, priority, @tilesets[filename]) tile.set_bitmap(filename, tile_id, false, false, priority, @tilesets[filename])
end end
tile.shows_reflection = terrain_tag_data&.shows_reflections tile.shows_reflection = terrain_tag_data&.shows_reflections
tile.bridge = terrain_tag_data&.bridge tile.bridge = terrain_tag_data&.bridge
@@ -574,7 +577,7 @@ class TilemapRenderer
tile_y = j + map_display_y_tile tile_y = j + map_display_y_tile
@tiles[i][j].each_with_index do |tile, layer| @tiles[i][j].each_with_index do |tile, layer|
tile_id = map.data[tile_x, tile_y, layer] tile_id = map.data[tile_x, tile_y, layer]
if do_full_refresh || tile.need_refresh if do_full_refresh || tile.need_refresh || tile.tile_id != tile_id
refresh_tile(tile, i, j, map, layer, tile_id) refresh_tile(tile, i, j, map, layer, tile_id)
else else
refresh_tile_frame(tile, tile_id) if tile.animated && @autotiles.changed refresh_tile_frame(tile, tile_id) if tile.animated && @autotiles.changed
@@ -594,7 +597,7 @@ class TilemapRenderer
col.each_with_index do |coord, j| col.each_with_index do |coord, j|
next if visited[i][j] next if visited[i][j]
coord.each do |tile| coord.each do |tile|
tile.set_bitmap("", false, false, 0, nil) tile.set_bitmap("", 0, false, false, 0, nil)
tile.shows_reflection = false tile.shows_reflection = false
tile.bridge = false tile.bridge = false
end end

View File

@@ -136,8 +136,7 @@ Events.onStepTakenFieldMovement += proc { |_sender,e|
next if tile_id == nil next if tile_id == nil
next if GameData::TerrainTag.try_get(map.terrain_tags[tile_id]).id != :SootGrass next if GameData::TerrainTag.try_get(map.terrain_tags[tile_id]).id != :SootGrass
$player.soot += 1 if event == $game_player && $bag.has?(:SOOTSACK) $player.soot += 1 if event == $game_player && $bag.has?(:SOOTSACK)
# map.data[thistile[1], thistile[2], i] = 0 map.erase_tile(thistile[1], thistile[2], i)
# $scene.createSingleSpriteset(map.map_id)
break break
end end
} }