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()