feat: implement settings menu with video, audio, and input remapping support

This commit is contained in:
Yogi Wiguna
2026-03-30 16:19:18 +08:00
parent c5da49d872
commit 91dc34a7be
8 changed files with 557 additions and 39 deletions
+1 -5
View File
@@ -62,11 +62,7 @@ grab_item={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
] ]
} }
put_item={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null)
]
}
move_north={ move_north={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
+13 -10
View File
@@ -1616,10 +1616,10 @@ anchor_left = 1.0
anchor_top = 1.0 anchor_top = 1.0
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_left = -1246.0 offset_left = -1219.0
offset_top = -120.00006 offset_top = -209.99982
offset_right = -1246.0 offset_right = -1219.0
offset_bottom = -120.00006 offset_bottom = -209.99982
grow_horizontal = 0 grow_horizontal = 0
grow_vertical = 0 grow_vertical = 0
rotation = -0.10297442 rotation = -0.10297442
@@ -1628,8 +1628,9 @@ script = ExtResource("powerup_ui_script")
[node name="PowerUpBtn" type="Button" parent="PowerUpInventoryUI" unique_id=1549270030] [node name="PowerUpBtn" type="Button" parent="PowerUpInventoryUI" unique_id=1549270030]
layout_mode = 0 layout_mode = 0
offset_right = 74.28728 offset_top = 2.547058
offset_bottom = 78.35126 offset_right = 85.498886
offset_bottom = 83.304146
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
focus_mode = 0 focus_mode = 0
@@ -1695,10 +1696,10 @@ expand_icon = true
[node name="InteractionBtn" type="VBoxContainer" parent="TouchLayer/TouchControls" unique_id=1738242916] [node name="InteractionBtn" type="VBoxContainer" parent="TouchLayer/TouchControls" unique_id=1738242916]
layout_mode = 0 layout_mode = 0
offset_left = 139.14175 offset_left = 136.00002
offset_top = 108.42897 offset_top = 109.0
offset_right = 221.14175 offset_right = 218.00002
offset_bottom = 275.429 offset_bottom = 186.0877
rotation = -0.10297442 rotation = -0.10297442
theme_override_constants/separation = 10 theme_override_constants/separation = 10
@@ -1710,9 +1711,11 @@ focus_mode = 0
icon = ExtResource("25_qkpxi") icon = ExtResource("25_qkpxi")
flat = true flat = true
icon_alignment = 1 icon_alignment = 1
vertical_icon_alignment = 0
expand_icon = true expand_icon = true
[node name="PutBtn" type="Button" parent="TouchLayer/TouchControls/InteractionBtn" unique_id=1027790362] [node name="PutBtn" type="Button" parent="TouchLayer/TouchControls/InteractionBtn" unique_id=1027790362]
visible = false
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
-16
View File
@@ -506,21 +506,5 @@ custom_minimum_size = Vector2(150, 40)
layout_mode = 2 layout_mode = 2
text = "N/A" text = "N/A"
[node name="PutLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" unique_id=100000038]
layout_mode = 2
size_flags_horizontal = 3
text = "Put Item"
label_settings = SubResource("LabelSettings_heading")
[node name="PutBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" unique_id=100000039]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "R"
[node name="PutAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" unique_id=100000139]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "N/A"
+526
View File
@@ -0,0 +1,526 @@
[gd_scene format=3 uid="uid://b1two2tvv5prx"]
[ext_resource type="Script" uid="uid://cdege6m8u5cp" path="res://scripts/ui/settings_menu.gd" id="1_script"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bg"]
bg_color = Color(0.05, 0.05, 0.08, 0.85)
border_width_left = 2
border_width_top = 2
border_width_right = 2
border_width_bottom = 2
border_color = Color(0.2, 0.8, 1, 0.5)
corner_radius_top_left = 20
corner_radius_top_right = 20
corner_radius_bottom_right = 20
corner_radius_bottom_left = 20
shadow_color = Color(0, 0, 0, 0.5)
shadow_size = 20
[sub_resource type="LabelSettings" id="LabelSettings_title"]
font_size = 32
font_color = Color(0.2, 0.9, 1, 1)
outline_size = 8
outline_color = Color(0, 0, 0, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_tab_bg"]
content_margin_left = 20.0
content_margin_top = 20.0
content_margin_right = 20.0
content_margin_bottom = 20.0
bg_color = Color(0.1, 0.1, 0.15, 0.6)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_right = 10
corner_radius_bottom_left = 10
[sub_resource type="LabelSettings" id="LabelSettings_heading"]
font_size = 24
font_color = Color(0.9, 0.9, 0.9, 1)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_section_header"]
content_margin_left = 15.0
content_margin_top = 5.0
content_margin_right = 15.0
content_margin_bottom = 5.0
bg_color = Color(0.2, 0.5, 0.8, 0.3)
corner_radius_top_left = 5
corner_radius_top_right = 5
corner_radius_bottom_right = 5
corner_radius_bottom_left = 5
[sub_resource type="LabelSettings" id="LabelSettings_section"]
font_size = 18
font_color = Color(0.4, 0.9, 1, 1)
outline_size = 2
outline_color = Color(0, 0, 0, 1)
[node name="SettingsMenu" type="CanvasLayer" unique_id=1319114632]
layer = 100
script = ExtResource("1_script")
[node name="ColorRect" type="ColorRect" parent="." unique_id=1754757020]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.4)
[node name="PanelContainer" type="PanelContainer" parent="." unique_id=1635225045]
custom_minimum_size = Vector2(800, 600)
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -400.0
offset_top = -300.0
offset_right = 400.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_bg")
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer" unique_id=1608766484]
layout_mode = 2
theme_override_constants/separation = 20
[node name="Header" type="HBoxContainer" parent="PanelContainer/VBoxContainer" unique_id=1476625293]
custom_minimum_size = Vector2(0, 80)
layout_mode = 2
theme_override_constants/separation = 20
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer/Header" unique_id=22122987]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/margin_left = 30
[node name="Title" type="Label" parent="PanelContainer/VBoxContainer/Header/MarginContainer" unique_id=1831070364]
layout_mode = 2
text = "SYSTEM SETTINGS"
label_settings = SubResource("LabelSettings_title")
[node name="CloseButton" type="Button" parent="PanelContainer/VBoxContainer/Header" unique_id=1345773906]
custom_minimum_size = Vector2(60, 60)
layout_mode = 2
size_flags_vertical = 4
theme_override_font_sizes/font_size = 32
text = "X"
flat = true
[node name="ContentSection" type="MarginContainer" parent="PanelContainer/VBoxContainer" unique_id=1702280876]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 0
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 30
[node name="TabContainer" type="TabContainer" parent="PanelContainer/VBoxContainer/ContentSection" unique_id=1795678842]
layout_mode = 2
theme_override_constants/side_margin = 20
theme_override_styles/panel = SubResource("StyleBoxFlat_tab_bg")
current_tab = 0
[node name="Video" type="ScrollContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer" unique_id=964480166]
layout_mode = 2
metadata/_tab_index = 0
[node name="VBox" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video" unique_id=1271648419]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 15
[node name="Fullscreen" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox" unique_id=683482011]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/Fullscreen" unique_id=2085318401]
layout_mode = 2
size_flags_horizontal = 3
text = "Fullscreen Mode"
label_settings = SubResource("LabelSettings_heading")
[node name="FullscreenToggle" type="CheckButton" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/Fullscreen" unique_id=1955016407]
unique_name_in_owner = true
layout_mode = 2
[node name="VSync" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox" unique_id=1497653967]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/VSync" unique_id=76372424]
layout_mode = 2
size_flags_horizontal = 3
text = "V-Sync"
label_settings = SubResource("LabelSettings_heading")
[node name="VSyncToggle" type="CheckButton" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/VSync" unique_id=412645188]
unique_name_in_owner = true
layout_mode = 2
[node name="Resolution" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox" unique_id=100000100]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/Resolution" unique_id=100000101]
layout_mode = 2
size_flags_horizontal = 3
text = "Resolution"
label_settings = SubResource("LabelSettings_heading")
[node name="ResolutionBtn" type="OptionButton" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/Resolution" unique_id=100000102]
unique_name_in_owner = true
custom_minimum_size = Vector2(240, 40)
layout_mode = 2
[node name="MSAA" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox" unique_id=100000103]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/MSAA" unique_id=100000104]
layout_mode = 2
size_flags_horizontal = 3
text = "Anti-Aliasing (MSAA)"
label_settings = SubResource("LabelSettings_heading")
[node name="MSAABtn" type="OptionButton" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/MSAA" unique_id=100000105]
unique_name_in_owner = true
custom_minimum_size = Vector2(240, 40)
layout_mode = 2
[node name="Shadows" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox" unique_id=100000106]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/Shadows" unique_id=100000107]
layout_mode = 2
size_flags_horizontal = 3
text = "Shadow Quality"
label_settings = SubResource("LabelSettings_heading")
[node name="ShadowBtn" type="OptionButton" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/Shadows" unique_id=100000108]
unique_name_in_owner = true
custom_minimum_size = Vector2(240, 40)
layout_mode = 2
[node name="FPSCap" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox" unique_id=100000109]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/FPSCap" unique_id=100000110]
layout_mode = 2
size_flags_horizontal = 3
text = "Max FPS Cap"
label_settings = SubResource("LabelSettings_heading")
[node name="FPSCapBtn" type="OptionButton" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Video/VBox/FPSCap" unique_id=100000111]
unique_name_in_owner = true
custom_minimum_size = Vector2(240, 40)
layout_mode = 2
[node name="Audio" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer" unique_id=1585166620]
visible = false
layout_mode = 2
theme_override_constants/separation = 20
metadata/_tab_index = 1
[node name="Master" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio" unique_id=2083739941]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio/Master" unique_id=526445980]
layout_mode = 2
text = "Master Volume"
label_settings = SubResource("LabelSettings_heading")
[node name="MasterSlider" type="HSlider" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio/Master" unique_id=1787962533]
unique_name_in_owner = true
layout_mode = 2
max_value = 1.0
step = 0.05
value = 0.8
[node name="Music" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio" unique_id=81064625]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio/Music" unique_id=1985407106]
layout_mode = 2
text = "Music Volume"
label_settings = SubResource("LabelSettings_heading")
[node name="MusicSlider" type="HSlider" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio/Music" unique_id=750703557]
unique_name_in_owner = true
layout_mode = 2
max_value = 1.0
step = 0.05
value = 0.7
[node name="SFX" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio" unique_id=1147135370]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio/SFX" unique_id=1539898557]
layout_mode = 2
text = "SFX Volume"
label_settings = SubResource("LabelSettings_heading")
[node name="SFXSlider" type="HSlider" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Audio/SFX" unique_id=1301108449]
unique_name_in_owner = true
layout_mode = 2
max_value = 1.0
step = 0.05
value = 0.9
[node name="Controls" type="ScrollContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer" unique_id=1553036843]
visible = false
layout_mode = 2
metadata/_tab_index = 2
[node name="VBox" type="VBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls" unique_id=1592525164]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 15
[node name="ControllerToggleContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000001]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/ControllerToggleContainer" unique_id=100000002]
layout_mode = 2
size_flags_horizontal = 3
text = "ENABLE CONTROLLER (JOYSTICK)"
label_settings = SubResource("LabelSettings_heading")
[node name="UseControllerBtn" type="CheckButton" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/ControllerToggleContainer" unique_id=100000003]
unique_name_in_owner = true
layout_mode = 2
[node name="MovementSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000004]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_section_header")
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MovementSection" unique_id=100000005]
layout_mode = 2
text = "MOVEMENT CONTROL"
label_settings = SubResource("LabelSettings_section")
[node name="MoveGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000006]
layout_mode = 2
theme_override_constants/h_separation = 20
theme_override_constants/v_separation = 10
columns = 3
[node name="ColH1" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid"]
layout_mode = 2
text = "Action"
label_settings = SubResource("LabelSettings_section")
[node name="ColH2" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid"]
layout_mode = 2
text = "Primary"
label_settings = SubResource("LabelSettings_section")
[node name="ColH3" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid"]
layout_mode = 2
text = "Secondary"
label_settings = SubResource("LabelSettings_section")
[node name="UpLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000007]
layout_mode = 2
size_flags_horizontal = 3
text = "Move Up"
label_settings = SubResource("LabelSettings_heading")
[node name="MoveUpBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000008]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "W"
[node name="MoveUpAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000108]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "Up"
[node name="DownLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000009]
layout_mode = 2
size_flags_horizontal = 3
text = "Move Down"
label_settings = SubResource("LabelSettings_heading")
[node name="MoveDownBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000010]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "S"
[node name="MoveDownAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000110]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "Down"
[node name="LeftLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000011]
layout_mode = 2
size_flags_horizontal = 3
text = "Move Left"
label_settings = SubResource("LabelSettings_heading")
[node name="MoveLeftBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000012]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "A"
[node name="MoveLeftAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000112]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "Left"
[node name="RightLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000013]
layout_mode = 2
size_flags_horizontal = 3
text = "Move Right"
label_settings = SubResource("LabelSettings_heading")
[node name="MoveRightBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000014]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "D"
[node name="MoveRightAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/MoveGrid" unique_id=100000114]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "Right"
[node name="PowerUpSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000015]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_section_header")
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerUpSection" unique_id=100000016]
layout_mode = 2
text = "POWER UP CONTROL"
label_settings = SubResource("LabelSettings_section")
[node name="PowerUpGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000017]
layout_mode = 2
theme_override_constants/h_separation = 20
theme_override_constants/v_separation = 10
columns = 3
[node name="UsePowerupLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerUpGrid" unique_id=100000118]
layout_mode = 2
size_flags_horizontal = 3
text = "Activate PowerUp (Universal)"
label_settings = SubResource("LabelSettings_heading")
[node name="UsePowerupBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerUpGrid" unique_id=100000119]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "F"
[node name="UsePowerupAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerUpGrid" unique_id=100000120]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "N/A"
[node name="PowerBarSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000026]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_section_header")
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarSection" unique_id=100000027]
layout_mode = 2
text = "POWER BAR CONTROL"
label_settings = SubResource("LabelSettings_section")
[node name="PowerBarGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000028]
layout_mode = 2
theme_override_constants/h_separation = 20
theme_override_constants/v_separation = 10
columns = 3
[node name="AttackLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000029]
layout_mode = 2
size_flags_horizontal = 3
text = "Attack Mode"
label_settings = SubResource("LabelSettings_heading")
[node name="AttackModeBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000030]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "Q"
[node name="AttackModeAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000130]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "N/A"
[node name="TektonGrabLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000040]
layout_mode = 2
size_flags_horizontal = 3
text = "Grab Tekton"
label_settings = SubResource("LabelSettings_heading")
[node name="TektonGrabBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000041]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "G"
[node name="TektonGrabAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000141]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "N/A"
[node name="OtherSection" type="PanelContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000033]
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_section_header")
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherSection" unique_id=100000034]
layout_mode = 2
text = "INTERACTION CONTROL"
label_settings = SubResource("LabelSettings_section")
[node name="OtherGrid" type="GridContainer" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox" unique_id=100000035]
layout_mode = 2
theme_override_constants/h_separation = 20
theme_override_constants/v_separation = 10
columns = 3
[node name="GrabLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" unique_id=100000036]
layout_mode = 2
size_flags_horizontal = 3
text = "Grab Item"
label_settings = SubResource("LabelSettings_heading")
[node name="GrabBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" unique_id=100000037]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "Space"
[node name="GrabAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" unique_id=100000137]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "N/A"
visible = false
layout_mode = 2
size_flags_horizontal = 3
text = "Put Item"
label_settings = SubResource("LabelSettings_heading")
unique_name_in_owner = true
visible = false
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "R"
unique_name_in_owner = true
visible = false
custom_minimum_size = Vector2(150, 40)
layout_mode = 2
text = "N/A"
-2
View File
@@ -48,8 +48,6 @@ func _process(delta):
# 3. Action inputs (momentary) # 3. Action inputs (momentary)
if Input.is_action_just_pressed("action_grab"): if Input.is_action_just_pressed("action_grab"):
player.grab_item(player.current_position) player.grab_item(player.current_position)
elif Input.is_action_just_pressed("action_put"):
player.auto_put_item()
if move_vec != Vector2i.ZERO: if move_vec != Vector2i.ZERO:
var target_position = player.current_position + move_vec var target_position = player.current_position + move_vec
+8 -3
View File
@@ -44,8 +44,6 @@ var settings = {
# Actions # Actions
"grab": KEY_SPACE, "grab": KEY_SPACE,
"grab_alt": KEY_J, "grab_alt": KEY_J,
"put": KEY_R,
"put_alt": KEY_K,
"tekton_grab": KEY_G, "tekton_grab": KEY_G,
"tekton_grab_alt": KEY_L, "tekton_grab_alt": KEY_L,
@@ -78,6 +76,14 @@ func load_settings():
else: else:
print("[Settings] Using defaults.") print("[Settings] Using defaults.")
# Remove deprecated keys that may persist in old saved configs
var deprecated_keys = ["put", "put_alt"]
for k in deprecated_keys:
if settings.controls.has(k):
settings.controls.erase(k)
print("[Settings] Removed deprecated control: ", k)
func save_settings(): func save_settings():
var config = ConfigFile.new() var config = ConfigFile.new()
for section in settings.keys(): for section in settings.keys():
@@ -166,7 +172,6 @@ func apply_control_settings():
"move_left": "move_west", "move_left": "move_west",
"move_right": "move_east", "move_right": "move_east",
"grab": "action_grab", "grab": "action_grab",
"put": "action_put",
"use_powerup": "use_powerup", "use_powerup": "use_powerup",
"tekton_grab": "action_grab_tekton", "tekton_grab": "action_grab_tekton",
"attack_mode": "action_knock_tekton" "attack_mode": "action_knock_tekton"
+3 -2
View File
@@ -189,7 +189,7 @@ func _create_touch_ui():
# Hide Put Button # Hide Put Button
if put_button: if put_button:
put_button.visible = true put_button.visible = false
# SettingsBtn signal is handled by main.gd (_toggle_pause_menu). # SettingsBtn signal is handled by main.gd (_toggle_pause_menu).
# We only grab the reference here in case touch_controls needs it in future, # We only grab the reference here in case touch_controls needs it in future,
@@ -494,6 +494,7 @@ func _apply_settings():
if grab_button: if grab_button:
grab_button.visible = true grab_button.visible = true
grab_button.vertical_icon_alignment = VERTICAL_ALIGNMENT_TOP
grab_button.scale = Vector2(button_scale, button_scale) grab_button.scale = Vector2(button_scale, button_scale)
grab_button.set_anchors_preset(Control.PRESET_BOTTOM_RIGHT) grab_button.set_anchors_preset(Control.PRESET_BOTTOM_RIGHT)
grab_button.offset_left = button_positions.grab.x grab_button.offset_left = button_positions.grab.x
@@ -502,7 +503,7 @@ func _apply_settings():
grab_button.offset_bottom = button_positions.grab.y + button_size grab_button.offset_bottom = button_positions.grab.y + button_size
if put_button: if put_button:
put_button.visible = true put_button.visible = false
if attack_mode_button: if attack_mode_button:
attack_mode_button.visible = true attack_mode_button.visible = true
+6 -1
View File
@@ -23,6 +23,9 @@ extends CanvasLayer
@onready var SettingsManager = get_node_or_null("/root/SettingsManager") @onready var SettingsManager = get_node_or_null("/root/SettingsManager")
var listening_action: String = "" # Set when waiting for a keypress var listening_action: String = "" # Set when waiting for a keypress
# Keys removed from the game - skip them even if stale user config has them
const DEPRECATED_ACTIONS: Array = ["put", "put_alt"]
func _ready(): func _ready():
# Theme inheritance is broken by CanvasLayer root, no need for theme = null # Theme inheritance is broken by CanvasLayer root, no need for theme = null
_load_ui_values() _load_ui_values()
@@ -107,7 +110,7 @@ func _connect_signals():
# Connect remapping buttons # Connect remapping buttons
for action_name in SettingsManager.settings.controls.keys(): for action_name in SettingsManager.settings.controls.keys():
if action_name == "use_controller": if action_name == "use_controller" or action_name in DEPRECATED_ACTIONS:
continue continue
# Check Primary Button # Check Primary Button
@@ -197,6 +200,8 @@ func _input(event):
func _update_all_key_labels(): func _update_all_key_labels():
for action_name in SettingsManager.settings.controls.keys(): for action_name in SettingsManager.settings.controls.keys():
if action_name in DEPRECATED_ACTIONS:
continue
_update_key_label(action_name) _update_key_label(action_name)
func _update_key_label(action_name: String): func _update_key_label(action_name: String):