mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-08 21:54:58 +00:00
Caches expanded autotiles to reduce stutter caused by map connections
This commit is contained in:
@@ -137,12 +137,28 @@ class TilemapRenderer
|
||||
set_current_frame(filename)
|
||||
end
|
||||
|
||||
EXPANDED_AUTOTILES_FOLDER = "Graphics/Autotiles/ExpandedAutotiles/"
|
||||
|
||||
def add(filename)
|
||||
return if nil_or_empty?(filename)
|
||||
if @bitmaps[filename]
|
||||
@load_counts[filename] += 1
|
||||
return
|
||||
end
|
||||
|
||||
# Try to load expanded autotile from cache first
|
||||
cached_path = File.join("Graphics", "Autotiles/ExpandedAutotiles", "#{filename}.png")
|
||||
if FileTest.exist?(cached_path)
|
||||
echoln "Loading cached expanded autotile for #{filename}"
|
||||
bitmap = RPG::Cache.load_bitmap(EXPANDED_AUTOTILES_FOLDER, filename)
|
||||
|
||||
duration = AUTOTILE_FRAME_DURATION
|
||||
if filename[/\[\s*(\d+?)\s*\]\s*$/]
|
||||
duration = $~[1].to_i
|
||||
end
|
||||
@frame_durations[filename] = duration.to_f / 20
|
||||
|
||||
else
|
||||
orig_bitmap = pbGetAutotile(filename)
|
||||
@bitmap_wraps[filename] = false
|
||||
duration = AUTOTILE_FRAME_DURATION
|
||||
@@ -150,12 +166,20 @@ class TilemapRenderer
|
||||
duration = $~[1].to_i
|
||||
end
|
||||
@frame_durations[filename] = duration.to_f / 20
|
||||
bitmap = AutotileExpander.expand(orig_bitmap)
|
||||
expanded_bitmap = AutotileExpander.expand(orig_bitmap)
|
||||
|
||||
# Save expanded bitmap to cache for next time
|
||||
Dir.mkdir(EXPANDED_AUTOTILES_FOLDER) unless Dir.exist?(EXPANDED_AUTOTILES_FOLDER)
|
||||
expanded_bitmap.save_to_png(cached_path)
|
||||
|
||||
bitmap = expanded_bitmap
|
||||
orig_bitmap.dispose if orig_bitmap != expanded_bitmap
|
||||
end
|
||||
|
||||
self[filename] = bitmap
|
||||
if bitmap.height > SOURCE_TILE_HEIGHT && bitmap.height < TILES_PER_AUTOTILE * SOURCE_TILE_HEIGHT
|
||||
@bitmap_wraps[filename] = true
|
||||
end
|
||||
orig_bitmap.dispose if orig_bitmap != bitmap
|
||||
@load_counts[filename] = 1
|
||||
end
|
||||
|
||||
@@ -382,7 +406,8 @@ class TilemapRenderer
|
||||
filename = map.autotile_names[(tile_id / TILES_PER_AUTOTILE) - 1]
|
||||
elsif tile_id < single_autotile_start_id # Large extra autotiles
|
||||
filename = extra_autotile_arrays[0][(tile_id - TILESET_START_ID) / TILES_PER_AUTOTILE]
|
||||
else # Single extra autotiles
|
||||
else
|
||||
# Single extra autotiles
|
||||
filename = extra_autotile_arrays[1][tile_id - single_autotile_start_id]
|
||||
end
|
||||
tile.set_bitmap(filename, tile_id, true, @autotiles.animated?(filename),
|
||||
|
||||
Reference in New Issue
Block a user