tojam20-elevator/scenes/end_screen.gd

91 lines
3.1 KiB
GDScript

extends CanvasLayer
var _score := 0
var _saved := 0
var _lost := false
var _ready_for_input := false
func _ready():
EventBus.game_won.connect(_on_game_won)
EventBus.game_lost.connect(_on_game_lost)
EventBus.score_changed.connect(func(s): _score = s)
EventBus.saved_changed.connect(func(s): _saved = s)
$Center/Card/Margin/Column/SpaceHint.text = Strings.END_SPACE_HINT
$Dim.modulate.a = 0.0
$BlackFade.modulate.a = 0.0
$Center.modulate.a = 0.0
$Center/Card/Margin/Column/Headline.modulate.a = 0.0
$Center/Card/Margin/Column/ScoreLabel.modulate.a = 0.0
$Center/Card/Margin/Column/SavedLabel.modulate.a = 0.0
$Center/Card/Margin/Column/SpaceHint.modulate.a = 0.0
visible = true
func _unhandled_input(event):
if _ready_for_input and event is InputEventKey and event.pressed and not event.echo and event.keycode == KEY_SPACE:
get_viewport().set_input_as_handled()
_on_restart_pressed()
func _on_game_won():
$Center/Card/Margin/Column/Headline.text = Strings.END_WIN_HEADLINE
_lost = false
_run_intro_sequence()
func _on_game_lost(reason: String):
$Center/Card/Margin/Column/Headline.text = reason
_lost = true
_apply_loss_palette()
_run_intro_sequence()
func _apply_loss_palette():
var headline := Color(0.949, 0.227, 0.541, 1)
var body := Color(0.851, 0.541, 0.659, 1)
var hint := Color(0.941, 0.761, 0.831, 1)
$Dim.color = Color(0.078, 0.031, 0.18, 1)
$Center/Card/Margin/Column/Headline.add_theme_color_override("font_color", headline)
$Center/Card/Margin/Column/ScoreLabel.add_theme_color_override("font_color", body)
$Center/Card/Margin/Column/SavedLabel.add_theme_color_override("font_color", body)
$Center/Card/Margin/Column/SpaceHint.add_theme_color_override("font_color", hint)
func _run_intro_sequence() -> void:
$Center/Card/Margin/Column/ScoreLabel.text = Strings.END_SCORE_FMT % _score
$Center/Card/Margin/Column/SavedLabel.text = Strings.END_SAVED_FMT % _saved
await get_tree().create_timer(0.8, false).timeout
var fade_tween := create_tween()
fade_tween.tween_property($BlackFade, "modulate:a", 1.0, 1.2)
await fade_tween.finished
$Dim.modulate.a = 1.0
$Center.modulate.a = 1.0
var headline_tween := create_tween()
headline_tween.tween_property($Center/Card/Margin/Column/Headline, "modulate:a", 1.0, 0.4)
await headline_tween.finished
await get_tree().create_timer(0.2, false).timeout
var labels_tween := create_tween()
labels_tween.tween_property($Center/Card/Margin/Column/ScoreLabel, "modulate:a", 1.0, 0.4)
labels_tween.parallel().tween_property($Center/Card/Margin/Column/SavedLabel, "modulate:a", 1.0, 0.4)
await labels_tween.finished
await get_tree().create_timer(0.2, false).timeout
var hint_tween := create_tween()
hint_tween.tween_property($Center/Card/Margin/Column/SpaceHint, "modulate:a", 1.0, 0.4)
await hint_tween.finished
_ready_for_input = true
var flash_tween := create_tween().set_loops()
flash_tween.tween_property($Center/Card/Margin/Column/SpaceHint, "modulate:a", 0.2, 0.6).set_trans(Tween.TRANS_SINE)
flash_tween.tween_property($Center/Card/Margin/Column/SpaceHint, "modulate:a", 1.0, 0.6).set_trans(Tween.TRANS_SINE)
func _on_restart_pressed():
get_tree().reload_current_scene()