# 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 . # extends Menu class_name GameMenu @onready var game: Game = $Game @onready var popup_message: PopupMessage = $Overlays/PopupMessage @onready var chat_preview: ChatPreview = $Overlays/ChatPreview @onready var pinned_items: PinnedItemMessages = $Overlays/PinnedMessages func _ready(): get_tree().get_root().go_back_requested.connect(open_ingame_menu) super() transition.set_loading_text(tr("c.menu.game.connecting")) Settings.hook_changed_init("gameplay.first_person", "mouse_lock", func (_a): update_mouse_capture()) func _input(_event): if Input.is_action_just_pressed("ui_menu"): open_ingame_menu() if Input.is_action_just_pressed("chat"): Sound.play_click() chat_preview.visible = false await submenu("res://gui/menus/chat.tscn") chat_preview.visible = true if Input.is_action_just_pressed("screenshot"): var path = get_shot_path("screenshot-%s.png") get_viewport().get_texture().get_image().save_png(path) game.system_message(tr("c.system_message.screenshot_saved").format({"path": path})) if Input.is_action_just_pressed("sceneshot"): var path = get_shot_path("sceneshot-%s.glb") var doc := GLTFDocument.new() var state := GLTFState.new() doc.append_from_scene(game, state) doc.write_to_filesystem(state, path) game.system_message(tr("c.system_message.sceneshot_saved").format({"path": path})) if Input.is_action_just_pressed("toggle_first_person"): Settings.write("gameplay.first_person", not Settings.read("gameplay.first_person")) func get_shot_path(template: String) -> String: var path = Settings.read("gameplay.screenshot_path") if path == "": path = "user://" var filename = template % Time.get_datetime_string_from_system() return "%s/%s" % [path, filename] func _menu_cover(state): super(state) game.follow_camera.disable_input_menu = state game.follow_camera.update_disable_input() update_mouse_capture() func _menu_exit(): super() Input.mouse_mode = Input.MOUSE_MODE_VISIBLE func update_mouse_capture(): var cap = Settings.read("gameplay.first_person") and not covered Input.mouse_mode = Input.MOUSE_MODE_CAPTURED if cap else Input.MOUSE_MODE_VISIBLE func open_ingame_menu(): if popup != null: return Sound.play_click() submenu("res://gui/menus/ingame.tscn")