feat: migrate quilter rendering to Bevy TilemapChunk
Replaces the CPU pixel-baking quilter system (QuiltCache, TerrainSprite, pixel_buffers) with Bevy's native TilemapChunk GPU-index-lookup API. Architecture: - TilemapChunk entities replace TerrainSprite entities per (chunk, z, layer) - Tileset PNG stacked vertically as texture_2d_array (11 rows: 6 floor + 5 fixture) - populate_chunk_tiles reads TileMap HashMap directly; no ECS FloorTile entities - Chunk spawn deferred to apply_terrain_blobs (after TileMap data exists) - Dirty key system triggers repopulate on occlusion/camera-z changes Bug fixes: - populate_chunk_tiles: add chunk_pos offset to world tile lookups (was always (0,0)) - spawn_tilemap_chunks: offset Transform by -TILE_SIZE/2 (tile-centre vs bottom-left) - spawn_tilemap_chunks: AlphaMode2d::Blend (was Opaque, blocking DF fade) - update_tilemap_chunk_visibility: actually mutate Visibility (was read-only) - handle_tile_occlusion_updates: mark dirty keys inline (was double-reading events) - TilemapChunkSpawner: deduplicate pending queue and guard stale registry Performance: - ~115K FloorTile ECS entities eliminated - GPU memory: O(tile_data) instead of O(CHUNK_TILES² × z_levels × pixel_bytes) - Z-scroll: only TilemapChunkTileData repopulates (no entity re-spawn) - Benchmarks via TilemapBenchmark resource (F9 to report)
This commit is contained in:
@@ -21,11 +21,7 @@ fn main() {
|
||||
App::new()
|
||||
.insert_resource(game_config)
|
||||
.insert_resource(game::ZIndex(0.0))
|
||||
.insert_resource(world::tiles::CurrentWorldSpriteState {
|
||||
state: world::tiles::TerrainSpriteState::Inactive,
|
||||
})
|
||||
.insert_resource(camera::CameraMoved(false))
|
||||
.insert_resource(world::tiles::QuiltCache::default())
|
||||
.init_resource::<SpawnDelay>()
|
||||
.add_systems(PreStartup, world::textures::initialize_textures)
|
||||
.add_plugins(
|
||||
|
||||
Reference in New Issue
Block a user