CapersProject/Assets/02.Scripts/SceneController.cs

115 lines
3.6 KiB
C#
Raw Normal View History

2024-11-30 11:53:38 +00:00
using System.Threading.Tasks;
using DG.Tweening;
2024-11-30 11:53:38 +00:00
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
namespace BlueWater
{
2024-11-29 08:34:20 +00:00
public static class SceneName
{
public static string CombatTile = "00.CombatTitle";
public static string TycoonTile = "00.TycoonTitle";
public static string Tycoon = "01.Tycoon";
public static string Combat = "02.Combat";
}
public class SceneController : Singleton<SceneController>
{
2024-11-30 11:53:38 +00:00
[field: SerializeField]
public GameObject Panel { get; private set; }
[SerializeField]
private Image _fadeImage;
2024-11-30 11:53:38 +00:00
[SerializeField]
private CanvasGroup _loadingPanelCanvasGroup;
[Title("연출")]
[SerializeField]
private float _fadeInTime = 0.5f;
[SerializeField]
private float _fadeOutTime = 0.5f;
[SerializeField]
private float _loadingWaitTime = 2f;
2024-12-03 09:38:19 +00:00
public bool IsLoading { get; private set; }
private Tween _fadeIn;
private Tween _fadeOut;
2024-11-30 11:53:38 +00:00
private Tween _loadingPanelFadeIn;
private Tween _loadingPanelFadeOut;
protected override void OnAwake()
{
2024-11-30 11:53:38 +00:00
_fadeIn = _fadeImage.DOFade(1f, _fadeInTime).From(0f).SetUpdate(true).SetAutoKill(false).Pause();
_fadeOut = _fadeImage.DOFade(0f, _fadeOutTime).From(1f).SetUpdate(true).SetAutoKill(false).Pause();
_loadingPanelFadeIn = _loadingPanelCanvasGroup.DOFade(1f, _fadeInTime).From(0f).SetUpdate(true).SetAutoKill(false).Pause();
_loadingPanelFadeOut = _loadingPanelCanvasGroup.DOFade(0f, _fadeOutTime).From(1f).SetUpdate(true).SetAutoKill(false).Pause();
_fadeImage.color = new Color(0, 0, 0, 0);
2024-11-30 11:53:38 +00:00
_loadingPanelCanvasGroup.alpha = 0f;
}
private void OnDestroy()
{
if (Quitting) return;
2024-11-30 11:53:38 +00:00
_fadeIn?.Kill();
_fadeOut?.Kill();
_loadingPanelFadeIn?.Kill();
_loadingPanelFadeOut?.Kill();
}
2025-01-02 11:24:45 +00:00
protected override void OnApplicationQuit()
{
base.OnApplicationQuit();
_loadingPanelCanvasGroup.alpha = 0f;
}
2024-11-28 23:07:50 +00:00
public void RestartCurrentScene()
{
2024-11-30 11:53:38 +00:00
LoadScene(SceneManager.GetActiveScene().name);
2024-11-28 23:07:50 +00:00
}
2024-11-30 11:53:38 +00:00
public async void LoadScene(string sceneName)
2024-11-29 08:34:20 +00:00
{
2024-12-03 09:38:19 +00:00
IsLoading = true;
2024-11-30 11:53:38 +00:00
_fadeIn.Restart();
await _fadeIn.AsyncWaitForCompletion();
_loadingPanelFadeIn.Restart();
await _loadingPanelFadeIn.AsyncWaitForCompletion();
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName);
asyncOperation.allowSceneActivation = false;
2024-11-19 06:03:43 +00:00
2024-11-30 11:53:38 +00:00
while (!asyncOperation.isDone)
{
2024-11-30 11:53:38 +00:00
if (asyncOperation.progress >= 0.9f) // 로딩 완료 상태
{
2024-11-30 11:53:38 +00:00
break;
}
2024-11-30 11:53:38 +00:00
await Task.Yield();
}
2024-11-30 11:53:38 +00:00
asyncOperation.allowSceneActivation = true;
await Task.Delay((int)(_loadingWaitTime * 1000));
_loadingPanelFadeOut.Restart();
2024-12-02 11:43:08 +00:00
await _loadingPanelFadeOut.AsyncWaitForCompletion();
_fadeOut.Restart();
await _fadeOut.AsyncWaitForCompletion();
2024-11-30 11:53:38 +00:00
PopupUiController.ClearPopup();
VisualFeedbackManager.Instance.ResetTimeScale();
2024-12-03 09:38:19 +00:00
IsLoading = false;
}
}
}