91 lines
3.1 KiB
GDScript
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()
|