Commit Graph
57 Commits
Author SHA1 Message Date
popertots cb5b18008d fix 2026-03-22 11:50:53 +00:00
popertots cafe376841 Plugin cleanup 2026-03-22 00:43:03 +00:00
popertots d61baaf1ba Task Infrastructure — Task Enum, Queue, Events, Executor 2026-03-22 00:35:22 +00:00
popertots 458068fb87 run_if 2026-03-22 00:03:57 +00:00
popertots c776b91a44 haulage system WIP 2026-03-21 23:39:58 +00:00
popertots ce3746366c refactor: extract generic digging system, drop tables, remove debug code
- New src/entities/item/drop_table.rs: DropEntry (chance, min/max count,
  pseudo-RNG roll) + DropTable wrapper. grass=5% coin 1-2, rock=10% coin 1,
  dirt/air=none.
- New src/entities/shared_systems/digging.rs: Digger component + dig_system.
  Any entity with Digger digs the tile below on its interval. Replaces
  rabbit_dig_system/rabbit_fall_debug_system/RabbitDigTimer/RabbitFallDebug.
- New TileMap::dig_floor: remove_floor + insert air. Used by dig_system.
- FloorTileData: added drop_table field. Lost Copy derive (Vec field).
  Updated all 6 terrain.rs call sites with per-tile drop tables.
- Pig: removed PigDropTimer + pig_drop_system. Drops were debug placeholder.
  TODO added for future loot-on-death/butcher system.
- Rabbit: removed all debug components/systems. Now uses Digger::new(5.0).
- main.rs: removed rabbit_dig_system/rabbit_fall_debug_system/pig_drop_system,
  added shared_systems::digging::dig_system.
2026-03-21 15:40:34 +00:00
popertots 89693f968c add debug 2026-03-21 14:50:31 +00:00
popertots 5357a69930 feat: stage 2 collision, TileChangedEvent, path invalidation, rabbit digging
- Stage 2 collision: convoy skip when entities move same direction (dot>0.7),
  E/S yield rule for crossings, W/N right-of-way, head-on unchanged
- TileChangedEvent (Message) + PathfindingDirtyChunks (Resource) in new tile_changed module
- collect_pathfinding_dirty_chunks / invalidate_paths_on_tile_change /
  clear_pathfinding_dirty_chunks in PathfindingPlugin FixedUpdate chain
- TileMap::remove_floor clears HashMap + ChunkData bitsets + tile_ids
- RabbitDigTimer component: rabbits dig floor below every 5s, fires TileChangedEvent
  and TileOcclusionEvent for path invalidation + rendering
2026-03-21 11:56:51 +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 06bbc9caa8 feat: neofetch-style system info dump at startup
Prints DORF SYSTEM box to stdout before game loop begins:
OS, CPU (model + cores), GPU (WEBGPU_ADAPTER_NAME env var),
RAM total + free (from /proc/meminfo), display vsync mode,
initial chunk radius, world seed.
2026-03-20 17:16:54 +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 9535d65bd7 feat: data-oriented chunks optimization with tile registry
- Phase 1: Bit-packed standability (ChunkData with bitsets)
- Phase 2: Reactive connectivity (dirty chunks)
- Phase 3: Async terrain baking (AsyncComputeTaskPool)
- Pathfinding weight system (rock=50 preferred, bedrock=150 avoided)
- Movement speed affected by tile weight
- External tiles.toml for hot-reloadable tile definitions
- TileRegistry singleton for async-safe tile lookups
- Fixed world_to_chunk to use CHUNK_SIZE_TILE (128) not CHUNK_SIZE (8)
- Fixed infinite spawner with Local<bool> state guards
- Fixed spawn coordinate grid alignment

Note: Zigzag pathfinding bug introduced - needs investigation
2026-03-19 19:15:36 +00:00
popertots 15c0d1c7a2 external config 2026-03-18 23:19:58 +00:00
popertots 4ef68c4e04 migratetion to 0.18.0 2026-02-16 00:02:00 +00:00
popertots 886d162963 dropped item rotation 2026-02-15 18:56:38 +00:00
popertots 4c4c985be3 item flashing 2025-09-14 18:48:50 +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 feed403495 Update bevy version, implement bevy_rand 2025-09-07 20:05:00 +01:00
popertots 950f02c2e1 rework pathfinding, game entity fog rendering, and tilemap usage 2025-05-27 23:10:54 +01:00
popertots ac033de136 rework occlusion events 2025-05-23 14:01:28 +01:00
popertots 31e6eb29b2 camera zooming 2025-05-09 18:13:28 +01:00
popertots 6f4de57f1b average composite on terrain sprites 2025-05-06 22:31:31 +01:00
popertots 5726a68efb Terrain quilting 2025-05-05 00:09:12 +01:00
popertots b7261ae847 bevy 0.16 migration 2025-05-02 19:27:23 +01:00
popertots 9f264f230e revert to non-benchmark 2025-05-02 18:20:32 +01:00
StephenAdamson 4ba6fecc27 batch sprite 1 2025-02-08 00:23:49 +00:00
StephenAdamson 4089851734 benchmark 2025-02-06 21:32:30 +00:00
StephenAdamson 6161c21e22 Singular tiles resource 2025-02-01 01:07:39 +00:00
popertots 7143a9dded working path finding, non working targeting 2025-01-24 17:20:45 +00:00
popertots ca3fcc00ff path 2 2025-01-21 23:39:00 +00:00
StephenAdamson bb3905e6b9 minor 2025-01-21 21:02:40 +00:00
popertots 53b95f452f Fixed targeting for citizen movement 2025-01-19 22:13:24 +00:00
StephenAdamson 594131a372 movement redo part 1 2025-01-17 23:58:19 +00:00
StephenAdamson 0af88c213d partial a* 2025-01-17 20:05:08 +00:00
StephenAdamson 7b8142afd2 0.15.1, fps 2025-01-16 21:35:04 +00:00
StephenAdamson d2e9bb0cf3 Chunking 3 2025-01-15 19:50:18 +00:00
StephenAdamson 7f1ec77ab0 Tilemap chunking part 2 2025-01-14 23:52:09 +00:00
popertots 6c3232df74 chunk2? 2025-01-08 01:33:18 +00:00
StephenAdamson ed88d5bdce partial chunking 2025-01-07 21:35:44 +00:00
StephenAdamson 73dcbd4102 global tilemap (ish) 2024-12-30 22:18:20 +00:00
StephenAdamson 3aadb8bb78 Separate floor from fixture 2024-12-29 00:45:07 +00:00
StephenAdamson 1d292d080b Noise surface 2024-12-20 22:45:30 +00:00
StephenAdamson d78314eb51 baked occlusion bit mapping 2024-12-20 00:28:28 +00:00
StephenAdamson fbeaf775bf cleanup 2024-12-18 00:22:52 +00:00
StephenAdamson 18d587fdea cleanup 2024-12-18 00:09:13 +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