Transition
This commit is contained in:
79
scripts/singletons/Transition.gd
Normal file
79
scripts/singletons/Transition.gd
Normal file
@@ -0,0 +1,79 @@
|
||||
class_name TransitionSingleton extends Control
|
||||
|
||||
enum FadeType {
|
||||
NONE,
|
||||
FADE_IN,
|
||||
FADE_OUT
|
||||
}
|
||||
|
||||
signal fadeOutStart
|
||||
signal fadeOutEnd
|
||||
signal fadeInStart
|
||||
signal fadeInEnd
|
||||
signal fadeUpdate(t:float)
|
||||
|
||||
var fadeType:FadeType = FadeType.NONE
|
||||
var fadeDuration:float = 0.4
|
||||
var fadeTime:float = 0.0
|
||||
|
||||
func _enter_tree() -> void:
|
||||
$Overlay.visible = false
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if fadeType == FadeType.NONE:
|
||||
return
|
||||
|
||||
fadeTime += delta
|
||||
var t:float = fadeTime / fadeDuration
|
||||
|
||||
# Get destination alpha type.
|
||||
var destAlpha:float = 0.0
|
||||
var srcAlpha:float
|
||||
if fadeType == FadeType.FADE_IN:
|
||||
srcAlpha = 1.0
|
||||
destAlpha = 0.0
|
||||
elif fadeType == FadeType.FADE_OUT:
|
||||
srcAlpha = 0.0
|
||||
destAlpha = 1.0
|
||||
|
||||
# End?
|
||||
if t >= 1.0:
|
||||
fadeUpdate.emit(1.0)
|
||||
var cFade = fadeType
|
||||
print("Transition: Fade complete")
|
||||
fadeType = FadeType.NONE
|
||||
|
||||
if cFade == FadeType.FADE_OUT:
|
||||
$Overlay.visible = true
|
||||
fadeOutEnd.emit()
|
||||
elif cFade == FadeType.FADE_IN:
|
||||
$Overlay.visible = false
|
||||
fadeInEnd.emit()
|
||||
|
||||
$Overlay.color.a = destAlpha
|
||||
return
|
||||
|
||||
# TODO: Use curves
|
||||
$Overlay.color.a = srcAlpha + (destAlpha - srcAlpha) * t
|
||||
fadeUpdate.emit(t)
|
||||
pass
|
||||
|
||||
func fade(
|
||||
fade:FadeType = FadeType.FADE_IN,
|
||||
duration:float = 0.4,
|
||||
color:Color = Color(0, 0, 0, 1),
|
||||
):
|
||||
$Overlay.visible = false
|
||||
$Overlay.color = color
|
||||
fadeDuration = duration
|
||||
fadeTime = 0
|
||||
fadeType = fade
|
||||
|
||||
if fade == FadeType.FADE_IN:
|
||||
fadeInStart.emit()
|
||||
$Overlay.color.a = 0
|
||||
elif fade == FadeType.FADE_OUT:
|
||||
fadeOutStart.emit()
|
||||
$Overlay.color.a = 1
|
||||
|
||||
$Overlay.visible = true
|
Reference in New Issue
Block a user