96 lines
No EOL
2.4 KiB
C#
Executable file
96 lines
No EOL
2.4 KiB
C#
Executable file
using UnityEngine;
|
|
using Unity.Cinemachine;
|
|
using System.Collections;
|
|
|
|
public class MANAGER_DATA_RoomTransition : MonoBehaviour
|
|
{
|
|
public static MANAGER_DATA_RoomTransition Instance;
|
|
|
|
[Header("Настройки камеры")]
|
|
public CinemachineCamera virtualCamera;
|
|
|
|
|
|
private CinemachineConfiner2D _confiner;
|
|
|
|
[Header("Настройки перехода")]
|
|
public CanvasGroup fadeOverlay;
|
|
public float fadeDuration = 0.5f;
|
|
|
|
private void Awake()
|
|
{
|
|
if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); }
|
|
else { Destroy(gameObject); }
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
|
|
if (virtualCamera != null)
|
|
{
|
|
_confiner = virtualCamera.GetComponent<CinemachineConfiner2D>();
|
|
|
|
if (_confiner == null)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Travel(GameObject player, Vector3 destination, Collider2D newBounds)
|
|
{
|
|
StartCoroutine(TransitionRoutine(player, destination, newBounds));
|
|
}
|
|
|
|
private IEnumerator TransitionRoutine(GameObject player, Vector3 destination, Collider2D newBounds)
|
|
{
|
|
yield return StartCoroutine(Fade(1));
|
|
|
|
Vector3 oldPosition = player.transform.position;
|
|
Vector3 warpDelta = destination - oldPosition;
|
|
|
|
virtualCamera.enabled = false;
|
|
|
|
player.transform.position = destination;
|
|
|
|
|
|
UpdateCameraBounds(newBounds);
|
|
|
|
virtualCamera.OnTargetObjectWarped(player.transform, warpDelta);
|
|
virtualCamera.transform.position = destination;
|
|
|
|
virtualCamera.enabled = true;
|
|
|
|
yield return new WaitForEndOfFrame();
|
|
yield return new WaitForFixedUpdate();
|
|
|
|
yield return StartCoroutine(Fade(0));
|
|
}
|
|
|
|
private IEnumerator Fade(float targetAlpha)
|
|
{
|
|
if (fadeOverlay == null) yield break;
|
|
|
|
float startAlpha = fadeOverlay.alpha;
|
|
float time = 0;
|
|
|
|
while (time < fadeDuration)
|
|
{
|
|
time += Time.deltaTime;
|
|
fadeOverlay.alpha = Mathf.Lerp(startAlpha, targetAlpha, time / fadeDuration);
|
|
yield return null;
|
|
}
|
|
|
|
fadeOverlay.alpha = targetAlpha;
|
|
}
|
|
|
|
public void UpdateCameraBounds(Collider2D newBounds)
|
|
{
|
|
|
|
if (_confiner != null)
|
|
{
|
|
_confiner.BoundingShape2D = newBounds;
|
|
|
|
|
|
_confiner.InvalidateCache();
|
|
}
|
|
}
|
|
} |