refactor(engine-ambient): GameMgr.GetIns throws Require; wrap SessionBattleEngine entry points

Step 5 of multi-instancing migration. GameMgr.GetIns() now resolves through
BattleAmbient.Require() (throws when no scope active — fail-fast since engine
callers unconditionally dereference). SessionBattleEngine now owns a single
BattleAmbientContext, pushed via BattleAmbient.Enter at Setup/Receive/all
~30 read accessors and Debug* seams.

EngineGlobalInit.WirePerSessionGameMgr extracted out of the _done-gated block:
GameMgr is now per-session (ctx.GameMgr is a fresh `new()` per SessionBattleEngine),
so the DataMgr chara ids + NetworkUserInfoData seeding must run every Setup, not
process-once. The wiring itself is already idempotent. Without this, second-or-
later sessions in a process NRE in NetworkBattleManagerBase.CreateBackgroundId.

Expected state: SVSim.BattleEngine.Tests have known-failing tests that don't
go through SessionBattleEngine (Task 6 wraps HeadlessFixture). SVSim.UnitTests
mostly recover; residual failures (deal-frame Accepted:false in conductor
integration tests) are captured in
data_dumps/task5-test-output/failing-tests-after-task5-node-postwrap.txt for
Task 7.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-06-07 21:56:34 -04:00
parent 18da7fd19e
commit 1ba75c565a
4 changed files with 173 additions and 59 deletions

View File

@@ -79,8 +79,7 @@ public partial class GameObjMgr { public GameObjMgr() { } }
public class GameMgr
{
public static GameMgr GetIns() => _ins ??= new GameMgr();
private static GameMgr _ins;
public static GameMgr GetIns() => SVSim.BattleEngine.Ambient.BattleAmbient.Require().GameMgr;
public GameObject m_GameManagerObj;
public bool IsNewReplayBattle;
@@ -128,7 +127,10 @@ public class GameMgr
public Wizard.CardCreateTask GetCardCreateTask() => null;
public Wizard.MissionInfoTask GetMissionInfoTask() => null;
public static void CreateIns() { _ins ??= new GameMgr(); }
public static void CreateIns()
{
// No-op: GameMgr is now provisioned by BattleAmbientContext at scope entry.
}
public void CreateMgrIns(GameObject gameobj) { }
public void BuildDeckData() { }
public void DestroyBattleManagements() { }