From 6173d3e9a45f17dc92318d11786c5631143808e5 Mon Sep 17 00:00:00 2001 From: tpart Date: Fri, 12 Jul 2024 00:49:30 +0200 Subject: Add hint system --- client/menu/character.gd | 16 +++--- client/menu/hint.svg | 10 ++++ client/menu/hint.svg.import | 37 +++++++++++++ client/menu/main.gd | 5 +- client/menu/popup_message.gd | 61 ++++++++++++++++++++++ client/menu/popup_message.tscn | 113 ++++++++++++++++++++++++++++++++++++++++ client/menu/server_message.gd | 28 ---------- client/menu/server_message.tscn | 68 ------------------------ client/menu/setup.gd | 6 +-- 9 files changed, 232 insertions(+), 112 deletions(-) create mode 100644 client/menu/hint.svg create mode 100644 client/menu/hint.svg.import create mode 100644 client/menu/popup_message.gd create mode 100644 client/menu/popup_message.tscn delete mode 100644 client/menu/server_message.gd delete mode 100644 client/menu/server_message.tscn (limited to 'client/menu') diff --git a/client/menu/character.gd b/client/menu/character.gd index b4427e13..0d6a625c 100644 --- a/client/menu/character.gd +++ b/client/menu/character.gd @@ -23,8 +23,8 @@ extends Menu func _ready(): super() - $VBoxContainer/top_panel/a/username.text = Global.profile["username"] - character.select_hairstyle(Global.profile["character"]) + $VBoxContainer/top_panel/a/username.text = Global.get_profile("username") + character.select_hairstyle(Global.get_profile("character")) init_map() func init_map(): @@ -61,16 +61,14 @@ func _on_back_pressed(): OS.alert("Username cannot be empty.") return - Global.profile["username"] = username_edit.text + Global.set_profile("username", username_edit.text) Global.save_profile() replace_menu("res://menu/main.tscn") func _on_character_back_pressed(): - Global.profile["character"] = (Global.profile["character"] - 1) % num_hairstyles - character.select_hairstyle(Global.profile["character"]) - Global.save_profile() + Global.set_profile("character", (Global.get_profile("character") - 1) % num_hairstyles) + character.select_hairstyle(Global.get_profile("character")) func _on_character_forward_pressed(): - Global.profile["character"] = (Global.profile["character"] + 1) % num_hairstyles - character.select_hairstyle(Global.profile["character"]) - Global.save_profile() + Global.set_profile("character", (Global.get_profile("character") + 1) % num_hairstyles) + character.select_hairstyle(Global.get_profile("character")) diff --git a/client/menu/hint.svg b/client/menu/hint.svg new file mode 100644 index 00000000..ad64de91 --- /dev/null +++ b/client/menu/hint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/client/menu/hint.svg.import b/client/menu/hint.svg.import new file mode 100644 index 00000000..9f5eba04 --- /dev/null +++ b/client/menu/hint.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2uv5rf0enikf" +path="res://.godot/imported/hint.svg-84d80eb00de22610835892179ff94034.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://menu/hint.svg" +dest_files=["res://.godot/imported/hint.svg-84d80eb00de22610835892179ff94034.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/client/menu/main.gd b/client/menu/main.gd index 9fe026fe..a0ad2ee5 100644 --- a/client/menu/main.gd +++ b/client/menu/main.gd @@ -26,7 +26,7 @@ func _ready(): if OS.has_feature("web"): quit_button.hide() server.hide() - connect_uri.text = Global.profile["last_server_url"] + connect_uri.text = Global.get_profile("last_server_url") func menu_anim_cover(covered): $side.visible = not covered @@ -39,8 +39,7 @@ func _on_credits_pressed(): func _on_connect_pressed(): var url = connect_uri.text - Global.profile["last_server_url"] = url - Global.save_profile() + Global.set_profile("last_server_url", url) connect_to(url) func _on_quick_connect_pressed(): diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd new file mode 100644 index 00000000..b0ead906 --- /dev/null +++ b/client/menu/popup_message.gd @@ -0,0 +1,61 @@ +# Hurry Curry! - a game about cooking +# Copyright 2024 tpart +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, version 3 of the License only. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +extends MarginContainer +class_name PopupMessage + +@onready var server_msg = $VBox/ServerMessage +@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 hint_msg_label: Label = $VBox/HintMessage/CenterContainer/Label + +@onready var hint_timers: Node = $HintTimers + +func display_server_msg(msg: String): + server_msg.show() + server_msg_label.text = msg + server_msg_timer.start() + +func _on_server_timer_timeout(): + server_msg.hide() + +func display_hint_msg(msg: String): + hint_msg.show() + hint_msg_label.text = tr("Hint") + ": %s" % msg + hint_msg_timer.start() + +func _on_hint_timer_timeout(): + hint_msg.hide() + +func start_game_hints(): + for c: Timer in hint_timers.get_children(): + c.start() + +func stop_game_hints(): + _on_hint_timer_timeout() + for c: Timer in hint_timers.get_children(): + c.stop() + +func _input(_event): + if Input.is_action_just_pressed("boost"): + Global.set_profile("hint_boost_seen", true) + +func _on_boost_timeout(): + if not Global.get_profile("hint_boost_seen") and not Global.get_setting("touch_controls"): + display_hint_msg(tr("Press SHIFT/Controller B to boost")) diff --git a/client/menu/popup_message.tscn b/client/menu/popup_message.tscn new file mode 100644 index 00000000..178f414b --- /dev/null +++ b/client/menu/popup_message.tscn @@ -0,0 +1,113 @@ +[gd_scene load_steps=10 format=3 uid="uid://b21nrnkygiyjt"] + +[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_a1566"] +[ext_resource type="Script" path="res://menu/popup_message.gd" id="2_sbew6"] +[ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="3_2vnom"] +[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://menu/theme/font-azaret-mono.woff2" id="4_wsrnf"] +[ext_resource type="Texture2D" uid="uid://b2uv5rf0enikf" path="res://menu/hint.svg" id="5_2dxsd"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_k0m35"] +shader = ExtResource("3_2vnom") +shader_parameter/blur_amount = 3.5 +shader_parameter/mix_amount = 0.85 +shader_parameter/color_over = Color(0, 0, 0, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vq4dg"] +bg_color = Color(1, 1, 1, 0.878431) +corner_radius_top_left = 16 +corner_radius_top_right = 16 +corner_radius_bottom_right = 16 +corner_radius_bottom_left = 16 + +[sub_resource type="FontVariation" id="FontVariation_qfltj"] +base_font = ExtResource("4_wsrnf") +variation_embolden = 0.75 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3rgop"] +content_margin_left = 32.0 +content_margin_top = 8.0 +content_margin_right = 32.0 +content_margin_bottom = 8.0 + +[node name="PopupMessage" type="MarginContainer"] +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="."] +layout_mode = 2 +mouse_filter = 2 + +[node name="ServerMessage" type="PanelContainer" parent="VBox"] +visible = false +material = SubResource("ShaderMaterial_k0m35") +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 0 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_vq4dg") + +[node name="CenterContainer" type="CenterContainer" parent="VBox/ServerMessage"] +layout_mode = 2 + +[node name="Label" type="Label" parent="VBox/ServerMessage/CenterContainer"] +layout_mode = 2 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = SubResource("FontVariation_qfltj") +theme_override_styles/normal = SubResource("StyleBoxEmpty_3rgop") +text = "Server message" + +[node name="HintMessage" type="PanelContainer" parent="VBox"] +visible = false +material = SubResource("ShaderMaterial_k0m35") +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 0 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_vq4dg") + +[node name="CenterContainer" type="HBoxContainer" parent="VBox/HintMessage"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="VBox/HintMessage/CenterContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 4 +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"] +custom_minimum_size = Vector2(28, 28) +layout_mode = 2 +texture = ExtResource("5_2dxsd") +expand_mode = 1 +stretch_mode = 4 + +[node name="Label" type="Label" parent="VBox/HintMessage/CenterContainer"] +layout_mode = 2 +theme_override_fonts/font = SubResource("FontVariation_qfltj") +theme_override_styles/normal = SubResource("StyleBoxEmpty_3rgop") +text = "A hint is worth more than a thousand manuals" + +[node name="ServerTimer" type="Timer" parent="."] +wait_time = 5.0 +one_shot = true + +[node name="HintTimer" type="Timer" parent="."] +wait_time = 5.0 +one_shot = true + +[node name="HintTimers" type="Node" parent="."] + +[node name="Boost" type="Timer" parent="HintTimers"] +wait_time = 90.0 +one_shot = true + +[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="HintTimers/Boost" to="." method="_on_boost_timeout"] diff --git a/client/menu/server_message.gd b/client/menu/server_message.gd deleted file mode 100644 index f4acecfd..00000000 --- a/client/menu/server_message.gd +++ /dev/null @@ -1,28 +0,0 @@ -# Hurry Curry! - a game about cooking -# Copyright 2024 tpart -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, version 3 of the License only. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -extends MarginContainer -class_name ServerMessage - -@onready var popup_timer = $PopupTimer -@onready var popup_label = $VBoxContainer/ServerMessage/CenterContainer/Label - -func display_popup(msg: String): - popup_label.text = msg - show() - popup_timer.start() - -func _on_popup_timer_timeout(): - hide() diff --git a/client/menu/server_message.tscn b/client/menu/server_message.tscn deleted file mode 100644 index 23eba490..00000000 --- a/client/menu/server_message.tscn +++ /dev/null @@ -1,68 +0,0 @@ -[gd_scene load_steps=9 format=3 uid="uid://b21nrnkygiyjt"] - -[ext_resource type="Theme" uid="uid://b0qmvo504e457" path="res://menu/theme/theme.tres" id="1_p0jm7"] -[ext_resource type="Shader" path="res://menu/blur_mix.gdshader" id="2_e1f4e"] -[ext_resource type="Script" path="res://menu/server_message.gd" id="2_j4xya"] -[ext_resource type="FontFile" uid="uid://bk704sc5gkrb3" path="res://menu/theme/font-azaret-mono.woff2" id="4_71im4"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_k0m35"] -shader = ExtResource("2_e1f4e") -shader_parameter/blur_amount = 3.5 -shader_parameter/mix_amount = 0.85 -shader_parameter/color_over = Color(1, 1, 1, 1) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vq4dg"] -bg_color = Color(1, 1, 1, 0.878431) -corner_radius_top_left = 16 -corner_radius_top_right = 16 -corner_radius_bottom_right = 16 -corner_radius_bottom_left = 16 - -[sub_resource type="FontVariation" id="FontVariation_qfltj"] -base_font = ExtResource("4_71im4") -variation_embolden = 0.75 - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3rgop"] -content_margin_left = 32.0 -content_margin_top = 8.0 -content_margin_right = 32.0 -content_margin_bottom = 8.0 - -[node name="ServerMessage" type="MarginContainer"] -visible = false -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -theme = ExtResource("1_p0jm7") -script = ExtResource("2_j4xya") - -[node name="VBoxContainer" type="VBoxContainer" parent="."] -layout_mode = 2 -mouse_filter = 2 - -[node name="ServerMessage" type="PanelContainer" parent="VBoxContainer"] -material = SubResource("ShaderMaterial_k0m35") -layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 0 -mouse_filter = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_vq4dg") - -[node name="CenterContainer" type="CenterContainer" parent="VBoxContainer/ServerMessage"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/ServerMessage/CenterContainer"] -layout_mode = 2 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_fonts/font = SubResource("FontVariation_qfltj") -theme_override_styles/normal = SubResource("StyleBoxEmpty_3rgop") -text = "Server message" - -[node name="PopupTimer" type="Timer" parent="."] -wait_time = 3.0 -one_shot = true - -[connection signal="timeout" from="PopupTimer" to="." method="_on_popup_timer_timeout"] diff --git a/client/menu/setup.gd b/client/menu/setup.gd index 3997475c..4a7dfcfb 100644 --- a/client/menu/setup.gd +++ b/client/menu/setup.gd @@ -49,10 +49,8 @@ func _on_sign_pressed(): anim.play_backwards("paper_slide") await anim.animation_finished - Global.profile["username"] = username.text - Global.profile["character"] = character + Global.set_profile("username", username.text) + Global.set_profile("character", character) Global.set_setting("setup_complete", true) - Global.save_profile() - Global.save_settings() replace_menu("res://menu/main.tscn") -- cgit v1.2.3-70-g09d2 From a9ee32b2e2126c622b23ae83329836faaacc7368 Mon Sep 17 00:00:00 2001 From: tpart Date: Fri, 12 Jul 2024 00:54:18 +0200 Subject: Add move hint; Increase display time of hints --- client/global.gd | 3 ++- client/menu/popup_message.gd | 4 ++++ client/menu/popup_message.tscn | 7 ++++++- 3 files changed, 12 insertions(+), 2 deletions(-) (limited to 'client/menu') diff --git a/client/global.gd b/client/global.gd index 38b228e3..cd1b5c8b 100644 --- a/client/global.gd +++ b/client/global.gd @@ -25,7 +25,8 @@ var default_profile := { "username": "Giovanni", "character": 0, "last_server_url": "", - "hint_boost_seen": false + "hint_move_seen": false, + "hint_boost_seen": false, } var languages := [tr("System default"), "en", "de"] var using_joypad := false diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index b0ead906..67b4d6ab 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -59,3 +59,7 @@ func _input(_event): func _on_boost_timeout(): if not Global.get_profile("hint_boost_seen") and not Global.get_setting("touch_controls"): display_hint_msg(tr("Press SHIFT/Controller B to boost")) + +func _on_move_timeout(): + if not Global.get_profile("hint_move_seen") and not Global.get_setting("touch_controls"): + display_hint_msg(tr("Use WASD/Controller left stick to move")) diff --git a/client/menu/popup_message.tscn b/client/menu/popup_message.tscn index 178f414b..32f54b1d 100644 --- a/client/menu/popup_message.tscn +++ b/client/menu/popup_message.tscn @@ -99,15 +99,20 @@ wait_time = 5.0 one_shot = true [node name="HintTimer" type="Timer" parent="."] -wait_time = 5.0 +wait_time = 10.0 one_shot = true [node name="HintTimers" type="Node" parent="."] +[node name="Move" type="Timer" parent="HintTimers"] +wait_time = 5.0 +one_shot = true + [node name="Boost" type="Timer" parent="HintTimers"] wait_time = 90.0 one_shot = true [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="HintTimers/Move" to="." method="_on_move_timeout"] [connection signal="timeout" from="HintTimers/Boost" to="." method="_on_boost_timeout"] -- cgit v1.2.3-70-g09d2 From 41f8c3c467bfeb51ec34c76b16c78145064e0af6 Mon Sep 17 00:00:00 2001 From: tpart Date: Fri, 12 Jul 2024 00:57:56 +0200 Subject: Add interact hint --- client/global.gd | 1 + client/menu/popup_message.gd | 4 ++++ client/menu/popup_message.tscn | 5 +++++ 3 files changed, 10 insertions(+) (limited to 'client/menu') diff --git a/client/global.gd b/client/global.gd index cd1b5c8b..b719890c 100644 --- a/client/global.gd +++ b/client/global.gd @@ -27,6 +27,7 @@ var default_profile := { "last_server_url": "", "hint_move_seen": false, "hint_boost_seen": false, + "hint_interact_seen": false } var languages := [tr("System default"), "en", "de"] var using_joypad := false diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index 67b4d6ab..b4afbf3c 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -63,3 +63,7 @@ func _on_boost_timeout(): func _on_move_timeout(): if not Global.get_profile("hint_move_seen") and not Global.get_setting("touch_controls"): display_hint_msg(tr("Use WASD/Controller left stick to move")) + +func _on_interact_timeout(): + if not Global.get_profile("hint_interact_seen") and not Global.get_setting("touch_controls"): + display_hint_msg(tr("Press SPACE/Controller A to pick up items and interact with tools")) diff --git a/client/menu/popup_message.tscn b/client/menu/popup_message.tscn index 32f54b1d..3eccfc2e 100644 --- a/client/menu/popup_message.tscn +++ b/client/menu/popup_message.tscn @@ -112,7 +112,12 @@ one_shot = true wait_time = 90.0 one_shot = true +[node name="Interact" type="Timer" parent="HintTimers"] +wait_time = 20.0 +one_shot = true + [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="HintTimers/Move" to="." method="_on_move_timeout"] [connection signal="timeout" from="HintTimers/Boost" to="." method="_on_boost_timeout"] +[connection signal="timeout" from="HintTimers/Interact" to="." method="_on_interact_timeout"] -- cgit v1.2.3-70-g09d2 From ca482a7b052883bd1d830a88d104bab366eeadeb Mon Sep 17 00:00:00 2001 From: tpart Date: Fri, 12 Jul 2024 01:12:51 +0200 Subject: Only display relevant keybinding in hints --- client/menu/popup_message.gd | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'client/menu') diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index b4afbf3c..b3654416 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -58,12 +58,17 @@ func _input(_event): func _on_boost_timeout(): if not Global.get_profile("hint_boost_seen") and not Global.get_setting("touch_controls"): - display_hint_msg(tr("Press SHIFT/Controller B to boost")) + display_hint_msg(tr("Press %s to boost") % display_keybind(tr("SHIFT"), "B")) func _on_move_timeout(): if not Global.get_profile("hint_move_seen") and not Global.get_setting("touch_controls"): - display_hint_msg(tr("Use WASD/Controller left stick to move")) + display_hint_msg(tr("Use %s to move") % display_keybind("WASD", tr("left stick"))) func _on_interact_timeout(): if not Global.get_profile("hint_interact_seen") and not Global.get_setting("touch_controls"): - display_hint_msg(tr("Press SPACE/Controller A to pick up items and interact with tools")) + display_hint_msg(tr("Press %s to pick up items and interact with tools") % display_keybind(tr("SPACE"), "A")) + +func display_keybind(keyboard: String, joypad: String) -> String: + if Global.using_joypad: + return joypad + " (Joypad)" + return keyboard -- cgit v1.2.3-70-g09d2 From 78186bdcb2f15f8ad00cb83ccaeb5273f328d41c Mon Sep 17 00:00:00 2001 From: tpart Date: Fri, 12 Jul 2024 01:20:10 +0200 Subject: Refactor hint system; Fix hint showing up multiple times --- client/global.gd | 17 ++++++++++------- client/menu/popup_message.gd | 18 ++++++++++++++---- 2 files changed, 24 insertions(+), 11 deletions(-) (limited to 'client/menu') diff --git a/client/global.gd b/client/global.gd index b719890c..0311910f 100644 --- a/client/global.gd +++ b/client/global.gd @@ -25,9 +25,10 @@ var default_profile := { "username": "Giovanni", "character": 0, "last_server_url": "", - "hint_move_seen": false, - "hint_boost_seen": false, - "hint_interact_seen": false + # HINTS: + "has_moved": false, + "has_boosted": false, + "has_interacted": false } var languages := [tr("System default"), "en", "de"] var using_joypad := false @@ -205,8 +206,9 @@ func set_setting(key: String, value): if !settings.has(key): push_error("Tried to set setting \"%s\", which does not yet exist (missing key)" % key) return - settings[key].set_value(value) - save_settings() + if get_setting(value) != value: + settings[key].set_value(value) + save_settings() func get_profile(key: String): if profile.has(key): @@ -219,8 +221,9 @@ func set_profile(key: String, value): if !profile.has(key): push_error("Tried to set profile setting \"%s\", which does not yet exist (missing key)" % key) return - profile[key] = value - save_profile() + if profile[key] != value: + profile[key] = value + save_profile() static func interpolate(current, target, dt): return target + (current - target) * exp(-dt) diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index b3654416..2b682343 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -54,21 +54,31 @@ func stop_game_hints(): func _input(_event): if Input.is_action_just_pressed("boost"): - Global.set_profile("hint_boost_seen", true) + Global.set_profile("has_boosted", true) + elif any_action_just_pressed(["forward", "backwards", "left", "right"]): + Global.set_profile("has_moved", true) + elif Input.is_action_just_pressed("interact"): + Global.set_profile("has_interacted", true) func _on_boost_timeout(): - if not Global.get_profile("hint_boost_seen") and not Global.get_setting("touch_controls"): + if not Global.get_profile("has_boosted") and not Global.get_setting("touch_controls"): display_hint_msg(tr("Press %s to boost") % display_keybind(tr("SHIFT"), "B")) func _on_move_timeout(): - if not Global.get_profile("hint_move_seen") and not Global.get_setting("touch_controls"): + if not Global.get_profile("has_moved") and not Global.get_setting("touch_controls"): display_hint_msg(tr("Use %s to move") % display_keybind("WASD", tr("left stick"))) func _on_interact_timeout(): - if not Global.get_profile("hint_interact_seen") and not Global.get_setting("touch_controls"): + if not Global.get_profile("has_interacted") and not Global.get_setting("touch_controls"): display_hint_msg(tr("Press %s to pick up items and interact with tools") % display_keybind(tr("SPACE"), "A")) func display_keybind(keyboard: String, joypad: String) -> String: if Global.using_joypad: return joypad + " (Joypad)" return keyboard + +func any_action_just_pressed(actions: Array) -> bool: + for a: String in actions: + if Input.is_action_just_pressed(a): + return true + return false -- cgit v1.2.3-70-g09d2 From 0f0c7713218dc9fc8beafdbe14785c11a0f61ea8 Mon Sep 17 00:00:00 2001 From: tpart Date: Fri, 12 Jul 2024 01:27:29 +0200 Subject: Add reset camera hint --- client/global.gd | 4 +++- client/menu/popup_message.gd | 23 ++++++++++++++++++----- client/menu/popup_message.tscn | 19 ++++++++++++------- 3 files changed, 33 insertions(+), 13 deletions(-) (limited to 'client/menu') diff --git a/client/global.gd b/client/global.gd index 0311910f..4a985e38 100644 --- a/client/global.gd +++ b/client/global.gd @@ -28,7 +28,9 @@ var default_profile := { # HINTS: "has_moved": false, "has_boosted": false, - "has_interacted": false + "has_interacted": false, + "has_rotated": false, + "has_reset": false } var languages := [tr("System default"), "en", "de"] var using_joypad := false diff --git a/client/menu/popup_message.gd b/client/menu/popup_message.gd index 2b682343..e70e1fef 100644 --- a/client/menu/popup_message.gd +++ b/client/menu/popup_message.gd @@ -25,7 +25,9 @@ class_name PopupMessage @onready var server_msg_label: Label = $VBox/ServerMessage/CenterContainer/Label @onready var hint_msg_label: Label = $VBox/HintMessage/CenterContainer/Label -@onready var hint_timers: Node = $HintTimers +@onready var auto_hint_timers: Node = $AutoHintTimers + +@onready var reset_timer = $Reset func display_server_msg(msg: String): server_msg.show() @@ -44,21 +46,27 @@ func _on_hint_timer_timeout(): hint_msg.hide() func start_game_hints(): - for c: Timer in hint_timers.get_children(): + for c: Timer in auto_hint_timers.get_children(): c.start() func stop_game_hints(): _on_hint_timer_timeout() - for c: Timer in hint_timers.get_children(): + for c: Timer in auto_hint_timers.get_children(): c.stop() func _input(_event): if Input.is_action_just_pressed("boost"): Global.set_profile("has_boosted", true) - elif any_action_just_pressed(["forward", "backwards", "left", "right"]): + if any_action_just_pressed(["forward", "backwards", "left", "right"]): Global.set_profile("has_moved", true) - elif Input.is_action_just_pressed("interact"): + if any_action_just_pressed(["rotate_left", "rotate_right", "rotate_up", "rotate_down"]): + if not Global.get_profile("has_reset"): + reset_timer.start() + Global.set_profile("has_rotated", true) + if Input.is_action_just_pressed("interact"): Global.set_profile("has_interacted", true) + if Input.is_action_just_pressed("reset"): + Global.set_profile("has_reset", true) func _on_boost_timeout(): if not Global.get_profile("has_boosted") and not Global.get_setting("touch_controls"): @@ -72,6 +80,10 @@ func _on_interact_timeout(): if not Global.get_profile("has_interacted") and not Global.get_setting("touch_controls"): display_hint_msg(tr("Press %s to pick up items and interact with tools") % display_keybind(tr("SPACE"), "A")) +func _on_reset_timeout(): + if not Global.get_profile("has_reset") and not Global.get_setting("touch_controls"): + display_hint_msg(tr("Press %s to reset the camera view") % display_keybind("R", "Y")) + func display_keybind(keyboard: String, joypad: String) -> String: if Global.using_joypad: return joypad + " (Joypad)" @@ -82,3 +94,4 @@ func any_action_just_pressed(actions: Array) -> bool: if Input.is_action_just_pressed(a): return true return false + diff --git a/client/menu/popup_message.tscn b/client/menu/popup_message.tscn index 3eccfc2e..37133847 100644 --- a/client/menu/popup_message.tscn +++ b/client/menu/popup_message.tscn @@ -102,22 +102,27 @@ one_shot = true wait_time = 10.0 one_shot = true -[node name="HintTimers" type="Node" parent="."] +[node name="AutoHintTimers" type="Node" parent="."] -[node name="Move" type="Timer" parent="HintTimers"] +[node name="Move" type="Timer" parent="AutoHintTimers"] wait_time = 5.0 one_shot = true -[node name="Boost" type="Timer" parent="HintTimers"] +[node name="Boost" type="Timer" parent="AutoHintTimers"] wait_time = 90.0 one_shot = true -[node name="Interact" type="Timer" parent="HintTimers"] +[node name="Interact" type="Timer" parent="AutoHintTimers"] wait_time = 20.0 one_shot = true +[node name="Reset" type="Timer" parent="."] +wait_time = 10.0 +one_shot = true + [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="HintTimers/Move" to="." method="_on_move_timeout"] -[connection signal="timeout" from="HintTimers/Boost" to="." method="_on_boost_timeout"] -[connection signal="timeout" from="HintTimers/Interact" to="." method="_on_interact_timeout"] +[connection signal="timeout" from="AutoHintTimers/Move" to="." method="_on_move_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="Reset" to="." method="_on_reset_timeout"] -- cgit v1.2.3-70-g09d2