feat(#46 PR 2): per-region stat lever (regionChanges) + region-stat hover
CI / build + unit + e2e (pull_request) Successful in 2m31s
CI / build + unit + e2e (pull_request) Successful in 2m31s
v0.29.0 — the LLM can now target individual regions' stats via TurnResult.regionChanges (set/add per stat, clamped 0-100), applied after nation-wide stateChanges and before the weighted-median recompute. The map hover tooltip shows each region's own four stats. The stub stays deterministic (regionChanges: []). Fixes #46 (PR 2 of 2)
This commit is contained in:
@@ -20,6 +20,23 @@ export type StateChange =
|
||||
| { nation: string; stat: StatKey; op: 'set'; value: number }
|
||||
| { nation: string; stat: StatKey; op: 'add'; value: number };
|
||||
|
||||
/**
|
||||
* (v0.29, #46 PR 2) A numeric change to one of **one region's** 0–100 stats —
|
||||
* the fine-grained, per-region lever that complements the nation-wide
|
||||
* {@link StateChange}. `region` names the target by its **region key**
|
||||
* (preferred) or its human-readable **name** (the engine resolves it
|
||||
* case-insensitively, mirroring `resolveNationRef`); after validation it holds
|
||||
* the resolved **region key**. `op` is `set` (replace the value) or `add`
|
||||
* (delta, clamped to 0–100 by the engine).
|
||||
*/
|
||||
export type RegionStatChange = {
|
||||
/** The target region's key (preferred) or name (resolved by the engine). */
|
||||
region: string;
|
||||
stat: StatKey;
|
||||
op: 'set' | 'add';
|
||||
value: number;
|
||||
};
|
||||
|
||||
/** Set the bilateral relation between nations `a` and `b` to `set` (symmetric). */
|
||||
export interface RelationChange {
|
||||
a: string;
|
||||
@@ -217,6 +234,17 @@ export interface TurnResult {
|
||||
date: string;
|
||||
events: TurnEventSpec[];
|
||||
stateChanges: StateChange[];
|
||||
/**
|
||||
* (v0.29, #46 PR 2) Fine-grained, **per-region** stat changes: each targets a
|
||||
* single region's 0–100 stats (by region key or name) and complements the
|
||||
* nation-wide `stateChanges` (which apply to *all* of a nation's regions).
|
||||
* The engine resolves each `region` to a key (key first, then a
|
||||
* case-insensitive unique name match) and applies it to
|
||||
* `GameState.regionStats` only for regions that have an entry (owned); an
|
||||
* unowned / no-man's-land region is a no-op. Empty on turns where the model
|
||||
* changes no individual region. Required (default `[]`).
|
||||
*/
|
||||
regionChanges: RegionStatChange[];
|
||||
relations: RelationChange[];
|
||||
territoryChanges: TerritoryChange[];
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user