First commit on my server, yey!

This commit is contained in:
Sebastian Bularca
2026-03-19 18:12:07 +01:00
parent 5139ec2cec
commit fedd1961a0
602 changed files with 101587 additions and 6 deletions

View File

@@ -0,0 +1,110 @@
using System;
using Nox.Core;
using UnityEngine;
using UnityEngine.UI;
namespace Nox.Game.UI {
public class ScreenFadeTransition : MonoBehaviour, ISceneTransition {
private enum FadeState {
Idle,
FadingOut,
FadingIn
}
private const float DefaultFadeDuration = 0.3f;
private const int CanvasSortOrder = 999;
private CanvasGroup canvasGroup;
private FadeState fadeState = FadeState.Idle;
private float fadeTimer;
private float fadeDuration = DefaultFadeDuration;
private Action onFadeComplete;
public bool IsTransitioning => fadeState != FadeState.Idle;
public void Awake() {
DontDestroyOnLoad(gameObject);
CreateFadeCanvas();
canvasGroup.alpha = 0f;
canvasGroup.blocksRaycasts = false;
}
public void FadeOut(Action onComplete = null) {
if(fadeState == FadeState.FadingOut) {
return;
}
onFadeComplete = onComplete;
fadeState = FadeState.FadingOut;
fadeTimer = 0f;
canvasGroup.blocksRaycasts = true;
}
public void FadeIn(Action onComplete = null) {
if(fadeState == FadeState.FadingIn) {
return;
}
onFadeComplete = onComplete;
fadeState = FadeState.FadingIn;
fadeTimer = 0f;
}
public void Update() {
if(fadeState == FadeState.Idle) {
return;
}
fadeTimer += Time.unscaledDeltaTime;
float t = Mathf.Clamp01(fadeTimer / fadeDuration);
switch(fadeState) {
case FadeState.FadingOut:
canvasGroup.alpha = t;
if(t >= 1f) {
CompleteFade();
}
break;
case FadeState.FadingIn:
canvasGroup.alpha = 1f - t;
if(t >= 1f) {
canvasGroup.blocksRaycasts = false;
CompleteFade();
}
break;
}
}
private void CompleteFade() {
fadeState = FadeState.Idle;
fadeTimer = 0f;
var callback = onFadeComplete;
onFadeComplete = null;
callback?.Invoke();
}
private void CreateFadeCanvas() {
var canvasObject = new GameObject("FadeCanvas");
canvasObject.transform.SetParent(transform);
var canvas = canvasObject.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvas.sortingOrder = CanvasSortOrder;
canvasObject.AddComponent<CanvasScaler>();
canvasGroup = canvasObject.AddComponent<CanvasGroup>();
var imageObject = new GameObject("FadeImage");
imageObject.transform.SetParent(canvasObject.transform, false);
var image = imageObject.AddComponent<Image>();
image.color = Color.black;
image.raycastTarget = true;
var rectTransform = image.rectTransform;
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.one;
rectTransform.offsetMin = Vector2.zero;
rectTransform.offsetMax = Vector2.zero;
}
}
}