ZK_Framework/Assets/Scripts/Game/Game.cs

108 lines
3.9 KiB
C#

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();
}
}
}