using Cielonos.Core.UI; using Cielonos.MainGame.Characters; using DG.Tweening; using Sirenix.OdinInspector; using SLSUtilities.General; using SLSUtilities.UI; using UnityEngine; using UnityEngine.Localization.Settings; using UnityEngine.SceneManagement; namespace Cielonos.MainGame { public partial class MainGameManager : Singleton { [SerializeField] private Player player; [SerializeField] private MainGameBaseCollection baseCollection; [SerializeField] private MainGameConfig mainGameConfig; [Title("Submodules")] public SceneSubmodule sceneSm; protected override void Awake() { base.Awake(); sceneSm = new SceneSubmodule(this); LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.GetLocale("zh-CN"); } private void Start() { Application.targetFrameRate = 120; // 订阅 UIPageManager 的输入阻塞事件,联动 isCursorLocked if (UIPageManager.Instance != null) { UIPageManager.Instance.OnInputBlockChanged += OnUIInputBlockChanged; } if (sceneSm.IsCityArena) { RunManager.Instance.StartNewRun(); sceneSm.cityArenaBeginningProcessor.Process(); } else if (sceneSm.IsFortress) { // 基地场景不需要 RunManager,直接锁定鼠标并开启移动输入 if (player != null && player.inputSc != null) { player.inputSc.isCursorLocked.Value = true; } // 播放淡入动画(如果有 ScreenFader 的话) ScreenFader.Instance?.FadeToClear().Play(); } } // ESC 统一由 PlayerInputSubcontroller.RegisterFunctionInputs() 处理, // 不再在此处重复监听,避免双重触发。 private void OnDestroy() { if (UIPageManager.Instance != null) { UIPageManager.Instance.OnInputBlockChanged -= OnUIInputBlockChanged; } } /// /// UIPageManager 输入阻塞回调。 /// blocked = true:有页面打开 → 解锁鼠标,禁用游戏输入。 /// blocked = false:所有页面关闭 → 锁定鼠标,恢复游戏输入。 /// private void OnUIInputBlockChanged(bool blocked) { player.inputSc.isCursorLocked.Value = !blocked; } } public partial class MainGameManager { public static Player Player => Instance.player; public static AttributeSubmodule GlobalAttributeSm => Player.globalAttributeSm; public static MainGameBaseCollection BaseCollection => Instance.baseCollection; public static MainGameConfig Config => Instance.mainGameConfig; public static string Seed; } }