2.3 KiB
2.3 KiB
| id | title | priority | status | scope | updated_at | evidence | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| p0-04 | World wonder tracking in PlayerState and score victory | p0 | done | game1 | 2026-04-17 |
|
Summary
Wonder tracking fully wired end-to-end. Rust: PlayerState.wonders_built: BTreeMap<WonderId, u8>, wonder completion hooks in process_city_production, calculate_score folds tier-weighted points. GDScript UI: encyclopedia "Wonders" tab (filter on flags.has("wonder"), built/unbuilt status from GameState.wonders_built); city screen left column shows WondersList of player-owned wonders with tier when non-empty. GUT: 5 tests in test_wonders_built_ui.gd.
Acceptance
- ✓
PlayerState.wonders_built: BTreeMap<WonderId, u8>added — evidence:src/simulator/crates/mc-turn/src/game_state.rs; deterministic BTree iteration.WonderIdnewtype atsrc/simulator/crates/mc-core/src/wonder.rs. - ✓ Wonder completion appended on build — evidence:
src/simulator/crates/mc-turn/src/processor.rs::process_city_productiondetectsQueueable::Wonder { wonder_id }completion, readsqueue_tier, inserts intoplayer.wonders_built. - ✓
victory::calculate_scorefolds tier-weighted wonder points — evidence:src/simulator/crates/mc-turn/src/victory.rsdefinesSCORE_WONDER_BASEconst;calculate_scoresumsSCORE_WONDER_BASE * tierper wonder. Test:victory::tests::wonder_score_weighted_by_tierPASS on apricot. - ✓ Encyclopedia/city UI "Wonders built" listing — evidence:
src/game/engine/scenes/encyclopedia/encyclopedia_panel.gdadds "Wonders" tab (filter onflags.has("wonder")) with built/unbuilt status;src/game/engine/scenes/city/city_screen.gd+.tscnaddWondersListItemList showing player-owned wonders with tier. GUT:src/game/engine/tests/unit/test_wonders_built_ui.gd(5 tests).