60 lines
1.2 KiB
GDScript
60 lines
1.2 KiB
GDScript
extends ColorRect
|
|
|
|
signal fade_complete
|
|
|
|
export var fade_on_start : bool = false
|
|
export var start_with_fade_in : bool = true
|
|
export var fade_time : float = 1
|
|
|
|
func _ready():
|
|
|
|
if fade_on_start:
|
|
# Fade on start, if enabled
|
|
fade(fade_time, start_with_fade_in)
|
|
else:
|
|
# Retain visibility
|
|
if self.visible:
|
|
modulate.a = 1
|
|
else:
|
|
modulate.a = 0
|
|
|
|
self.show()
|
|
|
|
var timePassed = 0 #Current amount of time spend displaying te
|
|
const CHECK_LENGTH = 0.05 #Interval to check for updates
|
|
var timeNeeded = 0 #Time it takes to fade out
|
|
var fadeTimer #Timer object
|
|
|
|
var fading_in = false
|
|
|
|
func fade(seconds, fade_in = false):
|
|
fading_in = fade_in
|
|
|
|
# Set timer values
|
|
timeNeeded = seconds
|
|
timePassed = 0
|
|
|
|
# Create timer if needed
|
|
if(!fadeTimer):
|
|
fadeTimer = Timer.new()
|
|
add_child(fadeTimer)
|
|
fadeTimer.connect("timeout", self, "on_fade_timeout")
|
|
|
|
# Start fader with tick speed of `CHECK_LENGTH`
|
|
fadeTimer.start(CHECK_LENGTH)
|
|
|
|
func on_fade_timeout():
|
|
timePassed += CHECK_LENGTH
|
|
|
|
# Set modulate
|
|
if fading_in:
|
|
modulate.a = 1 - abs(timePassed/timeNeeded)
|
|
else:
|
|
modulate.a = abs(timePassed/timeNeeded)
|
|
|
|
if(timePassed >= timeNeeded):
|
|
fadeTimer.stop()
|
|
emit_signal("fade_complete")
|
|
else:
|
|
fadeTimer.start(CHECK_LENGTH)
|