using UnityEngine; namespace ZC { public class ZCGame : MonoBehaviour, IBehaviour { private GameObject _self; private Transform _objectPool; private float _gameTime; private bool _isPause; private bool _isActive; private bool _isDisposed; public long Id { get; } public bool isDisposed => _isDisposed; public bool isPause => _isPause; public bool isActive => _isActive; public static ZCGame _zcGame; private ObjectManager _objectManager; private UIManager _uiManager; private ProcedureManager _procedureManager; private ConfigManager _configManager; public static GameObject Self => _zcGame._self; public static Transform ObjectPool => _zcGame._objectPool; public static float GameTime => _zcGame._gameTime; public static IObjectManager ObjectManager => _zcGame._objectManager; public static IUIManager UIManager => _zcGame._uiManager; public static IProcedureManager ProcedureManager => _zcGame._procedureManager; #region Mono private void Update() { _gameTime += Time.deltaTime; OnUpdate(_gameTime); } private void OnDestroy() { OnDispose(); } #endregion public void OnInit(params object[] data) { var self = data[0] as GameObject; _zcGame = this; this._self = self; this._objectPool = self.transform.Find("ObjectPool"); this._isDisposed = false; this._isPause = false; AssemblyManager.Initialize(); this._objectManager = new ObjectManager(); this._objectManager.OnInit(data); this._uiManager = new UIManager(); this._procedureManager = new ProcedureManager(); this._configManager = new ConfigManager(); _uiManager.OnInit(data); _procedureManager.OnInit(data); _configManager.OnInit(data); this._procedureManager.ChangeProcedure(ProcedureType.LoadingGameSceneProcedure); } public void OnUpdate(float time, params object[] data) { if (this.isPause) return; this._uiManager.OnUpdate(time, data); this._procedureManager.OnUpdate(time, data); _objectManager.OnUpdate(time, data); } public void OnPause(params object[] data) { this._isPause = true; _uiManager.OnPause(data); _configManager.OnPause(data); _objectManager.OnPause(data); _procedureManager.OnPause(data); } public void OnResume(params object[] data) { this._isPause = false; _uiManager.OnResume(data); _configManager.OnResume(data); _objectManager.OnResume(data); _procedureManager.OnResume(data); } public void OnDispose(params object[] data) { _isActive = false; _isPause = true; _isDisposed = true; this._objectManager.OnDispose(data); _uiManager.OnDispose(data); _configManager.OnDispose(data); _procedureManager.OnDispose(data); ResourcesLocalComponent.Instance.OnDispose(); Debug.Log("关闭应用了"); } } }