feat: scale village queries and enrich Jajce center

This commit is contained in:
Rijad Zuzo
2026-07-16 23:51:08 +02:00
parent 4be72639d8
commit 2c88ed6ea8
48 changed files with 2059 additions and 280 deletions
+12
View File
@@ -10,6 +10,7 @@ results.
```text
SimulationClock
-> SimulationManager orchestrates one deterministic tick
-> SimulationPopulationView indexes all/living/starving NPCs by stable ID
-> ActionExecutionSystem advances needs and work
-> VillageOpportunitySystem re-derives the current capable helper
-> ActionSelectionSystem chooses an action
@@ -42,6 +43,10 @@ would otherwise obscure that lifecycle:
first without weakening its direct-source or one-hop checks;
- `simulation/relationships/RelationshipSystem.gd` owns directed relationship
queries, event-driven trust changes, and deterministic social tie-breaking;
- `simulation/population/SimulationPopulationView.gd` owns a transient derived
all/living/starving stable-ID index. The manager rebuilds it once at the tick
boundary and refreshes it after each interleaved NPC update; relationship and
action queries may read it, but it never enters save records;
- `simulation/opportunities/VillageOpportunitySystem.gd` observes immutable
event references plus current NPC/storage state, then owns the bounded shared
open/resolved/invalidated lifecycle for the proven pantry-food and blocked-
@@ -76,6 +81,7 @@ hard to read.
| `simulation/events/` | Immutable event history and derived event queries |
| `simulation/knowledge/` | Per-NPC knowledge of objective event IDs |
| `simulation/relationships/` | Directed social consequences and relationship queries |
| `simulation/population/` | Transient per-tick population query indexes |
| `simulation/opportunities/` | Knowledge-gated unresolved-condition projections |
| `simulation/state/` | Versioned, serializable mutable records |
| `simulation/definitions/` | Stable IDs and immutable gameplay definitions |
@@ -118,6 +124,12 @@ improving ownership.
- Benchmark fixtures use ordinary simulation records and must round-trip
through the current state schema. They may control workload setup, but must
not add benchmark-only fields or branches to production saves and ticks.
- Derived population indexes are disposable acceleration structures. NPC
records remain authoritative, and rebuilding the view after initialization,
restore, or a tick must produce the same decisions and checksum.
- Camera-local grass, ambient butterflies, water animation, smoke, and foliage
motion are presentation only. Grass consumes bounded real actor transforms;
it does not write NPC positions or become persistent state.
- Opportunity records reference stable NPC, storage, resource, trigger-event,
and resolution-event IDs. Their generator may observe authoritative state
and history, but it does not mutate the economy or command NPC behavior. The