using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace ZXKFramework { public class Game : MonoSingleton { [Header("======Asset")] public ResLoadType resLoadType = ResLoadType.Resources; [HideInInspector] public IRes res = null; //[Header("======Save")] //public string saveDirPath = string.Empty; //public SaveManagerType saveManagerType = SaveManagerType.PlayerPrefs; //[HideInInspector] //public ISave save = null; [Header("======Sound")] //public string soundDirPath = string.Empty; //public ResLoadType soundResLoadType = ResLoadType.Resources; public SoundType soundType = SoundType.Base; [HideInInspector] public bool sceneObjFindAudioClip = false; [HideInInspector] public ISound sound = null; [Header("======Pool")] //public string poolDirPath = string.Empty; //public ResLoadType poolResLoadType = ResLoadType.Resources; public ObjectPoolType objectPoolType = ObjectPoolType.Base; [HideInInspector] public IObjectPool objectPool = null; [Header("======FSM")] public FSMType fSMType = FSMType.Base; [HideInInspector] public IFSM fsm = null; [Header("======Event")] public EventMangerType eventManagerType = EventMangerType.Base; [HideInInspector] public IEventManager eventManager = null; [Header("======IEnumerator")] public IEnumeratorManagerType iEnumeratorManagerType = IEnumeratorManagerType.Base; [HideInInspector] public IIECoroutine IEnumeratorManager = null; //[Header("======HTTP")] //public HttpManagerType httpManagerType = HttpManagerType.Base; //[HideInInspector] //public IHttp httpManager = null; //[Header("======UI")] //public string uiDirPath = string.Empty; //private GameObject canvas = null; //public ResLoadType uiResLoadType = ResLoadType.Resources; //private UIManagerType uiManagerType = UIManagerType.Base; [HideInInspector] public bool canvasTransformFindUI = true; [HideInInspector] public IUIManager uiManager = null; //[Header("======Tip")] //public TipManagerType tipManagerType = TipManagerType.None; //[HideInInspector] //public ITipManager tipManager = null; //[Header("======Animator")] //public GameObject animatorParent = null; //public AnimatorManagerType animatorManagerType = AnimatorManagerType.Animator; //[HideInInspector] //public IAnimatorManager animatorManager = null; [Header("======Language")] public LanguageType languageType = LanguageType.Chinese; [Header("======Adapter")] public PlatformType platformType = PlatformType.PC; public OperatingType operatingType = OperatingType.Touch; [HideInInspector] public IAdapter adapterManager = null; [Header("======Scene")] public SceneManagerType sceneManagerType = SceneManagerType.Base; [HideInInspector] public IScene sceneManager = null; public string directLoadNextScene; protected override void Awake() { base.Awake(); DontDestroyOnLoad(gameObject); FSMInit(); EventManagerInit(); ResInit(); //SaveInit(); //AnimatorManagerInit(); //HttpManagerInit(); IEManagerInit(); SceneMangerInit(); SoundInit(); ObjectPoolInit(); UIManagerInit(); if (!string.IsNullOrEmpty(directLoadNextScene)) sceneManager?.LoadLevel(directLoadNextScene); } private void ResInit() { res = GetRes(resLoadType); } public IRes GetRes(ResLoadType moduleResLoadType) { switch (moduleResLoadType) { case ResLoadType.Resources: return new ResResources(); //case ResLoadType.Assetbundle: // return new ResAssetBundle(); case ResLoadType.StreamingAssets: return new ResStreamingAssets(); //case ResLoadType.Url: // return new ResUrl(); } return null; } //private void AnimatorManagerInit() //{ // switch (animatorManagerType) // { // case AnimatorManagerType.Animator: // { // animatorManager = new AnimatorManager(); // } // break; // case AnimatorManagerType.Animation: // { // animatorManager = new AnimationManager(); // } // break; // } // if (animatorParent != null) // { // animatorManager?.Init(animatorParent); // } //} private void SoundInit() { switch (soundType) { case SoundType.Base: { GameObject soundManager = new GameObject("SoundManager"); soundManager.transform.SetParent(transform); sound = soundManager.AddComponent(); sound.SetResType(res); //sound.Init(soundDirPath); sound.Init(null); } break; } } //private void SaveInit() //{ // switch (saveManagerType) // { // case SaveManagerType.PlayerPrefs: // { // save = new SavePlayerPrefs(); // } // break; // case SaveManagerType.Text: // { // save = new SaveText(); // } // break; // } // save?.Init(saveDirPath); //} private void SceneMangerInit() { switch (sceneManagerType) { case SceneManagerType.Base: { sceneManager = new SceneManager(); } break; case SceneManagerType.AssetsBundle: { sceneManager = new SceneABManager(); } break; } } private void ObjectPoolInit() { switch (objectPoolType) { case ObjectPoolType.Base: GameObject poolManager = new GameObject("ObjectPoolManager"); poolManager.transform.SetParent(transform); objectPool = poolManager.AddComponent(); //objectPool.SetResType(GetRes(poolResLoadType)); //objectPool.Init(poolDirPath); objectPool.Init(null); break; } } private void FSMInit() { switch (fSMType) { case FSMType.Base: fsm = new FSM(); break; } } //private void HttpManagerInit() //{ // switch (httpManagerType) // { // case HttpManagerType.Base: // httpManager = new Http(); // break; // } //} private void IEManagerInit() { switch (iEnumeratorManagerType) { case IEnumeratorManagerType.Base: IEnumeratorManager = new IECoroutine(); break; } } private void EventManagerInit() { switch (eventManagerType) { case EventMangerType.Base: eventManager = new EventManager(); break; } } private void UIManagerInit() { uiManager = new UIManager(); switch (operatingType) { case OperatingType.FirstPerson: case OperatingType.Hardware: case OperatingType.Touch: Transform tf = transform.Find("Canvas_TouchHardware"); if (tf) { tf.gameObject.SetActive(true); uiManager.Init(tf.gameObject, null); } break; case OperatingType.VR: Transform tf2 = transform.Find("Canvas_VRFP"); if (tf2) { tf2.gameObject.SetActive(true); uiManager.Init(tf2.gameObject, null); } break; } } public void AdapterInit() { switch (operatingType) { case OperatingType.FirstPerson: adapterManager = new AdapterFirstPerson(); break; case OperatingType.VR: adapterManager = new AdapterVR(); break; case OperatingType.Touch: adapterManager = new AdapterTouch(); break; case OperatingType.Hardware: adapterManager = new AdapterHardware(); break; } adapterManager?.Init(); } void Update() { fsm?.Update(); uiManager?.OnUpdate(); } void OnDestroy() { fsm?.Destroy(); uiManager?.Destroy(); } public void SendEvent(string eventName, object data = null) { MVC.SendEvent(eventName, data); } public void RegisterController(string eventName, Type controllerType) { MVC.RegisterController(eventName, controllerType); } } }