using System.Collections; using UnityEngine; namespace Wizard; public static class ToolboxGame { private enum SYSTEM_INIT { SYSTEM_NOT_READY, SYSTEM_READY } public static SetUp SetUp = null; public static UIManager UIManager = null; public static GameMgr GameManager = null; public static bool isLoadFromLocal = false; public static bool isLoadLocalSound = false; public static bool bDebugLogMode = true; private static Transform _gameTransform = null; public static RealTimeNetworkAgent RealTimeNetworkAgent { // Soft read: returns null when no scope is active, mirroring GetIns. Engine code reads this // via `ToolboxGame.RealTimeNetworkAgent?.Foo`-style patterns (network-send paths gated on a // non-null agent), so a null on the unwrapped path is the correct degrade — not a throw. get => SVSim.BattleEngine.Ambient.BattleAmbient.Current?.NetworkAgent; } public static Transform GameTransform { get { if (!_gameTransform) { GameObject gameObject = GameObject.Find("_Game"); if ((bool)gameObject) { _gameTransform = gameObject.transform; } } return _gameTransform; } } public static void Clear() { UIManager = null; GameManager = null; } public static void ClearUIManager() { UIManager = null; } public static void SetRealTimeNetworkBattle(RealTimeNetworkAgent agent) { // Strict: must be inside a scope to set the per-session agent. Forcing-function — any // historical unwrapped caller (no production callsite remains) now fails fast. SVSim.BattleEngine.Ambient.BattleAmbient.Require().NetworkAgent = agent; } public static void DestroyNetworkAgent() { var c = SVSim.BattleEngine.Ambient.BattleAmbient.Current; var current = c?.NetworkAgent; if (current != null) { Object.DestroyImmediate(current.gameObject); c.NetworkAgent = null; } } public static IEnumerator CreateRealTimeNetworkBattleAgent(Matching matching = null) { string loadObjectPath = "TurnBase/_TurnBaseManager"; if (GameMgr.GetIns().IsAINetwork) { loadObjectPath = "TurnBase/_AINetworkBaseManager"; } yield return BattleCoroutine.GetInstance().StartCoroutine(GameMgr.GetIns().GetPrefabMgr().LoadAync(loadObjectPath)); NGUITools.AddChild(GameObject.Find("_Game"), GameMgr.GetIns().GetPrefabMgr().Get(loadObjectPath)); yield return null; if (matching != null) { RealTimeNetworkAgent.SettingMatchingClass(matching); } } }