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 = Strings.END_LOSS_HEADLINE _lost = true _apply_loss_palette() _run_intro_sequence() func _apply_loss_palette(): var border := Color(1, 0.3, 0.3, 1) var subtle := Color(0.95, 0.7, 0.7, 1) $Dim.color = Color(0.18, 0.05, 0.05, 1) $Center/Card/Margin/Column/Headline.add_theme_color_override("font_color", border) $Center/Card/Margin/Column/ScoreLabel.add_theme_color_override("font_color", subtle) $Center/Card/Margin/Column/SavedLabel.add_theme_color_override("font_color", subtle) 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 func _on_restart_pressed(): get_tree().reload_current_scene()