From 1b006c5fce5a27b9128d5f33e9719dda9d2d1ea5 Mon Sep 17 00:00:00 2001 From: William Edwards Date: Sat, 25 Jan 2025 19:38:10 -0800 Subject: [PATCH] fix(Gamepad Settings): add mouse handling for gamepad settings button --- .../general_controller_settings_menu.gd | 39 ++++++++++++++++++- .../general_controller_settings_menu.tscn | 5 ++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/core/ui/card_ui/settings/general_controller_settings_menu.gd b/core/ui/card_ui/settings/general_controller_settings_menu.gd index 93434919..228182b0 100644 --- a/core/ui/card_ui/settings/general_controller_settings_menu.gd +++ b/core/ui/card_ui/settings/general_controller_settings_menu.gd @@ -1,5 +1,42 @@ extends Control +var input_plumber := load("res://core/systems/input/input_plumber.tres") as InputPlumberInstance +var state_machine := load("res://assets/state/state_machines/menu_state_machine.tres") as StateMachine +var state := load("res://assets/state/states/gamepad_settings.tres") as State + +@onready var gamepad_button := $%GamepadSettingsButton as CardButton + # Called when the node enters the scene tree for the first time. func _ready(): - pass + gamepad_button.gui_input.connect(_on_button_input) + + +# If the user presses the gamepad settings button with a non-gamepad input method, +# open the settings for the first detected controller. +# TODO: Add a controller select pop-up to select a gamepad to configure +func _on_button_input(event: InputEvent) -> void: + if event is InputEventMouseButton: + if (event as InputEventMouseButton).button_index != MOUSE_BUTTON_LEFT: + return + if (event as InputEventMouseButton).pressed: + return + _open_menu_default_gamepad() + return + + if event is InputEventKey: + if !event.is_action("ui_accept"): + return + if event.pressed: + return + _open_menu_default_gamepad() + + +# Push the gamepad config menu for the first detected controller. +func _open_menu_default_gamepad() -> void: + state.set_meta("dbus_path", "") + var devices := input_plumber.get_composite_devices() + if !devices.is_empty(): + var device := devices[0] + state.set_meta("dbus_path", device.dbus_path) + + state_machine.push_state(state) diff --git a/core/ui/card_ui/settings/general_controller_settings_menu.tscn b/core/ui/card_ui/settings/general_controller_settings_menu.tscn index 8530ea27..57662849 100644 --- a/core/ui/card_ui/settings/general_controller_settings_menu.tscn +++ b/core/ui/card_ui/settings/general_controller_settings_menu.tscn @@ -55,11 +55,12 @@ layout_mode = 2 [node name="FocusGroup" parent="MarginContainer/VBoxContainer" instance=ExtResource("2_fdccl")] -[node name="CardButton" parent="MarginContainer/VBoxContainer" instance=ExtResource("7_ynn8u")] +[node name="GamepadSettingsButton" parent="MarginContainer/VBoxContainer" instance=ExtResource("7_ynn8u")] +unique_name_in_owner = true layout_mode = 2 text = "Gamepad Settings" -[node name="StateUpdater" parent="MarginContainer/VBoxContainer/CardButton" instance=ExtResource("8_1egj0")] +[node name="StateUpdater" parent="MarginContainer/VBoxContainer/GamepadSettingsButton" instance=ExtResource("8_1egj0")] state_machine = ExtResource("10_ij44t") state = ExtResource("10_uoc6p") on_signal = "player_button_up"