using System; using Cysharp.Threading.Tasks; using Game.RayCast; using TMPro; using UnityEngine; using UnityEngine.Serialization; using YooAsset; using ZKYZ; namespace Game { public partial class Game : MonoBehaviour { private static Game _game; private GameObject _self => gameObject; private UIManager _uiManager; private ResourceManager _resourceManager; private ProcedureManager _procedureManager; private MouseInputManager _mouseInputManager; [SerializeField] private EPlayMode _loadType = EPlayMode.EditorSimulateMode; [SerializeField] private float time; [SerializeField] private GameInitType _gameInitType = GameInitType.None; [SerializeField] private Camera _playerCamera; [SerializeField] private Camera _playerUICamera; [SerializeField] private AudioListener _eye; public static GameObject self => _game._self; public static Camera playerCamera => _game._playerCamera; public static Camera playerUICamera => _game._playerUICamera; public static AudioListener eye => _game._eye; public static IProcedureManager procedureManager => _game._procedureManager; public static IResourceManager resourceManager => _game._resourceManager; public static IUIManager uiManager => _game._uiManager; public static IMouseInputManager mouseInputManager => _game._mouseInputManager; private void Awake() { _game = this; DontDestroyOnLoad(this.gameObject); AssemblyManager.Initialize(); #if UNITY_EDITOR // this._loadType = EPlayMode.EditorSimulateMode; #elif UNITY_ANDROID|| PLATFORM_ANDROID|| ENABLE_WEBCAM|| UNITY_WEBGL|| UNITY_EDITOR_WIN this._loadType = EPlayMode.HostPlayMode; #endif this._uiManager = new UIManager(); this._resourceManager = new ResourceManager(); this._procedureManager = new ProcedureManager(); this._mouseInputManager = new MouseInputManager(); this._resourceManager.Init(); this._uiManager.Init(); this._procedureManager.Init(); this._mouseInputManager.Init(); } private void Start() { UniTask.Create( async () => { await _resourceManager.InitLoadModeAsync(this._loadType); // Game.uiManager.CreateUI(UIType.GlobalLogOnlyAppUI, UILayer.High); // Game.uiManager.ShowUI(UIType.GlobalLogOnlyAppUI); Debug.Log("asset init finish!"); this.OnCreateUI(); if (this._gameInitType == GameInitType.None) this._procedureManager.StartProcedure(ProcedureType.LoadingGameSceneProcedure); else EventManager.Instance.FireNow(GameInitFinishEventArgs.EventId, new GameInitFinishEventArgs(_gameInitType)); }).Forget(); } private void OnCreateUI() { Debug.Log("start create ui !"); Game.uiManager.CreateUI(UIType.GameUI, AssetsConst.Assets_Res_Prefab_UI_GameUI_prefab, UILayer.Mid); Game.uiManager.CreateUI(UIType.LoadingUI, AssetsConst.Assets_Res_Prefab_UI_LoadingUI_prefab, UILayer.Mid); Debug.Log("AddAppLogcreate ui finish !"); } private void Update() { time += Time.deltaTime; this._resourceManager.Update(time); this._uiManager.Update(time); this._procedureManager.Update(time); this._mouseInputManager.Update(this.time); } private void OnDestroy() { this._resourceManager.Dispose(); this._uiManager.Dispose(); this._procedureManager.Dispose(); this._mouseInputManager.Dispose(); } } }