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);
}*/
}
}