diff options
Diffstat (limited to 'client/gui/menus/setup/setup.gd')
-rw-r--r-- | client/gui/menus/setup/setup.gd | 110 |
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") |