aboutsummaryrefslogtreecommitdiff
path: root/client/gui/menus/setup/setup.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/gui/menus/setup/setup.gd')
-rw-r--r--client/gui/menus/setup/setup.gd110
1 files changed, 110 insertions, 0 deletions
diff --git a/client/gui/menus/setup/setup.gd b/client/gui/menus/setup/setup.gd
new file mode 100644
index 00000000..6170786c
--- /dev/null
+++ b/client/gui/menus/setup/setup.gd
@@ -0,0 +1,110 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2025 Hurry Curry! contributors
+#
+# 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 <https://www.gnu.org/licenses/>.
+#
+extends Menu
+
+const SCROLL_SPEED := 500.
+
+var character_style = null # : Dictionary?
+
+@onready var anim: AnimationPlayer = $AnimationPlayer
+@onready var username: LineEdit = $ScrollContainer/Control/TextureRect/PaperMargin/Contents/NameEntry/LineEdit
+@onready var sign_sound: AudioStreamPlayer = $Sign
+@onready var sign_button: Button = $ScrollContainer/Control/TextureRect/PaperMargin/Contents/Signatures/EmployeeMargin/Sign/Signature
+@onready var scroll: ScrollContainer = $ScrollContainer
+@onready var select_uniform: HBoxContainer = $ScrollContainer/Control/TextureRect/PaperMargin/Contents/SelectUniform
+@onready var skip_tutorial: CheckBox = $ScrollContainer/Control/TextureRect/PaperMargin/Contents/SelectExperience/CheckBox
+
+func _ready():
+ anim.play("paper_slide")
+ var button_group := ButtonGroup.new()
+ for i in range(3):
+ var preview: HairstylePreview = preload("res://gui/menus/setup/hairstyle_preview.tscn").instantiate()
+ select_uniform.add_child(preview)
+ preview.setup(i, button_group)
+ preview.selected.connect(_character_selected)
+ if i < 2:
+ var spacer = Control.new()
+ spacer.size_flags_vertical = Control.SIZE_EXPAND
+ spacer.custom_minimum_size.x = 50
+ select_uniform.add_child(spacer)
+
+ # Enable msaa 2D for this scene
+ Global.get_viewport().msaa_2d = Viewport.MSAA_4X
+
+ if Global.profile.username != "": username.text = Global.profile.username
+
+ if TranslationServer.get_locale().begins_with("zh"):
+ $ScrollContainer/Control/TextureRect.rotation = 0
+ increase_font_size(self)
+
+ super()
+ $Back.visible = not is_instance_of(parent_menu, Entry)
+
+func increase_font_size(node: Node):
+ if node is RichTextLabel:
+ for oname in ["bold_italics_font_size", "italics_font_size", "normal_font_size", "mono_font_size", "bold_font_size"]:
+ node.add_theme_font_size_override(oname, node.get_theme_default_font_size() * 1.2)
+ for c in node.get_children(): increase_font_size(c)
+
+func _on_back_pressed() -> void:
+ exit()
+
+func _character_selected(style: Dictionary):
+ character_style = style
+
+func _process(delta):
+ var s = Input.get_axis("rotate_up", "rotate_down")
+ scroll.set_deferred("scroll_vertical", scroll.scroll_vertical + s * delta * SCROLL_SPEED)
+
+
+func check():
+ if username.text == "": return tr("c.error.empty_username")
+ if character_style == null: return tr("c.error.select_hairstyle")
+ return null
+
+func _on_sign_pressed():
+ if check() != null:
+ var popup_data := MenuPopup.Data.new()
+ popup_data.text = check()
+ var accept_button := Button.new()
+ accept_button.text = tr("c.menu.accept")
+ popup_data.buttons = [accept_button]
+ await submenu("res://gui/menus/popup.tscn", popup_data)
+ return
+
+ sign_button.disabled = true
+
+ sign_sound.play()
+ await sign_sound.finished
+ anim.play_backwards("paper_slide")
+ await anim.animation_finished
+
+ Global.set_profile("username", username.text)
+ Global.set_profile("character_style", character_style)
+ if skip_tutorial.button_pressed:
+ for k in Global.profile["hints"].keys():
+ Global.set_hint(k, true)
+ Global.save_profile()
+
+ Global.set_setting("gameplay.hints_started", skip_tutorial.button_pressed)
+ Global.set_setting("gameplay.tutorial_disabled", skip_tutorial.button_pressed)
+ Global.set_setting("gameplay.setup_completed", true)
+ Global.save_settings()
+
+ Global.get_viewport().msaa_2d = Viewport.MSAA_DISABLED
+
+ if not is_instance_of(parent_menu, Entry): exit()
+ else: replace_menu("res://gui/menu/main/main.tscn")