121 lines
3.8 KiB
C#
121 lines
3.8 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.UI;
|
|
|
|
public class UI_FADE : MonoBehaviour
|
|
{
|
|
public Image FadeImage;
|
|
|
|
private static UI_FADE instance;
|
|
|
|
private Coroutine currentFadeCoroutine;
|
|
|
|
public bool isFading;
|
|
|
|
public static bool DarkworldMenu_PreviousState;
|
|
|
|
public static bool LightworldMenu_PreviousState;
|
|
|
|
public static UI_FADE Instance => instance;
|
|
|
|
private void Awake()
|
|
{
|
|
if (instance != null && instance != this)
|
|
{
|
|
Object.Destroy(base.gameObject);
|
|
}
|
|
else
|
|
{
|
|
instance = this;
|
|
}
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
FadeImage.color = new Color(0f, 0f, 0f, 1f);
|
|
SceneManager.sceneLoaded += OnSceneLoaded;
|
|
}
|
|
|
|
public void StartFadeIn(int GoToScene, float SpeedMultiplier, bool UnpauseOnEnd = false, NewMainMenuManager.MainMenuStates targetmenuState = NewMainMenuManager.MainMenuStates.None)
|
|
{
|
|
if (isFading)
|
|
{
|
|
StopCoroutine(currentFadeCoroutine);
|
|
}
|
|
DarkworldMenu_PreviousState = DarkworldMenu.Instance.CanOpenMenu;
|
|
LightworldMenu_PreviousState = LightworldMenu.Instance.CanOpenMenu;
|
|
DarkworldMenu.Instance.CanOpenMenu = false;
|
|
LightworldMenu.Instance.CanOpenMenu = false;
|
|
StopCoroutine(DelayRevertCMenus());
|
|
currentFadeCoroutine = StartCoroutine(FadeIn(GoToScene, SpeedMultiplier, targetmenuState, UnpauseOnEnd));
|
|
}
|
|
|
|
public void StartFadeOut(float SpeedMultiplier = 1f)
|
|
{
|
|
if (isFading)
|
|
{
|
|
StopCoroutine(currentFadeCoroutine);
|
|
}
|
|
currentFadeCoroutine = StartCoroutine(FadeOut(SpeedMultiplier));
|
|
}
|
|
|
|
private IEnumerator FadeIn(int GoToScene, float SpeedMultiplier, NewMainMenuManager.MainMenuStates targetmenuState, bool UnpauseOnEnd = false)
|
|
{
|
|
isFading = true;
|
|
ChatboxManager.Instance.EndText();
|
|
PlayerManager.Instance._PlayerState = PlayerManager.PlayerState.Cutscene;
|
|
while (FadeImage.color.a < 1f)
|
|
{
|
|
FadeImage.color = new Color(0f, 0f, 0f, FadeImage.color.a + 0.15f * SpeedMultiplier);
|
|
yield return new WaitForSecondsRealtime(0.01f);
|
|
}
|
|
yield return new WaitForSecondsRealtime(0.1f);
|
|
if (GoToScene > 0)
|
|
{
|
|
SceneManager.LoadScene(GoToScene);
|
|
}
|
|
ChatboxManager.Instance.EndText();
|
|
if (UnpauseOnEnd)
|
|
{
|
|
GonerMenu.Instance.UnpauseGame();
|
|
GonerMenu.Instance.ResetPlayer();
|
|
}
|
|
isFading = false;
|
|
if (targetmenuState != 0)
|
|
{
|
|
yield return null;
|
|
while (NewMainMenuManager.instance == null)
|
|
{
|
|
yield return null;
|
|
}
|
|
NewMainMenuManager.instance.SetMainMenuState(targetmenuState);
|
|
}
|
|
}
|
|
|
|
private IEnumerator FadeOut(float SpeedMultiplier = 1f)
|
|
{
|
|
isFading = true;
|
|
FadeImage.color = new Color(0f, 0f, 0f, 1f);
|
|
while (FadeImage.color.a > 0f)
|
|
{
|
|
FadeImage.color = new Color(0f, 0f, 0f, FadeImage.color.a - 0.15f * SpeedMultiplier);
|
|
yield return new WaitForSecondsRealtime(0.01f);
|
|
}
|
|
isFading = false;
|
|
}
|
|
|
|
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
|
|
{
|
|
Debug.Log("Reverting CMenus to original states");
|
|
StartCoroutine(DelayRevertCMenus());
|
|
}
|
|
|
|
private IEnumerator DelayRevertCMenus()
|
|
{
|
|
yield return new WaitForSeconds(0.25f);
|
|
DarkworldMenu.Instance.CanOpenMenu = DarkworldMenu_PreviousState;
|
|
LightworldMenu.Instance.CanOpenMenu = LightworldMenu_PreviousState;
|
|
}
|
|
}
|