netfishing/ui/screen_fade.gd

66 lines
1.4 KiB
GDScript3
Raw Permalink Normal View History

class_name ScreenFade
extends ColorRect
signal transition_completed(generation: int, faded_to_black: bool)
@export_range(0.01, 3.0, 0.01) var fade_out_duration: float = 0.4
@export_range(0.01, 3.0, 0.01) var fade_in_duration: float = 0.45
var _fade_tween: Tween
func _ready() -> void:
modulate.a = 0.0
visible = false
func fade_to_black(generation: int) -> void:
_start_fade(1.0, fade_out_duration, generation, true)
func fade_from_black(generation: int) -> void:
visible = true
modulate.a = 1.0
_start_fade(0.0, fade_in_duration, generation, false)
func reset_immediately() -> void:
if _fade_tween != null and _fade_tween.is_valid():
_fade_tween.kill()
_fade_tween = null
modulate.a = 0.0
visible = false
func _start_fade(
target_alpha: float,
duration: float,
generation: int,
faded_to_black: bool,
) -> void:
if _fade_tween != null and _fade_tween.is_valid():
_fade_tween.kill()
visible = true
_fade_tween = create_tween()
_fade_tween.set_trans(Tween.TRANS_QUAD)
_fade_tween.set_ease(
Tween.EASE_IN if faded_to_black else Tween.EASE_OUT
)
_fade_tween.tween_property(
self,
"modulate:a",
target_alpha,
maxf(duration, 0.01)
)
_fade_tween.finished.connect(
_on_fade_finished.bind(generation, faded_to_black),
CONNECT_ONE_SHOT
)
func _on_fade_finished(generation: int, faded_to_black: bool) -> void:
_fade_tween = null
if not faded_to_black:
visible = false
transition_completed.emit(generation, faded_to_black)