using GameLogic; using TEngine; using Object = UnityEngine.Object; public class GameModule { #region 框架模块 /// /// 获取游戏基础模块。 /// public static RootModule Base { get => _base ??= Object.FindObjectOfType(); private set => _base = value; } private static RootModule _base; /// /// 获取调试模块。 /// public static IDebuggerModule Debugger { get => _debugger ??= Get(); private set => _debugger = value; } private static IDebuggerModule _debugger; /// /// 获取有限状态机模块。 /// public static IFsmModule Fsm => _fsm ??= Get(); private static IFsmModule _fsm; /// /// 流程管理模块。 /// public static IProcedureModule Procedure => _procedure ??= Get(); private static IProcedureModule _procedure; /// /// 获取资源模块。 /// public static IResourceModule Resource => _resource ??= Get(); private static IResourceModule _resource; /// /// 获取音频模块。 /// public static IAudioModule Audio => _audio ??= Get(); private static IAudioModule _audio; /// /// 获取UI模块。 /// public static UIModule UI => _ui ??= UIModule.Instance; private static UIModule _ui; /// /// 获取场景模块。 /// public static ISceneModule Scene => _scene ??= Get(); private static ISceneModule _scene; /// /// 获取计时器模块。 /// public static ITimerModule Timer => _timer ??= Get(); private static ITimerModule _timer; /// /// 获取本地化模块。 /// public static ILocalizationModule Localization => _localization ??= Get(); private static ILocalizationModule _localization; #endregion /// /// 获取游戏框架模块类。 /// /// 游戏框架模块类。 /// 游戏框架模块实例。 private static T Get() where T : class { T module = ModuleSystem.GetModule(); Log.Assert(condition: module != null, $"{typeof(T)} is null"); return module; } public static void Shutdown() { Log.Info("GameModule Shutdown"); _base = null; _debugger = null; _fsm = null; _procedure = null; _resource = null; _audio = null; _ui = null; _scene = null; _timer = null; _localization = null; } }