using System; using System.Collections; using Cysharp.Threading.Tasks; using D2D.Utilities; using D2D.Core; using D2D.Gameplay; using D2D.Utils; using DG.Tweening; using UnityEngine; using UnityEngine.SceneManagement; using static D2D.Utilities.SettingsFacade; using static D2D.Utilities.CommonLazyFacade; using static D2D.Utilities.CommonGameplayFacade; namespace D2D.Core { /// /// Responsible for scene loading, takes data from ScenesSettings. /// public class SceneLoader : MonoBehaviour, ILazy { // The nam of current scene. public static string CurrentSceneName => SceneManager.GetActiveScene().name; /// /// Count of levels in game. /// public static int CountOfLevelsInGame => SceneManager.sceneCountInBuildSettings - 1; // Use for it gsm.On(); // public event Action SceneReloading; private bool _isSceneLoading; public void ReloadCurrentScene() { LoadScene(CurrentSceneName); } public async void LoadLevel(int levelNumber) { if (levelNumber < 1) { Debug.LogError("You tried to load level with number less than 1! I wll load level 1"); levelNumber = 1; } if (levelNumber > CountOfLevelsInGame) { Debug.LogError("You tried to load level more than count of levels in game! I will load 1 level"); levelNumber = 1; } // LoadScene(_coreData.levelScenePrefix + levelNumber); } private async void LoadScene(string sceneName) { if (_isSceneLoading) return; _isSceneLoading = true; if (_level == null) { SceneManager.LoadScene(sceneName); return; } _stateMachine.Push(new SceneLoading()); if (_coreData.nextLevelLoadDelay > 0) await _coreData.nextLevelLoadDelay.Seconds(); if (_coreData.clearTweensOnSceneExit) DOTween.Clear(true); SceneManager.LoadScene(sceneName); } /*private async void StartSceneLoading(string loadingSceneName) { if (FindObjectOfType() == null) { SceneManager.LoadScene(loadingSceneName); yield break; } _stateMachine.Push(new SceneLoading()); if (_coreData.veryFirstNextLevelLoadDelay > 0) yield return new WaitForSeconds(_coreData.veryFirstNextLevelLoadDelay); if (_coreData.levelTransitionDuration > 0) yield return new WaitForSeconds(_coreData.levelTransitionDuration); if (_coreData.clearTweensOnSceneExit) DOTween.Clear(true); SceneManager.LoadScene(loadingSceneName); }*/ } }