79 lines
1.5 KiB
GDScript
79 lines
1.5 KiB
GDScript
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 |