RandomGFGoStop/Assets/Scripts/SingletonManagers/Managers/GameManager.cs

182 lines
6.2 KiB
C#

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<GameManager>();
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<GameObject>("Prefabs/TouchParticle"), this.transform).GetComponent<ParticleSystem>();
}
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<GameObject>("Prefabs/TouchParticle"), this.transform).GetComponent<ParticleSystem>();
}
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<NetworkManager>();
_network.transform.SetParent(this.transform);
_bgdatabase = new GameObject("_BGDatabase").AddComponent<BGDataBaseManager>();
_bgdatabase.transform.SetParent(this.transform);
yield return _bgdatabase.InitDataBase();
_addressable = new GameObject("_Addressable").AddComponent<AddressableManager>();
_addressable.transform.SetParent(this.transform);
_account = new GameObject("_Account").AddComponent<AccountManager>();
_account.transform.SetParent(this.transform);
_ads = new GameObject("_ADS").AddComponent<ADSManager>();
_ads.transform.SetParent(this.transform);
_database = new GameObject("_DBManager").AddComponent<DBManager>();
_database.transform.SetParent(this.transform);
//_flamingo = new GameObject("_Flamingo").AddComponent<FlamingoManager>();
//_flamingo.transform.SetParent(this.transform);
while (_database.CompleteDataLoad == false)
yield return null;
_iap = new GameObject("_IAP").AddComponent<IAPManager>();
_iap.transform.SetParent(this.transform);
_resource = new GameObject("_ResourceManager").AddComponent<ResourceManager>();
_resource.transform.SetParent(this.transform);
_ui = new GameObject("_UIManager").AddComponent<UIManager>();
_ui.transform.SetParent(this.transform);
_scene = new GameObject("_SceneManager").AddComponent<SceneTransitionManager>();
_scene.transform.SetParent(this.transform);
_sound = new GameObject("_SoundManager").AddComponent<SoundManager>();
_sound.transform.SetParent(this.transform);
_event = new GameObject("_EvenetManager").AddComponent<EventManager>();
_event.transform.SetParent(this.transform);
_time = new GameObject("_Time").AddComponent<TimeManager>();
_time.transform.SetParent(this.transform);
_timer = new GameObject("_Timer").AddComponent<TimerManager>();
_timer.transform.SetParent(this.transform);
yield return new WaitUntil(() => _database.CompleteDataLoad);
OnCompleteCreatemanager?.Invoke();
}
}