using System.Collections; using GameAnalyticsSDK; using Panels; using UnityEngine; using UnityEngine.SceneManagement; public class LoadingSystem : MonoBehaviour { [SerializeField] private InternetCheckSystem internetCheckSystem; [SerializeField] private PolicyPanel policyPanel; [SerializeField] private LoadingPanel loadingPanel; private UnityAdController _adSystem; private UnityAdController AdSystem { get { if (_adSystem == null) _adSystem = UnityAdController.Instance; return _adSystem; } } private IAPController _iapSystem; private IAPController IAPSystem { get { if (_iapSystem == null) _iapSystem = IAPController.Instance; return _iapSystem; } } private AnalyticsSystem _analyticsSystem; private AnalyticsSystem AnalyticsSystem { get { if (_analyticsSystem == null) _analyticsSystem = AnalyticsSystem.Instance; return _analyticsSystem; } } private void Start() { internetCheckSystem.OnCheckSuccess += InitializeAdSystem; internetCheckSystem.OnCheckFailed += LoadGameScene; var hasAcceptedPolicy = PlayerPrefs.GetInt("AcceptPolicy", 0); if (hasAcceptedPolicy == 0) { policyPanel.Initialize(InitializeSystems); policyPanel.OpenPanelImmediately(); return; } InitializeSystems(); } private void InitializeSystems() { // TODO: Loading order should be better organized. // TODO: Check for system automatically trying to Initialize Unity Analytics (Unity services) even though Internet is unavailable. loadingPanel.OpenPanelImmediately(); internetCheckSystem.CheckInternet(); } private void InitializeAdSystem() => AdSystem.Initialize(InitializeAnalytics); private void InitializeAnalytics() { loadingPanel.UpdateProgress(.1f); AnalyticsSystem.Initialize(); InitializeIAP(); } private void InitializeIAP() { loadingPanel.UpdateProgress(.2f); IAPSystem.Initialize(LoadGameScene); } private void LoadGameScene() { loadingPanel.UpdateProgress(.4f); StartCoroutine(LoadSceneRoutine()); return; IEnumerator LoadSceneRoutine() { var operation = SceneManager.LoadSceneAsync("Game"); operation.allowSceneActivation = false; while (operation.progress >= .9f) yield return null; loadingPanel.UpdateProgress(1f, () => { AnalyticsSystem.SendProgressionEvent(GAProgressionStatus.Start, "GameStart"); operation.allowSceneActivation = true; }); } } }