From efdcd23e39685d8d6935e6ea959935bbdcc79f4d Mon Sep 17 00:00:00 2001 From: autocommit Date: Sun, 17 May 2026 23:59:31 -0700 Subject: [PATCH] =?UTF-8?q?feat(mc-turn):=20=E2=9C=A8=20Add=20multi-slot?= =?UTF-8?q?=20turn-based=20simulation=20support=20with=20slot=20management?= =?UTF-8?q?=20and=20state=20transitions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/simulator/crates/mc-turn/src/game_state.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/simulator/crates/mc-turn/src/game_state.rs b/src/simulator/crates/mc-turn/src/game_state.rs index 4862dc44..6c01567a 100644 --- a/src/simulator/crates/mc-turn/src/game_state.rs +++ b/src/simulator/crates/mc-turn/src/game_state.rs @@ -715,6 +715,15 @@ pub struct PlayerState { /// keep their current behaviour without any changes. #[serde(default)] pub building_priors: mc_ai::tactical::state::BuildingPriors, + /// Stage 3 (mod system) — controller registry id used by + /// `mc_player_api::dispatch::drive_ai_slot` to look up which + /// `AiController` impl decides this slot's turn. Defaults to + /// `"scripted:default"` (the in-box MCTS+heuristic). Mod-supplied + /// controllers register their own id (`"learned:duel-v1b"`, + /// `"community:foo"`, ...) and the game-setup UI picks per slot. + /// Empty = fall-through to default at dispatch time. + #[serde(default)] + pub controller_id: String, /// Accumulated expansion capacity (earned from the `expansion` axis). pub expansion_points: u32, /// Per-city list of constructed building IDs. Aligned with `cities`.