you can now bind UI / Menu options to keys in the settings

This commit is contained in:
JHDev2006
2025-09-27 18:38:03 +01:00
parent 7728ccea7b
commit ec803a64a6
11 changed files with 159 additions and 82 deletions

View File

@@ -39,7 +39,7 @@ script/source = "extends Node
var input_nodes := []
var actions := [\"jump\", \"run\", \"action\", \"move_left\", \"move_right\", \"move_up\", \"move_down\"]
var actions := [\"jump\", \"run\", \"action\", \"move_left\", \"move_right\", \"move_up\", \"move_down\", \"ui_accept\", \"ui_back\"]
@export_enum(\"Keyboard\", \"Controller\") var type := 0
@@ -53,33 +53,45 @@ func get_input_nodes() -> void:
if i is SelectableInputOption:
input_nodes.append(i)
func _process(_delta: float) -> void:
if Input.is_action_just_pressed(\"ui_reset_keybindings\"):
InputMap.load_from_project_settings()
save_inputs()
Settings.save_settings()
load_inputs()
func load_inputs() -> void:
for i in input_nodes:
var action = i.action_name
var value = Settings.file[[\"keyboard\", \"controller\"][type]].get(action, null)
var event: InputEvent = null
if value == null:
continue
if type == 0:
event = InputEventKey.new()
event.keycode = OS.find_keycode_from_string(value)
elif type == 1:
if value is String:
var array = value.split(\",\")
event = InputEventJoypadMotion.new()
event.axis = int(array[0])
event.axis_value = int(array[1])
elif value is int:
event = InputEventJoypadButton.new()
event.button_index = value
i.map_event_to_action(event)
for action_name in i.action_names:
var action = action_name
var value = Settings.file[[\"keyboard\", \"controller\"][type]].get(action, null)
var event: InputEvent = null
if value == null:
continue
if type == 0:
event = InputEventKey.new()
event.keycode = OS.find_keycode_from_string(value)
elif type == 1:
if value is String:
var array = value.split(\",\")
event = InputEventJoypadMotion.new()
event.axis = int(array[0])
event.axis_value = int(array[1])
elif value is int:
event = InputEventJoypadButton.new()
event.button_index = value
i.map_event_to_action(event)
func update_starting_values() -> void:
load_inputs()
func save_inputs() -> void:
for i in actions:
var event = InputMap.action_get_events(i + \"_0\")[type]
var event = null
if i.contains(\"ui\"):
event = InputMap.action_get_events(i)[type]
else:
event = InputMap.action_get_events(i + \"_0\")[type]
var rep
if event is InputEventKey:
rep = OS.get_keycode_string(event.keycode)
@@ -87,6 +99,8 @@ func save_inputs() -> void:
rep = event.button_index
elif event is InputEventJoypadMotion:
rep = str(event.axis) + \",\" + str(event.axis_value)
else:
pass
Settings.file[[\"keyboard\", \"controller\"][type]][i] = rep
"
@@ -668,12 +682,12 @@ uppercase = true
script = ExtResource("10_2qqpf")
[node name="KeyboardControls" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer" node_paths=PackedStringArray("options")]
visible = false
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = -4
script = ExtResource("4_avtty")
category_name = "SETTINGS_KEYBOARD"
options = [NodePath("Jump"), NodePath("Run"), NodePath("Action"), NodePath("Left"), NodePath("Right"), NodePath("Up"), NodePath("Down")]
options = [NodePath("Jump"), NodePath("Run"), NodePath("Action"), NodePath("Left"), NodePath("Right"), NodePath("Up"), NodePath("Down"), NodePath("Accept"), NodePath("Back")]
[node name="Control" type="Control" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls"]
custom_minimum_size = Vector2(0, 4)
@@ -681,49 +695,67 @@ layout_mode = 2
[node name="Jump" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_name = "jump"
action_names = ["jump"]
title = "ACTION_JUMP"
[node name="Run" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_name = "run"
action_names = ["run"]
title = "ACTION_RUN"
[node name="Action" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_name = "action"
action_names = ["action"]
title = "ACTION_ACTION"
[node name="Left" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_name = "move_left"
action_names = ["move_left", "ui_left"]
title = "ACTION_LEFT"
[node name="Right" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_name = "move_right"
action_names = ["move_right", "ui_right"]
title = "ACTION_RIGHT"
[node name="Up" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_name = "move_up"
action_names = ["move_up", "ui_up"]
title = "ACTION_UP"
[node name="Down" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_name = "move_down"
action_names = ["move_down", "ui_down"]
title = "ACTION_DOWN"
[node name="Accept" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_names = ["ui_accept"]
title = "ACCEPT"
[node name="Back" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
action_names = ["ui_back"]
title = "BACK"
[node name="InputMapSaving" type="Node" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls" groups=["Options"]]
process_mode = 3
script = SubResource("GDScript_ksnto")
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/KeyboardControls"]
layout_mode = 2
size_flags_vertical = 10
text = "PRESS F5 TO RESET BINDINGS."
uppercase = true
[node name="Controller" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer" node_paths=PackedStringArray("options")]
visible = false
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = -4
script = ExtResource("4_avtty")
category_name = "SETTINGS_CONTROLLER"
options = [NodePath("Jump"), NodePath("Run"), NodePath("Action"), NodePath("Left"), NodePath("Right"), NodePath("Up"), NodePath("Down")]
options = [NodePath("Jump"), NodePath("Run"), NodePath("Action"), NodePath("Left"), NodePath("Right"), NodePath("Up"), NodePath("Down"), NodePath("Accept"), NodePath("Back")]
[node name="Control" type="Control" parent="PanelContainer/MarginContainer/VBoxContainer/Controller"]
custom_minimum_size = Vector2(0, 4)
@@ -732,57 +764,78 @@ layout_mode = 2
[node name="Jump" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_name = "jump"
action_names = ["jump"]
title = "ACTION_JUMP"
type = 1
[node name="Run" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_name = "run"
action_names = ["run"]
title = "ACTION_RUN"
type = 1
[node name="Action" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_name = "action"
action_names = ["action"]
title = "ACTION_ACTION"
type = 1
[node name="Left" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_name = "move_left"
action_names = ["move_left", "ui_left"]
title = "ACTION_LEFT"
type = 1
[node name="Right" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_name = "move_right"
action_names = ["move_right", "ui_right"]
title = "ACTION_RIGHT"
type = 1
[node name="Up" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_name = "move_up"
action_names = ["move_up", "ui_up"]
title = "ACTION_UP"
type = 1
[node name="Down" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_name = "move_down"
action_names = ["move_down", "ui_down"]
title = "ACTION_DOWN"
type = 1
[node name="Accept" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_names = ["ui_accept"]
title = "ACCEPT"
type = 1
[node name="Back" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"] instance=ExtResource("9_ksnto")]
layout_mode = 2
settings_category = "controller"
action_names = ["ui_back"]
title = "BACK"
type = 1
[node name="InputMapSaving" type="Node" parent="PanelContainer/MarginContainer/VBoxContainer/Controller" groups=["Options"]]
script = SubResource("GDScript_ksnto")
type = 1
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/Controller"]
layout_mode = 2
size_flags_vertical = 10
text = "PRESS F5 TO RESET BINDINGS."
uppercase = true
[node name="Data" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer" node_paths=PackedStringArray("options")]
visible = false
layout_mode = 2
theme_override_constants/separation = -4
script = ExtResource("4_avtty")