summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authortpart <tpart120@proton.me>2024-09-28 20:07:24 +0200
committertpart <tpart120@proton.me>2024-09-28 20:07:24 +0200
commitfea2899db4065d035c9c3c6559741328e0084900 (patch)
tree72aebf904a4ef0b71db3782511597064c3dad83b /client
parentd644c5fd05b082b5a56d233e670689553242fa2c (diff)
downloadhurrycurry-fea2899db4065d035c9c3c6559741328e0084900.tar
hurrycurry-fea2899db4065d035c9c3c6559741328e0084900.tar.bz2
hurrycurry-fea2899db4065d035c9c3c6559741328e0084900.tar.zst
Implement support for multiple positional server hints (Fixes #150)
Diffstat (limited to 'client')
-rw-r--r--client/game.gd4
-rw-r--r--client/menu/blur_setup.gd1
-rw-r--r--client/menu/communicate/popup_message/popup_message.gd89
-rw-r--r--client/menu/communicate/popup_message/popup_message.tscn86
-rw-r--r--client/menu/communicate/popup_message/server_message.gd7
-rw-r--r--client/menu/communicate/popup_message/server_message.tscn4
6 files changed, 113 insertions, 78 deletions
diff --git a/client/game.gd b/client/game.gd
index 7cfab9c9..570ef32f 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -313,9 +313,9 @@ func handle_packet(p):
else:
# Positional hint message
if message == null:
- popup_message.clear_server_msg()
+ popup_message.clear_server_msg(position_)
else:
- popup_message.display_server_msg_positional(get_message_str(message), position_, false)
+ popup_message.display_server_msg_positional(get_message_str(message), position_)
"environment":
$Environment.update(p.effects)
"redirect":
diff --git a/client/menu/blur_setup.gd b/client/menu/blur_setup.gd
index 331d1f47..9d55a9d4 100644
--- a/client/menu/blur_setup.gd
+++ b/client/menu/blur_setup.gd
@@ -14,6 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
extends Control
+class_name BlurSetup
func _ready():
update(Global.get_setting("graphics.ui_blur"))
diff --git a/client/menu/communicate/popup_message/popup_message.gd b/client/menu/communicate/popup_message/popup_message.gd
index fdcc51a1..d7dde91f 100644
--- a/client/menu/communicate/popup_message/popup_message.gd
+++ b/client/menu/communicate/popup_message/popup_message.gd
@@ -14,35 +14,31 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-extends MarginContainer
+extends Control
class_name PopupMessage
+const SERVER_MESSAGE_SCENE = preload("res://menu/communicate/popup_message/server_message.tscn")
+
var is_ingame := false
var is_joined := false
-@onready var server_msg = $VBox/ServerMessage
-@onready var server_msg_positional = $ServerMessagePositional
-@onready var hint_msg = $VBox/HintMessage
-
-@onready var server_msg_timer: Timer = $ServerTimer
-@onready var hint_msg_timer: Timer = $HintTimer
-
-@onready var server_msg_label: Label = $VBox/ServerMessage/CenterContainer/Label
-@onready var server_msg_positional_label: Label = $ServerMessagePositional/ServerMessage/CenterContainer/Label
-@onready var hint_msg_label: Label = $VBox/HintMessage/CenterContainer/Label
+var positional_messages = {}
-@onready var server_msg_positional_panel: PanelContainer = $ServerMessagePositional/ServerMessage
+@onready var positional_messages_node: Control = $Positional
+@onready var server_msg = $Static/VBox/ServerMessage
+@onready var hint_msg = $Static/VBox/HintMessage
-@onready var auto_hint_timers: Node = $AutoHintTimers
+@onready var server_msg_label: Label = $Static/VBox/ServerMessage/CenterContainer/Label
+@onready var hint_msg_label: Label = $Static/VBox/HintMessage/CenterContainer/Label
-@onready var reset_timer = $Reset
-@onready var join_while_running_timer = $JoinWhileRunning
+@onready var auto_hint_timers: Node = $Timers/AutoHints
+@onready var server_msg_timer: Timer = $Timers/Server
+@onready var hint_msg_timer: Timer = $Timers/Hint
+@onready var reset_timer = $Timers/Reset
+@onready var join_while_running_timer = $Timers/JoinWhileRunning
@onready var game: Game = $"../Game"
-var server_message_position := Vector2.ZERO
-var last_server_message_panel_size := Vector2.ZERO
-
func _ready():
game.join_state_updated.connect(func(state: Game.JoinState):
is_joined = state == Game.JoinState.JOINED
@@ -56,15 +52,19 @@ func _ready():
)
func _process(_delta: float):
- if server_msg_positional.visible:
- var pos_3d = Vector3(server_message_position.x + 0.5, 1.5, server_message_position.y + 0.5)
+ for pos: Vector2 in positional_messages.keys():
+ var msg: PositionalMessage = positional_messages[pos]
+ var pos_3d = Vector3(pos.x + 0.5, 1.5, pos.y + 0.5)
var pos_2d = get_viewport().get_camera_3d().unproject_position(pos_3d)
- var server_message_panel_size = server_msg_positional_panel.size
- server_msg_positional.position = pos_2d.clamp(Vector2.ZERO + 0.5 * server_message_panel_size, Vector2(get_viewport_rect().size) - 0.5 * server_message_panel_size)
- if server_message_panel_size != last_server_message_panel_size:
- last_server_message_panel_size = server_message_panel_size
- server_msg_positional_panel.position = -0.5 * last_server_message_panel_size
+ msg.node_2d.position = pos_2d.clamp(
+ Vector2.ZERO + 0.5 * msg.node.size,
+ Vector2(get_viewport_rect().size) - 0.5 * msg.node.size
+ )
+
+ if msg.node.size != msg.last_size:
+ msg.last_size = msg.node.size
+ msg.node.position = -0.5 * msg.last_size
func ingame():
is_ingame = true
@@ -84,27 +84,32 @@ func update_state():
stop_game_hints()
func display_server_msg(msg: String, auto_remove := true):
- clear_server_msg()
server_msg.show()
server_msg_label.text = msg
if auto_remove:
server_msg_timer.start()
-func display_server_msg_positional(msg: String, pos: Vector2, auto_remove := true):
- clear_server_msg()
- server_msg_positional.show()
- server_message_position = pos
- server_msg_positional_label.text = msg
- server_msg_positional_panel.size = Vector2.ZERO
-
- if auto_remove:
- server_msg_timer.start()
+func display_server_msg_positional(text: String, pos: Vector2):
+ var msg := PositionalMessage.new()
+ msg.node = SERVER_MESSAGE_SCENE.instantiate()
+ msg.node_2d = Node2D.new()
+ positional_messages_node.add_child(msg.node_2d)
+ msg.node_2d.add_child(msg.node)
+ msg.node.set_text(text)
+ msg.node.size = Vector2.ZERO
+ msg.position = pos
+ positional_messages[pos] = msg
-func clear_server_msg():
- server_msg_timer.stop()
- server_msg.hide()
- server_msg_positional.hide()
+func clear_server_msg(position_ = null):
+ if position_ == null:
+ server_msg_timer.stop()
+ server_msg.hide()
+ else:
+ if position_ in positional_messages:
+ var msg: PositionalMessage = positional_messages[position_]
+ msg.node_2d.queue_free()
+ positional_messages.erase(position_)
func _on_server_timer_timeout():
clear_server_msg()
@@ -221,3 +226,9 @@ func _on_performance_timeout() -> void:
if not Global.get_hint("has_seen_performance") and Engine.get_frames_per_second() < DisplayServer.screen_get_refresh_rate() * 0.75:
Global.set_hint("has_seen_performance", true)
display_hint_msg(tr("c.hint.framerate_low"))
+
+class PositionalMessage:
+ var node: ServerMessage
+ var node_2d: Node2D
+ var position: Vector2
+ var last_size: Vector2
diff --git a/client/menu/communicate/popup_message/popup_message.tscn b/client/menu/communicate/popup_message/popup_message.tscn
index 799712e1..7342fcef 100644
--- a/client/menu/communicate/popup_message/popup_message.tscn
+++ b/client/menu/communicate/popup_message/popup_message.tscn
@@ -33,25 +33,35 @@ content_margin_top = 8.0
content_margin_right = 32.0
content_margin_bottom = 8.0
-[node name="PopupMessage" type="MarginContainer"]
+[node name="PopupMessage" type="Control"]
+layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
-theme = ExtResource("1_a1566")
script = ExtResource("2_sbew6")
-[node name="VBox" type="VBoxContainer" parent="."]
+[node name="Static" type="MarginContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+theme = ExtResource("1_a1566")
+
+[node name="VBox" type="VBoxContainer" parent="Static"]
layout_mode = 2
mouse_filter = 2
-[node name="ServerMessage" parent="VBox" instance=ExtResource("3_m3rok")]
+[node name="ServerMessage" parent="Static/VBox" instance=ExtResource("3_m3rok")]
visible = false
layout_mode = 2
-[node name="HintMessage" type="PanelContainer" parent="VBox"]
+[node name="HintMessage" type="PanelContainer" parent="Static/VBox"]
visible = false
material = SubResource("ShaderMaterial_k0m35")
layout_mode = 2
@@ -60,12 +70,12 @@ mouse_filter = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_vq4dg")
script = ExtResource("4_pvwmw")
-[node name="CenterContainer" type="HBoxContainer" parent="VBox/HintMessage"]
+[node name="CenterContainer" type="HBoxContainer" parent="Static/VBox/HintMessage"]
layout_mode = 2
mouse_filter = 2
alignment = 1
-[node name="MarginContainer" type="MarginContainer" parent="VBox/HintMessage/CenterContainer"]
+[node name="MarginContainer" type="MarginContainer" parent="Static/VBox/HintMessage/CenterContainer"]
layout_mode = 2
mouse_filter = 2
theme_override_constants/margin_left = 4
@@ -73,7 +83,7 @@ theme_override_constants/margin_top = 4
theme_override_constants/margin_right = 4
theme_override_constants/margin_bottom = 4
-[node name="TextureRect" type="TextureRect" parent="VBox/HintMessage/CenterContainer/MarginContainer"]
+[node name="TextureRect" type="TextureRect" parent="Static/VBox/HintMessage/CenterContainer/MarginContainer"]
custom_minimum_size = Vector2(28, 28)
layout_mode = 2
mouse_filter = 2
@@ -81,7 +91,7 @@ texture = ExtResource("5_2dxsd")
expand_mode = 1
stretch_mode = 4
-[node name="Label" type="Label" parent="VBox/HintMessage/CenterContainer"]
+[node name="Label" type="Label" parent="Static/VBox/HintMessage/CenterContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_fonts/font = SubResource("FontVariation_qfltj")
@@ -89,60 +99,66 @@ theme_override_styles/normal = SubResource("StyleBoxEmpty_3rgop")
text = "A hint is worth more than a thousand manuals"
autowrap_mode = 3
-[node name="ServerTimer" type="Timer" parent="."]
+[node name="Positional" type="Control" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+
+[node name="Timers" type="Node" parent="."]
+
+[node name="Server" type="Timer" parent="Timers"]
wait_time = 5.0
one_shot = true
-[node name="HintTimer" type="Timer" parent="."]
+[node name="Hint" type="Timer" parent="Timers"]
wait_time = 10.0
one_shot = true
-[node name="AutoHintTimers" type="Node" parent="."]
+[node name="AutoHints" type="Node" parent="Timers"]
-[node name="Move" type="Timer" parent="AutoHintTimers"]
+[node name="Move" type="Timer" parent="Timers/AutoHints"]
wait_time = 2.0
one_shot = true
-[node name="Performance" type="Timer" parent="AutoHintTimers"]
+[node name="Performance" type="Timer" parent="Timers/AutoHints"]
wait_time = 20.0
one_shot = true
-[node name="Boost" type="Timer" parent="AutoHintTimers"]
+[node name="Boost" type="Timer" parent="Timers/AutoHints"]
wait_time = 90.0
one_shot = true
-[node name="Interact" type="Timer" parent="AutoHintTimers"]
+[node name="Interact" type="Timer" parent="Timers/AutoHints"]
wait_time = 15.0
one_shot = true
-[node name="RotateCamera" type="Timer" parent="AutoHintTimers"]
+[node name="RotateCamera" type="Timer" parent="Timers/AutoHints"]
wait_time = 120.0
one_shot = true
-[node name="Zoom" type="Timer" parent="AutoHintTimers"]
+[node name="Zoom" type="Timer" parent="Timers/AutoHints"]
wait_time = 135.0
one_shot = true
-[node name="Reset" type="Timer" parent="."]
+[node name="Reset" type="Timer" parent="Timers"]
wait_time = 10.0
one_shot = true
-[node name="JoinWhileRunning" type="Timer" parent="."]
+[node name="JoinWhileRunning" type="Timer" parent="Timers"]
wait_time = 5.0
one_shot = true
-[node name="ServerMessagePositional" type="Node2D" parent="."]
-visible = false
-
-[node name="ServerMessage" parent="ServerMessagePositional" instance=ExtResource("3_m3rok")]
-
-[connection signal="timeout" from="ServerTimer" to="." method="_on_server_timer_timeout"]
-[connection signal="timeout" from="HintTimer" to="." method="_on_hint_timer_timeout"]
-[connection signal="timeout" from="AutoHintTimers/Move" to="." method="_on_move_timeout"]
-[connection signal="timeout" from="AutoHintTimers/Performance" to="." method="_on_performance_timeout"]
-[connection signal="timeout" from="AutoHintTimers/Boost" to="." method="_on_boost_timeout"]
-[connection signal="timeout" from="AutoHintTimers/Interact" to="." method="_on_interact_timeout"]
-[connection signal="timeout" from="AutoHintTimers/RotateCamera" to="." method="_on_rotate_camera_timeout"]
-[connection signal="timeout" from="AutoHintTimers/Zoom" to="." method="_on_zoom_timeout"]
-[connection signal="timeout" from="Reset" to="." method="_on_reset_timeout"]
-[connection signal="timeout" from="JoinWhileRunning" to="." method="_on_join_while_running_timeout"]
+[connection signal="timeout" from="Timers/Server" to="Static" method="_on_server_timer_timeout"]
+[connection signal="timeout" from="Timers/Hint" to="Static" method="_on_hint_timer_timeout"]
+[connection signal="timeout" from="Timers/AutoHints/Move" to="Static" method="_on_move_timeout"]
+[connection signal="timeout" from="Timers/AutoHints/Performance" to="Static" method="_on_performance_timeout"]
+[connection signal="timeout" from="Timers/AutoHints/Boost" to="Static" method="_on_boost_timeout"]
+[connection signal="timeout" from="Timers/AutoHints/Interact" to="Static" method="_on_interact_timeout"]
+[connection signal="timeout" from="Timers/AutoHints/RotateCamera" to="Static" method="_on_rotate_camera_timeout"]
+[connection signal="timeout" from="Timers/AutoHints/Zoom" to="Static" method="_on_zoom_timeout"]
+[connection signal="timeout" from="Timers/Reset" to="Static" method="_on_reset_timeout"]
+[connection signal="timeout" from="Timers/JoinWhileRunning" to="Static" method="_on_join_while_running_timeout"]
diff --git a/client/menu/communicate/popup_message/server_message.gd b/client/menu/communicate/popup_message/server_message.gd
new file mode 100644
index 00000000..cbf4ba71
--- /dev/null
+++ b/client/menu/communicate/popup_message/server_message.gd
@@ -0,0 +1,7 @@
+extends BlurSetup
+class_name ServerMessage
+
+@onready var label: Label = $CenterContainer/Label
+
+func set_text(text: String):
+ label.text = text
diff --git a/client/menu/communicate/popup_message/server_message.tscn b/client/menu/communicate/popup_message/server_message.tscn
index 63160942..2015027b 100644
--- a/client/menu/communicate/popup_message/server_message.tscn
+++ b/client/menu/communicate/popup_message/server_message.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=8 format=3 uid="uid://dq61p3a8og2b6"]
[ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="1_qv8ew"]
-[ext_resource type="Script" path="res://menu/blur_setup.gd" id="2_80a6b"]
+[ext_resource type="Script" path="res://menu/communicate/popup_message/server_message.gd" id="2_csqo8"]
[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://menu/theme/font-azaret-mono.woff2" id="3_dw20j"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_q3bbd"]
@@ -35,7 +35,7 @@ size_flags_horizontal = 4
size_flags_vertical = 0
mouse_filter = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_vq4dg")
-script = ExtResource("2_80a6b")
+script = ExtResource("2_csqo8")
[node name="CenterContainer" type="CenterContainer" parent="."]
layout_mode = 2