can quit menus using B button
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user