123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- extends Control
- signal scene_changed
- const DEFAULT_DURATION := 0.2
- const DEFAULT_DELAY := 0.0
- onready var _animator := $AnimationPlayer
- onready var _curtain := $CanvasLayer/ColorRect
- func set_color(color: Color):
- color.a = _curtain.color.a
- _curtain.color = color
- func change_scene(path: String, duration: float = DEFAULT_DURATION, delay: float = DEFAULT_DELAY):
- if duration <= 0.0:
- push_error("TRANSIT ERROR: change_scene duration must be > 0. Defaulting to %s" % DEFAULT_DURATION)
- duration = DEFAULT_DURATION
- if delay < 0.0:
- push_error("TRANSIT ERROR: change_scene delay must be >= 0. Defaulting to %s" % DEFAULT_DELAY)
- delay = DEFAULT_DELAY
- # disable mouse interaction while fading out
- _curtain.mouse_filter = MOUSE_FILTER_STOP
- if delay > 0:
- yield(get_tree().create_timer(delay), "timeout")
- _animator.playback_speed = 1.0 / duration
- _animator.play("fade")
- yield(_animator, "animation_finished")
- var err := get_tree().change_scene(path)
- if err:
- push_error("TRANSIT ERROR: Failed to change scene to %s: %s" % [path, err])
- # re-enable mouse interaction before fading back in
- _curtain.mouse_filter = MOUSE_FILTER_IGNORE
- _animator.play_backwards("fade")
- yield(_animator, "animation_finished")
- emit_signal("scene_changed")
|