Commit Graph
31 Commits
Author SHA1 Message Date
popertots cb5b18008d fix 2026-03-22 11:50:53 +00:00
popertots 2f456f80b8 Gaussian idle 2026-03-22 11:29:50 +00:00
popertots 03c3e5d6d7 first pass at tree interaction 2026-03-21 18:57:15 +00:00
popertots 2622144cdf fixed typo 2026-03-21 17:09:32 +00:00
popertots 5b563bad67 perf: SmallVec inline storage, TOML drop tables, seeded deterministic RNG
- SmallVec<[DropEntry; 2]> replaces Vec in DropTable: zero heap allocation for
  all current tiles (0 or 1 entries), spills to heap only at 3+
- DropEntry fields packed to u8 (chance_pct, min_count, max_count): ~12 bytes ->
  4 bytes; derives Copy so no extra clones
- Replaced SystemTime pseudo-RNG with dig_rng(pos): PCG-style hash of world SEED
  + tile position. Deterministic per world, same dig = same roll every time
- TOML-driven drop tables: assets/drop_tables.toml (grass=5%/1-2, rock=10%/1,
  dirt/air=none). TOML parsed at startup into DropTableRegistry resource
- OnceLock global map for async terrain generation tasks to access drop tables
  without Bevy resource borrowing
- terrain.rs: DropTableRegistry::global_get("tile") replaces hardcoded drop_table_for
2026-03-21 16:06:41 +00:00
popertots 90a6196443 feat: soft entity collision, dead code removal, leaf standability fix
- Add TileOccupancy resource and rebuild_tile_occupancy system to track
  per-tile entity counts for soft collision avoidance
- Add collision_delay to Ambulatory; entities try relative-left step on
  occupied tiles, wait 1 tick, then push through
- Fix leaf canopy standability: leaves are now can_stand_in=true,
  can_stand_on=false (walkable, not standable-on)
- Delete FloorTilePrefab / FixtureTilePrefab / FloorTile / FixtureTile /
  TileState (all fully dead — TileMap + ChunkData are sole truth)
- Delete tile_spawns from TerrainBlob (populated but never consumed)
- Delete leaf ghost entity spawn in forestry (orphaned invisible ECS entity)
- Replace log prefab spawn with inline commands.spawn(Transform, Visibility)
- Add TileMap::remove_fixture for future digging/explosion use
- Skip collision avoidance when current tile has >2 entities (handles spawn
  cluster deadlock)
2026-03-21 01:36:38 +00:00
popertots f9a74ed432 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)
2026-03-20 14:02:04 +00:00
popertots 975ac20876 minor 2025-09-14 19:04:34 +01:00
popertots 8a5884c6d5 example item 2025-09-12 18:04:03 +01:00
popertots ee7ac39ad5 refactor file locations for readability 2025-09-11 18:23:53 +01:00
popertots e58f6804bf File cleanup 2025-09-10 20:03:29 +01:00
popertots cbc8011f33 Art 2025-09-10 18:11:01 +01:00
popertots d2dd70caa0 add trees 2025-05-23 17:09:58 +01:00
popertots e2ccd0cead Log (wip), parallelisation 2025-05-11 22:58:25 +01:00
popertots 49095cc47f terrain quilting scaling fix 2025-05-05 23:09:28 +01:00
StephenAdamson 4ba6fecc27 batch sprite 1 2025-02-08 00:23:49 +00:00
StephenAdamson 501c66a1b0 better dorf z 2025-01-25 16:54:27 +00:00
StephenAdamson c88067437c art 2025-01-13 21:02:55 +00:00
StephenAdamson ed88d5bdce partial chunking 2025-01-07 21:35:44 +00:00
StephenAdamson 11ba882d54 images 2024-12-30 22:19:25 +00:00
popertots a4342c9aa0 start con_text 2024-12-29 19:03:26 +00:00
StephenAdamson 3aadb8bb78 Separate floor from fixture 2024-12-29 00:45:07 +00:00
StephenAdamson b47e6cce69 barrel 2024-12-18 00:38:25 +00:00
StephenAdamson d107626b32 changeable z index, with occlusion 2024-12-17 21:30:46 +00:00
StephenAdamson caacf4e072 occlusion part 2 2024-12-17 21:10:21 +00:00
StephenAdamson 80afd547e5 Occlusion attempt 1 2024-12-17 19:44:54 +00:00
popertots 8d89f86c69 z sorting attempt 2024-12-14 01:04:52 +00:00
StephenAdamson bf3ddd0e74 attempt noise gen 2024-12-14 00:03:52 +00:00
StephenAdamson 7363ec9d39 cursor ui 2024-12-13 23:07:08 +00:00
StephenAdamson 01e1349ea1 initial z axis tiles pass 2024-12-13 00:19:21 +00:00
StephenAdamson 7bab01ee74 Initial tile push with item cycle 2024-12-12 17:19:59 +00:00