Added basic scene transition
This commit is contained in:
@@ -1,16 +1,15 @@
|
|||||||
using PashaBibko.Pacore.Attributes;
|
using PashaBibko.Pacore.Attributes;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Diagnostics;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
using Debug = UnityEngine.Debug;
|
using Debug = UnityEngine.Debug;
|
||||||
|
|
||||||
namespace Fruitomation.Game
|
namespace Fruitomation.Game
|
||||||
{
|
{
|
||||||
[CreateInstanceOnStart] public class SceneController : MonoBehaviour
|
[CreateInstanceOnStart] public class SceneController : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
private SceneControllerTransition Transition;
|
||||||
private static SceneController Instance;
|
private static SceneController Instance;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
@@ -22,29 +21,59 @@ namespace Fruitomation.Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
Instance = this;
|
Instance = this;
|
||||||
|
|
||||||
|
Canvas canvas = gameObject.AddComponent<Canvas>();
|
||||||
|
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
||||||
|
|
||||||
|
GameObject overlayGo = new("Overlay");
|
||||||
|
overlayGo.transform.SetParent(canvas.transform);
|
||||||
|
|
||||||
|
Transition = overlayGo.AddComponent<SceneControllerTransition>();
|
||||||
|
Transition.OnCreation(canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerator StartLoadInternal(string scene)
|
private IEnumerator StartLoadInternal(string scene)
|
||||||
{
|
{
|
||||||
Stopwatch sw = Stopwatch.StartNew();
|
|
||||||
AsyncOperation operation = SceneManager.LoadSceneAsync(scene);
|
AsyncOperation operation = SceneManager.LoadSceneAsync(scene);
|
||||||
if (operation == null)
|
if (operation == null)
|
||||||
{
|
{
|
||||||
string error = $"Unknown scene [{scene}]";
|
string error = $"Unknown scene [{scene}]";
|
||||||
throw new ArgumentException(error);
|
throw new ArgumentException(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
operation.allowSceneActivation = false;
|
operation.allowSceneActivation = false;
|
||||||
operation.completed += _ =>
|
operation.completed += _ => StartCoroutine(EndLoadInternal());
|
||||||
{
|
|
||||||
sw.Stop();
|
Transition.GoingUp = false;
|
||||||
Debug.Log($"Scene finished loading [Took {sw.ElapsedMilliseconds}ms]");
|
Time.timeScale = 0;
|
||||||
};
|
float lerp = 0f;
|
||||||
|
|
||||||
|
while (lerp < 1f)
|
||||||
|
{
|
||||||
|
lerp += Time.unscaledDeltaTime;
|
||||||
|
Transition.LerpValue = Mathf.Clamp01(lerp);
|
||||||
|
|
||||||
|
yield return null; // Waits for next frame
|
||||||
|
}
|
||||||
|
|
||||||
yield return new WaitForSeconds(5f);
|
|
||||||
operation.allowSceneActivation = true;
|
operation.allowSceneActivation = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IEnumerator EndLoadInternal()
|
||||||
|
{
|
||||||
|
float lerp = 0f;
|
||||||
|
|
||||||
|
while (lerp < 1f)
|
||||||
|
{
|
||||||
|
lerp += Time.unscaledDeltaTime;
|
||||||
|
Transition.LerpValue = Mathf.Clamp01(lerp);
|
||||||
|
|
||||||
|
yield return null; // Waits for next frame
|
||||||
|
}
|
||||||
|
|
||||||
|
Time.timeScale = 1f;
|
||||||
|
}
|
||||||
|
|
||||||
public static void StartLoadOf(string scene) => Instance.StartCoroutine(Instance.StartLoadInternal(scene));
|
public static void StartLoadOf(string scene) => Instance.StartCoroutine(Instance.StartLoadInternal(scene));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
37
Assets/Scripts/Game/SceneControllerTransition.cs
Normal file
37
Assets/Scripts/Game/SceneControllerTransition.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using UnityEngine.UI;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Fruitomation.Game
|
||||||
|
{
|
||||||
|
public class SceneControllerTransition : MonoBehaviour
|
||||||
|
{
|
||||||
|
private RectTransform CanvasRect;
|
||||||
|
private Canvas AttachedCanvas;
|
||||||
|
private RectTransform Rect;
|
||||||
|
|
||||||
|
public float LerpValue;
|
||||||
|
public bool GoingUp;
|
||||||
|
|
||||||
|
public void OnCreation(Canvas canvas)
|
||||||
|
{
|
||||||
|
Image img = gameObject.AddComponent<Image>();
|
||||||
|
img.color = Color.black;
|
||||||
|
|
||||||
|
CanvasRect = canvas.GetComponent<RectTransform>();
|
||||||
|
Rect = transform.GetComponent<RectTransform>();
|
||||||
|
AttachedCanvas = canvas;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
Rect.anchoredPosition = GoingUp
|
||||||
|
? new Vector2(0, +(CanvasRect.sizeDelta.y / 2f))
|
||||||
|
: new Vector2(0, -(CanvasRect.sizeDelta.y / 2f));
|
||||||
|
Rect.sizeDelta = new Vector2
|
||||||
|
(
|
||||||
|
CanvasRect.sizeDelta.x,
|
||||||
|
CanvasRect.sizeDelta.y * LerpValue * 2f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3
Assets/Scripts/Game/SceneControllerTransition.cs.meta
Normal file
3
Assets/Scripts/Game/SceneControllerTransition.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 765ed0d0c98a495e84e05ef05468bbfc
|
||||||
|
timeCreated: 1776107627
|
||||||
Reference in New Issue
Block a user