diff options
author | tpart <tpart120@proton.me> | 2025-09-21 20:19:06 +0200 |
---|---|---|
committer | tpart <tpart120@proton.me> | 2025-09-21 20:19:11 +0200 |
commit | 37cfee01938dd5a0b554e220253d5f844bbdf590 (patch) | |
tree | f47b3c44c898017439b11a2b69d6cb6b8bb13671 /client | |
parent | d72aa72d2797a92d93fab43617e839e5c7f1f442 (diff) | |
download | hurrycurry-37cfee01938dd5a0b554e220253d5f844bbdf590.tar hurrycurry-37cfee01938dd5a0b554e220253d5f844bbdf590.tar.bz2 hurrycurry-37cfee01938dd5a0b554e220253d5f844bbdf590.tar.zst |
Add pulsating effect to time overlay when less than 10 seconds remain
Diffstat (limited to 'client')
-rw-r--r-- | client/game.gd | 2 | ||||
-rw-r--r-- | client/gui/overlays/score.gd | 43 | ||||
-rw-r--r-- | client/gui/overlays/score.tscn | 29 |
3 files changed, 58 insertions, 16 deletions
diff --git a/client/game.gd b/client/game.gd index 3061b2a0..152417e0 100644 --- a/client/game.gd +++ b/client/game.gd @@ -359,7 +359,7 @@ func handle_packet(p): if is_replay and OS.has_feature("movie"): menu.exit() "pause": - overlay_score.timer.paused = p.state + overlay_score.set_paused(p.state) Global.game_paused = p.state _: push_error("Unrecognized packet type: %s" % p.type) diff --git a/client/gui/overlays/score.gd b/client/gui/overlays/score.gd index f12bbeba..f66ae559 100644 --- a/client/gui/overlays/score.gd +++ b/client/gui/overlays/score.gd @@ -22,13 +22,20 @@ var failed: int = 0 var completed: int = 0 var points: int = 0 +var time_target_scale := Vector2(1, 1) + @onready var failed_label: Label = $Score/Paper/Margin/Lines/Line2/Failed @onready var completed_label: Label = $Score/Paper/Margin/Lines/Line1/Completed @onready var points_label: Label = $Score/Paper/Margin/Lines/Line3/Points -@onready var timer: Timer = $Timer -@onready var minutes_label: Label = $Time/Paper/Line/Minutes -@onready var seconds_label: Label = $Time/Paper/Line/Seconds +@onready var minutes_label: Label = $Time/Paper/Node2D/Line/Minutes +@onready var seconds_label: Label = $Time/Paper/Node2D/Line/Seconds + @onready var announcement = get_node("../AnnounceTitle") +@onready var time_node_2d: Node2D = $Time/Paper/Node2D + +@onready var game_time: Timer = $GameTime +@onready var warning_time: Timer = $WarningTime +@onready var pulsating_time: Timer = $Time/Paper/Node2D/Line/PulsatingTime func update(failed_: int, completed_: int, points_: int, time: float): if failed_ - failed: @@ -44,22 +51,42 @@ func update(failed_: int, completed_: int, points_: int, time: float): points_label.scale = LABEL_SCALE points = points_ - timer.stop() + game_time.stop() if time > 0.: - timer.wait_time = time - timer.start() + game_time.start(time) + warning_time.start(time - 11) + +func set_paused(_state: bool): + warning_time.paused = _state + pulsating_time.paused = _state + game_time.paused = _state func set_ingame(_state: bool, lobby: bool): if lobby: hide() - timer.stop() + time_target_scale = Vector2(1, 1) + warning_time.stop() + pulsating_time.stop() + game_time.stop() else: + time_target_scale = Vector2(1, 1) + pulsating_time.stop() show() func _process(delta): failed_label.scale = G.interpolate(failed_label.scale, Vector2(1, 1), delta * 4.) completed_label.scale = G.interpolate(completed_label.scale, Vector2(1, 1), delta * 4.) points_label.scale = G.interpolate(points_label.scale, Vector2(1, 1), delta * 4.) - var seconds_remaining := int(floor(timer.time_left)) + time_node_2d.scale = G.interpolate(time_node_2d.scale, time_target_scale, delta * 4.) + var seconds_remaining := int(floor(game_time.time_left)) seconds_label.text = "%02d" % (seconds_remaining % 60) minutes_label.text = "%02d" % (seconds_remaining / 60) + +func _on_warning_time_timeout() -> void: + _on_pulsating_time_timeout() + pulsating_time.start() + +var state := true +func _on_pulsating_time_timeout() -> void: + time_target_scale = Vector2(1.2, 1.2) if state else Vector2(1, 1) + state = not state diff --git a/client/gui/overlays/score.tscn b/client/gui/overlays/score.tscn index 5c79eda1..fcdfb514 100644 --- a/client/gui/overlays/score.tscn +++ b/client/gui/overlays/score.tscn @@ -20,9 +20,12 @@ theme = ExtResource("1_4kujw") theme_override_styles/panel = SubResource("StyleBoxFlat_04ujj") script = ExtResource("2_kbjds") -[node name="Timer" type="Timer" parent="."] +[node name="GameTime" type="Timer" parent="."] wait_time = 30.0 +[node name="WarningTime" type="Timer" parent="."] +one_shot = true + [node name="Score" type="Control" parent="."] layout_mode = 2 size_flags_horizontal = 8 @@ -154,12 +157,18 @@ grow_vertical = 2 rotation = 0.0610865 texture = ExtResource("3_oum5g") -[node name="Line" type="HBoxContainer" parent="Time/Paper"] -layout_mode = 0 +[node name="Node2D" type="Node2D" parent="Time/Paper"] +position = Vector2(95, 30) -[node name="Minutes" type="Label" parent="Time/Paper/Line"] +[node name="Line" type="HBoxContainer" parent="Time/Paper/Node2D"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Minutes" type="Label" parent="Time/Paper/Node2D/Line"] auto_translate_mode = 2 -custom_minimum_size = Vector2(80, 0) layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") @@ -167,7 +176,7 @@ theme_override_font_sizes/font_size = 45 text = "05" horizontal_alignment = 2 -[node name="Colon" type="Label" parent="Time/Paper/Line"] +[node name="Colon" type="Label" parent="Time/Paper/Node2D/Line"] auto_translate_mode = 2 layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) @@ -176,10 +185,16 @@ theme_override_font_sizes/font_size = 45 text = ":" horizontal_alignment = 1 -[node name="Seconds" type="Label" parent="Time/Paper/Line"] +[node name="Seconds" type="Label" parent="Time/Paper/Node2D/Line"] auto_translate_mode = 2 layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 45 text = "00" + +[node name="PulsatingTime" type="Timer" parent="Time/Paper/Node2D/Line"] +wait_time = 0.5 + +[connection signal="timeout" from="WarningTime" to="." method="_on_warning_time_timeout"] +[connection signal="timeout" from="Time/Paper/Node2D/Line/PulsatingTime" to="." method="_on_pulsating_time_timeout"] |