From 5b3d6c9f19a1382607dd58f7fbaf9980089b98fa Mon Sep 17 00:00:00 2001 From: Minimata Date: Fri, 14 Nov 2025 11:41:11 +0100 Subject: [PATCH] can quit menus using B button --- .../base/scenes/menus/main_menu/main_menu.gd | 10 ++++++- .../scenes/overlaid_menu/menus/pause_menu.gd | 28 +++++++++++++------ .../scenes/overlaid_menu/overlaid_menu.gd | 4 ++- .../overlaid_menu/overlaid_menu_container.gd | 8 ++++++ .../base/scripts/pause_menu_controller.gd | 14 +++++----- maps/city.tscn | 4 +-- .../main_menu/main_menu_with_animations.tscn | 6 +++- .../mini_options_overlaid_menu.tscn | 4 ++- menus/scenes/overlaid_menus/pause_menu.tscn | 4 ++- menus/scripts/game_state.gd | 1 - 10 files changed, 58 insertions(+), 25 deletions(-) diff --git a/addons/maaacks_game_template/base/scenes/menus/main_menu/main_menu.gd b/addons/maaacks_game_template/base/scenes/menus/main_menu/main_menu.gd index 8e7de55f..65a4c19b 100644 --- a/addons/maaacks_game_template/base/scenes/menus/main_menu/main_menu.gd +++ b/addons/maaacks_game_template/base/scenes/menus/main_menu/main_menu.gd @@ -6,6 +6,9 @@ extends Control @export var options_packed_scene : PackedScene @export var credits_packed_scene : PackedScene +@export var menu_context : GUIDEMappingContext +@export var back_action : GUIDEAction + var options_scene var credits_scene var sub_menu @@ -73,7 +76,12 @@ func _ready() -> void: _add_or_hide_options() _add_or_hide_credits() _hide_new_game_if_unset() - + _setup_inputs() + +func _setup_inputs() -> void: + GUIDE.enable_mapping_context(menu_context) + back_action.triggered.connect(_on_back_button_pressed) + func _on_new_game_button_pressed() -> void: new_game() diff --git a/addons/maaacks_game_template/base/scenes/overlaid_menu/menus/pause_menu.gd b/addons/maaacks_game_template/base/scenes/overlaid_menu/menus/pause_menu.gd index 2cdbbff4..9e87c163 100644 --- a/addons/maaacks_game_template/base/scenes/overlaid_menu/menus/pause_menu.gd +++ b/addons/maaacks_game_template/base/scenes/overlaid_menu/menus/pause_menu.gd @@ -9,16 +9,19 @@ extends OverlaidMenu var popup_open : Node var previous_mapping_contexts : Array -func on_enter_tree() -> void: - pass - #previous_mapping_contexts = GUIDE.get_enabled_mapping_contexts() - #GUIDE.enable_mapping_context(menu_context) +var is_listening_to_inputs = true + +func _enter_tree() -> void: + super._enter_tree() + previous_mapping_contexts = GUIDE.get_enabled_mapping_contexts() + for previous_context in previous_mapping_contexts: + GUIDE.disable_mapping_context(previous_context) + GUIDE.enable_mapping_context(menu_context) -func on_exit_tree() -> void: - pass - #GUIDE.disable_mapping_context(menu_context) - #for previous_context in previous_mapping_contexts: - #GUIDE.enable_mapping_context(previous_context) +func _exit_tree() -> void: + GUIDE.disable_mapping_context(menu_context) + for previous_context in previous_mapping_contexts: + GUIDE.enable_mapping_context(previous_context) func close_popup() -> void: if popup_open != null: @@ -43,10 +46,15 @@ func open_options_menu() -> void: var options_scene := options_packed_scene.instantiate() add_child(options_scene) _disable_focus.call_deferred() + is_listening_to_inputs = false await options_scene.tree_exiting + is_listening_to_inputs = true _enable_focus.call_deferred() func _handle_cancel_input() -> void: + if not is_listening_to_inputs: + return + if popup_open != null: close_popup() else: @@ -68,6 +76,8 @@ func _ready() -> void: _hide_exit_for_web() _hide_options_if_unset() _hide_main_menu_if_unset() + + back_action.triggered.connect(_handle_cancel_input) func _on_restart_button_pressed() -> void: %ConfirmRestart.popup_centered() diff --git a/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu.gd b/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu.gd index 9606d432..10d94c44 100644 --- a/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu.gd +++ b/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu.gd @@ -11,6 +11,8 @@ extends Control process_mode = PROCESS_MODE_INHERIT @export var makes_mouse_visible : bool = true +@export var back_action : GUIDEAction + signal menu_closing var _initial_pause_state : bool = false @@ -38,7 +40,7 @@ func _unhandled_input(event : InputEvent) -> void: func _on_close_button_pressed() -> void: close() - + func _enter_tree() -> void: _scene_tree = get_tree() _initial_pause_state = _scene_tree.paused diff --git a/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu_container.gd b/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu_container.gd index ec4f4553..5a6cd7d6 100644 --- a/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu_container.gd +++ b/addons/maaacks_game_template/base/scenes/overlaid_menu/overlaid_menu_container.gd @@ -12,3 +12,11 @@ extends OverlaidMenu if menu_scene: var _instance = menu_scene.instantiate() %MenuContainer.add_child(_instance) + +func blocking_close() -> void: + get_viewport().set_input_as_handled() + super.close() + +func _ready() -> void: + back_action.triggered.connect(blocking_close) + diff --git a/addons/maaacks_game_template/base/scripts/pause_menu_controller.gd b/addons/maaacks_game_template/base/scripts/pause_menu_controller.gd index e8df9311..11102554 100644 --- a/addons/maaacks_game_template/base/scripts/pause_menu_controller.gd +++ b/addons/maaacks_game_template/base/scripts/pause_menu_controller.gd @@ -7,15 +7,18 @@ extends Node @export var player : CharacterBody3D @export_group("Inputs") -@export var base_mode:GUIDEMappingContext @export var pause:GUIDEAction +var menu_already_open = false + func _ready() -> void: - # GUIDE.enable_mapping_context(base_mode) - pause.triggered.connect(on_input_pause) func on_input_pause(): + if menu_already_open: + return + + menu_already_open = true if not focused_viewport: focused_viewport = get_viewport() var _initial_focus_control = focused_viewport.gui_get_focus_owner() @@ -25,9 +28,6 @@ func on_input_pause(): get_tree().current_scene.call_deferred("add_child", current_menu) await current_menu.tree_exited + menu_already_open = false if is_inside_tree() and _initial_focus_control: _initial_focus_control.grab_focus() - -func _unhandled_input(event : InputEvent) -> void: - if event.is_action_pressed("ui_cancel"): - pass diff --git a/maps/city.tscn b/maps/city.tscn index 95d6004e..d30aee97 100644 --- a/maps/city.tscn +++ b/maps/city.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=42 format=3 uid="uid://dmkw8cmalm5k"] +[gd_scene load_steps=41 format=3 uid="uid://dmkw8cmalm5k"] [ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_2vsi6"] [ext_resource type="Script" uid="uid://blenis2y55fmg" path="res://tools/city_helpers.gd" id="1_qwuk2"] @@ -7,7 +7,6 @@ [ext_resource type="Texture2D" uid="uid://7kcmi16gedd0" path="res://assets/LD-0001.png" id="3_ruo5i"] [ext_resource type="Script" uid="uid://cyh0d64pfygbl" path="res://addons/maaacks_game_template/base/scripts/pause_menu_controller.gd" id="7_ukfuy"] [ext_resource type="PackedScene" uid="uid://ccqajqchiw4xu" path="res://menus/scenes/overlaid_menus/pause_menu.tscn" id="8_wctvs"] -[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="9_eca4n"] [ext_resource type="PackedScene" uid="uid://bkcsjsk2ciff" path="res://addons/maaacks_game_template/base/scenes/music_players/background_music_player.tscn" id="9_i2xii"] [ext_resource type="Resource" uid="uid://dgluj0ql5vth7" path="res://systems/inputs/base_mode/pause.tres" id="10_0ari0"] [ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="10_eca4n"] @@ -133,7 +132,6 @@ transform = Transform3D(10000, 0, 0, 0, 1, 0, 0, 0, 10000, 0, 4.03932, -186.2594 script = ExtResource("7_ukfuy") pause_menu_packed = ExtResource("8_wctvs") player = NodePath("../Player") -base_mode = ExtResource("9_eca4n") pause = ExtResource("10_0ari0") [node name="BackgroundMusicPlayer" parent="." instance=ExtResource("9_i2xii")] diff --git a/menus/scenes/menus/main_menu/main_menu_with_animations.tscn b/menus/scenes/menus/main_menu/main_menu_with_animations.tscn index 0c031e1b..55c7640f 100644 --- a/menus/scenes/menus/main_menu/main_menu_with_animations.tscn +++ b/menus/scenes/menus/main_menu/main_menu_with_animations.tscn @@ -1,8 +1,10 @@ -[gd_scene load_steps=17 format=3 uid="uid://vm22i5sv3p3s"] +[gd_scene load_steps=19 format=3 uid="uid://vm22i5sv3p3s"] [ext_resource type="PackedScene" uid="uid://c6k5nnpbypshi" path="res://addons/maaacks_game_template/base/scenes/menus/main_menu/main_menu.tscn" id="1_my8ii"] [ext_resource type="Script" uid="uid://c0ntfmiuw4ttg" path="res://menus/scenes/menus/main_menu/main_menu_with_animations.gd" id="2_nyjay"] [ext_resource type="AudioStream" uid="uid://f8cvr5s041ej" path="res://assets/audio/ambiance/637083__nox_sound__ambiance_nature_night_cricket_calm_loop_stereo.wav" id="3_tvvjd"] +[ext_resource type="Resource" uid="uid://c2hpxkcujyc13" path="res://systems/inputs/menu_mode/menu_mode.tres" id="3_ytpwg"] +[ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="4_8i6b8"] [sub_resource type="Animation" id="1"] resource_name = "Intro" @@ -352,6 +354,8 @@ graph_offset = Vector2(-180.277, 49) script = ExtResource("2_nyjay") level_select_packed_scene = null game_scene_path = "uid://dmkw8cmalm5k" +menu_context = ExtResource("3_ytpwg") +back_action = ExtResource("4_8i6b8") [node name="MenuAnimationPlayer" type="AnimationPlayer" parent="." index="1"] libraries = { diff --git a/menus/scenes/overlaid_menus/mini_options_overlaid_menu.tscn b/menus/scenes/overlaid_menus/mini_options_overlaid_menu.tscn index ebc628ec..50f65151 100644 --- a/menus/scenes/overlaid_menus/mini_options_overlaid_menu.tscn +++ b/menus/scenes/overlaid_menus/mini_options_overlaid_menu.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=3 format=3 uid="uid://dim045la3mijk"] +[gd_scene load_steps=4 format=3 uid="uid://dim045la3mijk"] [ext_resource type="PackedScene" uid="uid://cikf3o5omnunl" path="res://addons/maaacks_game_template/base/scenes/overlaid_menu/menus/mini_options_overlaid_menu.tscn" id="1_5piya"] [ext_resource type="PackedScene" uid="uid://foajscu2dqkk" path="res://menus/scenes/menus/options_menu/mini_options_menu_with_reset.tscn" id="2_3u5po"] +[ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="3_i7tty"] [node name="MiniOptionsOverlaidMenu" instance=ExtResource("1_5piya")] menu_scene = ExtResource("2_3u5po") +back_action = ExtResource("3_i7tty") diff --git a/menus/scenes/overlaid_menus/pause_menu.tscn b/menus/scenes/overlaid_menus/pause_menu.tscn index f0b70c31..ba9408a8 100644 --- a/menus/scenes/overlaid_menus/pause_menu.tscn +++ b/menus/scenes/overlaid_menus/pause_menu.tscn @@ -1,15 +1,17 @@ -[gd_scene load_steps=5 format=3 uid="uid://ccqajqchiw4xu"] +[gd_scene load_steps=6 format=3 uid="uid://ccqajqchiw4xu"] [ext_resource type="PackedScene" uid="uid://b5cd6sa8qq4vc" path="res://addons/maaacks_game_template/base/scenes/overlaid_menu/menus/pause_menu.tscn" id="1_0paax"] [ext_resource type="Script" uid="uid://bwvomv4eww4fg" path="res://menus/scenes/overlaid_menus/pause_menu.gd" id="2_ek1hy"] [ext_resource type="PackedScene" uid="uid://dim045la3mijk" path="res://menus/scenes/overlaid_menus/mini_options_overlaid_menu.tscn" id="3_e0t2r"] [ext_resource type="Resource" uid="uid://c2hpxkcujyc13" path="res://systems/inputs/menu_mode/menu_mode.tres" id="4_nfx08"] +[ext_resource type="Resource" uid="uid://ck43v3q5ype3f" path="res://systems/inputs/menu_mode/back.tres" id="5_su1bt"] [node name="PauseMenu" instance=ExtResource("1_0paax")] script = ExtResource("2_ek1hy") options_packed_scene = ExtResource("3_e0t2r") main_menu_scene = "res://menus/scenes/menus/main_menu/main_menu_with_animations.tscn" menu_context = ExtResource("4_nfx08") +back_action = ExtResource("5_su1bt") [connection signal="tree_entered" from="." to="." method="on_enter_tree"] [connection signal="tree_exited" from="." to="." method="on_exit_tree"] diff --git a/menus/scripts/game_state.gd b/menus/scripts/game_state.gd index 382c283b..abfd8d7c 100644 --- a/menus/scripts/game_state.gd +++ b/menus/scripts/game_state.gd @@ -20,7 +20,6 @@ static func get_level_state(level_state_key : String) -> LevelState: return new_level_state static func has_game_state() -> bool: - return false return GlobalState.has_state(STATE_NAME) static func get_game_state() -> GameState: