using System.Collections; using UnityEngine; using UnityEngine.Events; public class GameManager : MonoBehaviour { #region Statics private static GameManager sInstance = null; public static GameManager Instance { get { if (IsApplicationQuitting) return null; else if (object.ReferenceEquals(sInstance, null)) { sInstance = new GameObject("_GameManager").AddComponent(); DontDestroyOnLoad(sInstance.gameObject); } return sInstance; } } public static bool IsApplicationQuitting = false; #endregion #region Managers private ResourceManager _resource = null; private DBManager _database = null; private UIManager _ui = null; private SceneTransitionManager _scene = null; private SoundManager _sound = null; private EventManager _event = null; private TimeManager _time = null; private BGDataBaseManager _bgdatabase = null; private NetworkManager _network = null; private AddressableManager _addressable = null; private AccountManager _account = null; private TimerManager _timer = null; private ADSManager _ads = null; private IAPManager _iap = null; //private FlamingoManager _flamingo = null; //============================================================ public static ResourceManager Resource { get => Instance._resource; } public static DBManager DB { get => Instance._database; } public static UIManager UI { get => Instance._ui; } public static SceneTransitionManager Scene { get => Instance._scene; } public static SoundManager Sound { get => Instance._sound; } public static EventManager Event { get => Instance._event; } public static TimeManager Time { get => Instance._time; } public static BGDataBaseManager BGDatabase { get => Instance._bgdatabase; } public static NetworkManager Network { get => Instance._network; } public static AddressableManager Addressable { get => Instance._addressable; } public static AccountManager Account { get => Instance._account; } public static TimerManager Timer { get => Instance._timer; } public static ADSManager ADS { get => Instance._ads; } public static IAPManager IAP { get => Instance._iap; } //public static FlamingoManager Flamingo { get => Instance._flamingo; } #endregion private ParticleSystem _touchParticle; public static UnityAction OnCompleteCreatemanager; private void Awake() { this.CreateManagers(); Application.targetFrameRate = 60; Input.multiTouchEnabled = false; } private void Update() { #if UNITY_EDITOR if (Input.GetMouseButtonDown(0)) { if (_touchParticle == null) { _touchParticle = Instantiate(Resources.Load("Prefabs/TouchParticle"), this.transform).GetComponent(); } Vector3 pos; pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); pos.z = 0f; _touchParticle.transform.position = pos; _touchParticle.Play(); } #endif #if !UNITY_EDITOR && UNITY_ANDROID if (Input.touchCount > 0) { var touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began) { if (_touchParticle == null) { _touchParticle = Instantiate(Resources.Load("Prefabs/TouchParticle"), this.transform).GetComponent(); } Vector3 pos; pos = Camera.main.ScreenToWorldPoint(touch.position); pos.z = 0f; _touchParticle.transform.position = pos; _touchParticle.Play(); } } #endif } private void OnDestroy() { IsApplicationQuitting = true; } private void CreateManagers() { StartCoroutine(coroCreatemanagers()); } private IEnumerator coroCreatemanagers() { _network = new GameObject("_Network").AddComponent(); _network.transform.SetParent(this.transform); _bgdatabase = new GameObject("_BGDatabase").AddComponent(); _bgdatabase.transform.SetParent(this.transform); yield return _bgdatabase.InitDataBase(); _addressable = new GameObject("_Addressable").AddComponent(); _addressable.transform.SetParent(this.transform); _account = new GameObject("_Account").AddComponent(); _account.transform.SetParent(this.transform); _ads = new GameObject("_ADS").AddComponent(); _ads.transform.SetParent(this.transform); _database = new GameObject("_DBManager").AddComponent(); _database.transform.SetParent(this.transform); //_flamingo = new GameObject("_Flamingo").AddComponent(); //_flamingo.transform.SetParent(this.transform); while (_database.CompleteDataLoad == false) yield return null; _iap = new GameObject("_IAP").AddComponent(); _iap.transform.SetParent(this.transform); _resource = new GameObject("_ResourceManager").AddComponent(); _resource.transform.SetParent(this.transform); _ui = new GameObject("_UIManager").AddComponent(); _ui.transform.SetParent(this.transform); _scene = new GameObject("_SceneManager").AddComponent(); _scene.transform.SetParent(this.transform); _sound = new GameObject("_SoundManager").AddComponent(); _sound.transform.SetParent(this.transform); _event = new GameObject("_EvenetManager").AddComponent(); _event.transform.SetParent(this.transform); _time = new GameObject("_Time").AddComponent(); _time.transform.SetParent(this.transform); _timer = new GameObject("_Timer").AddComponent(); _timer.transform.SetParent(this.transform); yield return new WaitUntil(() => _database.CompleteDataLoad); OnCompleteCreatemanager?.Invoke(); } }