EchoTrio
 
Loading...
Searching...
No Matches
FadeEffect.cs
Go to the documentation of this file.
1using UnityEngine;
2using UnityEngine.Events;
3
4namespace EchoTrio.UI {
5 public class FadeEffect : MonoBehaviour {
6 private enum State { Idle, FadeIn, FadeOut, Num }
7
8 [Header("References")]
9 [SerializeField] private Renderer targetRenderer = null;
10
11 [Header("Fade Settings")]
12 [SerializeField, Range(0.1f, 60.0f)] private float fadeDuration = 5.0f;
13
14 // Public Interfaace
15 public UnityAction onFadeStart = null;
16 public UnityAction onFadeEnd = null;
17
18 // Private Variables
19 private Color initialColour = Color.white;
21 private float timer = 0.0f;
22 private bool isFading = false;
23
24 // Public Interfaces
25 public bool IsFading() { return isFading; }
26
27 public float GetFadeDuration() { return fadeDuration; }
28
29 public void FadeIn() { fsm.ChangeState((int)State.FadeIn); }
30
31 public void FadeOut() { fsm.ChangeState((int)State.FadeOut); }
32
33 // Internal Functions
34 private void Awake() {
35 // Get initial colour.
36 if (targetRenderer != null) {
37 initialColour = targetRenderer.material.color;
38 }
39
40 // Initialise FSM.
41 fsm.SetStateEntry((int)State.FadeIn, OnEnterFadeIn);
42 fsm.SetStateUpdate((int)State.FadeIn, OnUpdateFadeIn);
43 fsm.SetStateExit((int)State.FadeIn, OnExitFadeIn);
44
45 fsm.SetStateEntry((int)State.FadeOut, OnEnterFadeOut);
46 fsm.SetStateUpdate((int)State.FadeOut, OnUpdateFadeOut);
47 fsm.SetStateExit((int)State.FadeOut, OnExitFadeOut);
48 }
49
50 private void Start() {
51 // Set default state.
52 fsm.ChangeState((int)State.Idle);
53 }
54
55 private void Update() { fsm.Update(); }
56
57 private void LateUpdate() { fsm.LateUpdate(); }
58
59 // Fade In State
60 private void OnEnterFadeIn() {
61 isFading = true;
62 timer = 0.0f;
63 onFadeStart?.Invoke();
64 }
65
66 private void OnUpdateFadeIn() {
67 // Update timer.
68 timer = Mathf.Min(timer + Time.deltaTime, fadeDuration);
69
70 // Change colour.
71 Material material = targetRenderer.material;
72 Color colour = material.color;
73 colour.a = Mathf.Lerp(0.0f, initialColour.a, timer / fadeDuration);
74 material.color = colour;
75
76 // Return to idle once done.
77 if (timer == fadeDuration) { fsm.ChangeState((int)State.Idle); }
78 }
79
80 private void OnExitFadeIn() {
81 isFading = false;
82 onFadeEnd?.Invoke();
83 }
84
85 // Fade Out State
86 private void OnEnterFadeOut() {
87 isFading = true;
88 timer = 0.0f;
89 onFadeStart?.Invoke();
90 }
91
92 private void OnUpdateFadeOut() {
93 // Update timer.
94 timer = Mathf.Min(timer + Time.deltaTime, fadeDuration);
95
96 // Change colour.
97 Material material = targetRenderer.material;
98 Color colour = material.color;
99 colour.a = Mathf.Lerp(initialColour.a, 0.0f, timer / fadeDuration);
100 material.color = colour;
101
102 // Return to idle once done.
103 if (timer == fadeDuration) { fsm.ChangeState((int)State.Idle); }
104 }
105
106 private void OnExitFadeOut() {
107 isFading = false;
108 onFadeEnd?.Invoke();
109 }
110 }
111}
FSM.FiniteStateMachine fsm
Definition: FadeEffect.cs:20
Renderer targetRenderer
Definition: FadeEffect.cs:9
UnityAction onFadeEnd
Definition: FadeEffect.cs:16
UnityAction onFadeStart
Definition: FadeEffect.cs:15
Finite state machine class to handle state transitions and updates.