feat: Implement touch controls and a settings menu.
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 12 KiB |
@@ -2,21 +2,20 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://3up2su2e0lfa"
|
uid="uid://dcwdbeqla0ooi"
|
||||||
path.s3tc="res://.godot/imported/freeze_area.png-637e16813f4e334856ce1077dd0a8f60.s3tc.ctex"
|
path="res://.godot/imported/freeze_area.png-637e16813f4e334856ce1077dd0a8f60.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"imported_formats": ["s3tc_bptc"],
|
"vram_texture": false
|
||||||
"vram_texture": true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://assets/graphics/touch_control/freeze_area.png"
|
source_file="res://assets/graphics/touch_control/freeze_area.png"
|
||||||
dest_files=["res://.godot/imported/freeze_area.png-637e16813f4e334856ce1077dd0a8f60.s3tc.ctex"]
|
dest_files=["res://.godot/imported/freeze_area.png-637e16813f4e334856ce1077dd0a8f60.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
compress/mode=2
|
compress/mode=0
|
||||||
compress/high_quality=false
|
compress/high_quality=false
|
||||||
compress/lossy_quality=0.7
|
compress/lossy_quality=0.7
|
||||||
compress/uastc_level=0
|
compress/uastc_level=0
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 8.4 KiB |
@@ -19,8 +19,7 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://pwxo4lb87yi" path="res://assets/graphics/touch_control/put_tile.png" id="26_5q0nq"]
|
[ext_resource type="Texture2D" uid="uid://pwxo4lb87yi" path="res://assets/graphics/touch_control/put_tile.png" id="26_5q0nq"]
|
||||||
[ext_resource type="Texture2D" uid="uid://umw3e8nfe3vr" path="res://assets/graphics/touch_control/attack_mode.png" id="27_dgi5k"]
|
[ext_resource type="Texture2D" uid="uid://umw3e8nfe3vr" path="res://assets/graphics/touch_control/attack_mode.png" id="27_dgi5k"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cupfmb5m15kmf" path="res://assets/graphics/touch_control/wall.png" id="27_yq6so"]
|
[ext_resource type="Texture2D" uid="uid://cupfmb5m15kmf" path="res://assets/graphics/touch_control/wall.png" id="27_yq6so"]
|
||||||
[ext_resource type="Texture2D" uid="uid://3up2su2e0lfa" path="res://assets/graphics/touch_control/freeze_area.png" id="28_fv21b"]
|
[ext_resource type="Texture2D" uid="uid://dcwdbeqla0ooi" path="res://assets/graphics/touch_control/freeze_area.png" id="28_fv21b"]
|
||||||
[ext_resource type="Texture2D" uid="uid://ckhdyxnho6sjp" path="res://assets/graphics/touch_control/spawn_tile.png" id="28_j8jky"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://b2vhatfmufn3d" path="res://assets/graphics/touch_control/ghost.png" id="33_5q0nq"]
|
[ext_resource type="Texture2D" uid="uid://b2vhatfmufn3d" path="res://assets/graphics/touch_control/ghost.png" id="33_5q0nq"]
|
||||||
[ext_resource type="Texture2D" uid="uid://biun2yvglxgij" path="res://assets/graphics/touch_control/grab_tekton.png" id="36_pibwh"]
|
[ext_resource type="Texture2D" uid="uid://biun2yvglxgij" path="res://assets/graphics/touch_control/grab_tekton.png" id="36_pibwh"]
|
||||||
[ext_resource type="Script" uid="uid://86ikh0wuqk7v" path="res://scripts/ui/powerup_inventory_ui.gd" id="powerup_ui_script"]
|
[ext_resource type="Script" uid="uid://86ikh0wuqk7v" path="res://scripts/ui/powerup_inventory_ui.gd" id="powerup_ui_script"]
|
||||||
@@ -1397,6 +1396,17 @@ theme_override_font_sizes/font_size = 28
|
|||||||
text = "3:00"
|
text = "3:00"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="SettingsBtn" type="Button" parent="." unique_id=1964422444]
|
||||||
|
anchors_preset = 1
|
||||||
|
anchor_left = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_left = -78.0
|
||||||
|
offset_top = 8.0
|
||||||
|
offset_right = -30.0
|
||||||
|
offset_bottom = 56.0
|
||||||
|
grow_horizontal = 0
|
||||||
|
text = "⚙"
|
||||||
|
|
||||||
[node name="TouchControls" type="CanvasLayer" parent="." unique_id=1390485948]
|
[node name="TouchControls" type="CanvasLayer" parent="." unique_id=1390485948]
|
||||||
script = ExtResource("touch_manager")
|
script = ExtResource("touch_manager")
|
||||||
|
|
||||||
@@ -1423,27 +1433,15 @@ offset_bottom = -120.0
|
|||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
script = ExtResource("virtual_joystick")
|
script = ExtResource("virtual_joystick")
|
||||||
|
|
||||||
[node name="ActionsBtn" type="VBoxContainer" parent="TouchControls/TouchControls" unique_id=278736451]
|
[node name="PowerBarBtn" type="VBoxContainer" parent="TouchControls/TouchControls" unique_id=278736451]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 48.000004
|
offset_left = 47.858246
|
||||||
offset_top = 82.00001
|
offset_top = 98.014656
|
||||||
offset_right = 114.71878
|
offset_right = 129.85825
|
||||||
offset_bottom = 350.68915
|
offset_bottom = 265.01465
|
||||||
rotation = -0.10297442
|
rotation = -0.10297442
|
||||||
theme_override_constants/separation = 15
|
|
||||||
|
|
||||||
[node name="PutBtn" type="Button" parent="TouchControls/TouchControls/ActionsBtn" unique_id=1027790362]
|
[node name="AttackModeBtn" type="Button" parent="TouchControls/TouchControls/PowerBarBtn" unique_id=1380511463]
|
||||||
visible = false
|
|
||||||
layout_mode = 2
|
|
||||||
size_flags_horizontal = 3
|
|
||||||
size_flags_vertical = 3
|
|
||||||
focus_mode = 0
|
|
||||||
icon = ExtResource("26_5q0nq")
|
|
||||||
flat = true
|
|
||||||
icon_alignment = 1
|
|
||||||
expand_icon = true
|
|
||||||
|
|
||||||
[node name="AttackModeBtn" type="Button" parent="TouchControls/TouchControls/ActionsBtn" unique_id=1380511463]
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
@@ -1453,16 +1451,7 @@ flat = true
|
|||||||
icon_alignment = 1
|
icon_alignment = 1
|
||||||
expand_icon = true
|
expand_icon = true
|
||||||
|
|
||||||
[node name="SpawnBoostBtn" type="Button" parent="TouchControls/TouchControls/ActionsBtn" unique_id=1566173505]
|
[node name="TektonGrabBtn" type="Button" parent="TouchControls/TouchControls/PowerBarBtn" unique_id=2097928368]
|
||||||
layout_mode = 2
|
|
||||||
size_flags_horizontal = 3
|
|
||||||
size_flags_vertical = 3
|
|
||||||
icon = ExtResource("28_j8jky")
|
|
||||||
flat = true
|
|
||||||
icon_alignment = 1
|
|
||||||
expand_icon = true
|
|
||||||
|
|
||||||
[node name="TektonGrabBtn" type="Button" parent="TouchControls/TouchControls/ActionsBtn" unique_id=2097928368]
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
@@ -1471,8 +1460,15 @@ flat = true
|
|||||||
icon_alignment = 1
|
icon_alignment = 1
|
||||||
expand_icon = true
|
expand_icon = true
|
||||||
|
|
||||||
[node name="GrabBtn" type="Button" parent="TouchControls/TouchControls/ActionsBtn" unique_id=914810452]
|
[node name="InteractionBtn" type="VBoxContainer" parent="TouchControls/TouchControls" unique_id=1738242916]
|
||||||
visible = false
|
layout_mode = 0
|
||||||
|
offset_left = 134.0
|
||||||
|
offset_top = 86.999985
|
||||||
|
offset_right = 216.0
|
||||||
|
offset_bottom = 254.0
|
||||||
|
rotation = -0.10297442
|
||||||
|
|
||||||
|
[node name="GrabBtn" type="Button" parent="TouchControls/TouchControls/InteractionBtn" unique_id=914810452]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
@@ -1482,17 +1478,15 @@ flat = true
|
|||||||
icon_alignment = 1
|
icon_alignment = 1
|
||||||
expand_icon = true
|
expand_icon = true
|
||||||
|
|
||||||
[node name="SettingsBtn" type="Button" parent="TouchControls/TouchControls" unique_id=1964422444]
|
[node name="PutBtn" type="Button" parent="TouchControls/TouchControls/InteractionBtn" unique_id=1027790362]
|
||||||
layout_mode = 1
|
layout_mode = 2
|
||||||
anchors_preset = 1
|
size_flags_horizontal = 3
|
||||||
anchor_left = 1.0
|
size_flags_vertical = 3
|
||||||
anchor_right = 1.0
|
focus_mode = 0
|
||||||
offset_left = -78.0
|
icon = ExtResource("26_5q0nq")
|
||||||
offset_top = -302.0
|
flat = true
|
||||||
offset_right = -30.0
|
icon_alignment = 1
|
||||||
offset_bottom = -254.0
|
expand_icon = true
|
||||||
grow_horizontal = 0
|
|
||||||
text = "⚙"
|
|
||||||
|
|
||||||
[node name="PauseMenu" type="CanvasLayer" parent="." unique_id=181131829]
|
[node name="PauseMenu" type="CanvasLayer" parent="." unique_id=181131829]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
@@ -1701,7 +1695,7 @@ text = "[b]Basic Controls[/b]
|
|||||||
• [b]Interact:[/b] Click or tap on game elements.
|
• [b]Interact:[/b] Click or tap on game elements.
|
||||||
• [b]GRAB TILE:[/b] Spacebar (in some modes) or Click to pick up a tile.
|
• [b]GRAB TILE:[/b] Spacebar (in some modes) or Click to pick up a tile.
|
||||||
• [b]GRAB TEKTON (G):[/b] Grab a nearby Tekton to carry it.
|
• [b]GRAB TEKTON (G):[/b] Grab a nearby Tekton to carry it.
|
||||||
• [b]SPAWN TILES (E):[/b] While carrying a Tekton, spawn 5 common tiles around you.
|
• [b]SPAWN TILES (G):[/b] While carrying a Tekton, spawn 5 common tiles around you.
|
||||||
• [b]ARRANGE:[/b] Insert a carried tile into your 3x3 Player Board."
|
• [b]ARRANGE:[/b] Insert a carried tile into your 3x3 Player Board."
|
||||||
|
|
||||||
[node name="The Grid" type="MarginContainer" parent="HowToPlayPanel/Panel/VBox/TabContainer" unique_id=123456807]
|
[node name="The Grid" type="MarginContainer" parent="HowToPlayPanel/Panel/VBox/TabContainer" unique_id=123456807]
|
||||||
@@ -1739,7 +1733,7 @@ text = "[b]Tektons[/b]
|
|||||||
|
|
||||||
• [b]Dynamic Tektons:[/b] Roaming metallic entities. Grab them to gain special benefits!
|
• [b]Dynamic Tektons:[/b] Roaming metallic entities. Grab them to gain special benefits!
|
||||||
• [b]Grab & Hold (G):[/b] While holding a Tekton, you are [color=green][b]IMMUNE[/b][/color] to being knocked or staggered by others.
|
• [b]Grab & Hold (G):[/b] While holding a Tekton, you are [color=green][b]IMMUNE[/b][/color] to being knocked or staggered by others.
|
||||||
• [b]Tile Generation (E):[/b] Use your boost to force a carried Tekton to spawn 5 [b]Common Tiles[/b] instantly. The Tekton is released after spawning.
|
• [b]Tile Generation (G):[/b] Use your boost to force a carried Tekton to spawn 5 [b]Common Tiles[/b] instantly. The Tekton is released after spawning.
|
||||||
• [b]Static Tektons:[/b] Stationary sentry turrets that occupy a 3x3 space. They periodically throw tiles and obstacles around themselves. Stay alert!"
|
• [b]Static Tektons:[/b] Stationary sentry turrets that occupy a 3x3 space. They periodically throw tiles and obstacles around themselves. Stay alert!"
|
||||||
|
|
||||||
[node name="Skills" type="MarginContainer" parent="HowToPlayPanel/Panel/VBox/TabContainer" unique_id=123456811]
|
[node name="Skills" type="MarginContainer" parent="HowToPlayPanel/Panel/VBox/TabContainer" unique_id=123456811]
|
||||||
|
|||||||
@@ -455,19 +455,19 @@ custom_minimum_size = Vector2(150, 40)
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "N/A"
|
text = "N/A"
|
||||||
|
|
||||||
[node name="SpawnBoostLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000031]
|
[node name="TektonGrabLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000040]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
text = "Spawn Boost"
|
text = "Grab Tekton"
|
||||||
label_settings = SubResource("LabelSettings_heading")
|
label_settings = SubResource("LabelSettings_heading")
|
||||||
|
|
||||||
[node name="SpawnBoostBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000032]
|
[node name="TektonGrabBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000041]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(150, 40)
|
custom_minimum_size = Vector2(150, 40)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "E"
|
text = "G"
|
||||||
|
|
||||||
[node name="SpawnBoostAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000132]
|
[node name="TektonGrabAltBtn" type="Button" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/PowerBarGrid" unique_id=100000141]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(150, 40)
|
custom_minimum_size = Vector2(150, 40)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
@@ -524,20 +524,3 @@ custom_minimum_size = Vector2(150, 40)
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "N/A"
|
text = "N/A"
|
||||||
|
|
||||||
[node name="TektonGrabLabel" type="Label" parent="PanelContainer/VBoxContainer/ContentSection/TabContainer/Controls/VBox/OtherGrid" 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/OtherGrid" 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/OtherGrid" unique_id=100000141]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
custom_minimum_size = Vector2(150, 40)
|
|
||||||
layout_mode = 2
|
|
||||||
text = "N/A"
|
|
||||||
|
|||||||
@@ -92,15 +92,12 @@ func handle_unhandled_input(event):
|
|||||||
player.enter_attack_mode()
|
player.enter_attack_mode()
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
|
|
||||||
elif event.is_action_pressed("spawn_boost"):
|
|
||||||
if player.is_carrying_tekton and player.powerup_manager:
|
|
||||||
if player.powerup_manager.has_method("spawn_boost_reward"):
|
|
||||||
player.powerup_manager.spawn_boost_reward()
|
|
||||||
get_viewport().set_input_as_handled()
|
|
||||||
|
|
||||||
elif event.is_action_pressed("action_grab_tekton"):
|
elif event.is_action_pressed("action_grab_tekton"):
|
||||||
if not player.is_carrying_tekton and player.powerup_manager:
|
if player.is_carrying_tekton:
|
||||||
if player.powerup_manager.has_method("can_use_special"): # Corrected method name
|
if player.powerup_manager and player.powerup_manager.has_method("spawn_boost_reward"):
|
||||||
|
player.powerup_manager.spawn_boost_reward()
|
||||||
|
else:
|
||||||
|
if player.powerup_manager and player.powerup_manager.has_method("can_use_special"):
|
||||||
player.grab_tekton()
|
player.grab_tekton()
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
|
|
||||||
|
|||||||
@@ -55,9 +55,7 @@ var settings = {
|
|||||||
|
|
||||||
# Power Bar Controls / Special
|
# Power Bar Controls / Special
|
||||||
"attack_mode": KEY_Q,
|
"attack_mode": KEY_Q,
|
||||||
"attack_mode_alt": KEY_U,
|
"attack_mode_alt": KEY_U
|
||||||
"spawn_boost": KEY_E,
|
|
||||||
"spawn_boost_alt": KEY_I
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,8 +169,7 @@ func apply_control_settings():
|
|||||||
"put": "action_put",
|
"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"
|
||||||
"spawn_boost": "spawn_boost"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for setting_key in mapping.keys():
|
for setting_key in mapping.keys():
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ signal attack_mode_pressed
|
|||||||
|
|
||||||
# Touch control nodes
|
# Touch control nodes
|
||||||
var virtual_joystick: Control
|
var virtual_joystick: Control
|
||||||
var actions_container: Control # New container
|
var power_bar_container: Control # Renamed from actions_container
|
||||||
|
var interaction_container: Control # New container for Interaction
|
||||||
var grab_button: Button
|
var grab_button: Button
|
||||||
var put_button: Button
|
var put_button: Button
|
||||||
var attack_mode_button: Button # Renamed from special_button
|
var attack_mode_button: Button # Renamed from special_button
|
||||||
@@ -57,9 +58,14 @@ func _on_control_remapped(_action: String, _key: int):
|
|||||||
if spawn_boost_button: _ensure_shortcut_label(spawn_boost_button, "SpawnBoost")
|
if spawn_boost_button: _ensure_shortcut_label(spawn_boost_button, "SpawnBoost")
|
||||||
if tekton_grab_button: _ensure_shortcut_label(tekton_grab_button, "TektonGrab")
|
if tekton_grab_button: _ensure_shortcut_label(tekton_grab_button, "TektonGrab")
|
||||||
|
|
||||||
# Also check all direct children of actions_container just in case
|
# Also check all direct children of containers just in case
|
||||||
if actions_container:
|
if power_bar_container:
|
||||||
for child in actions_container.get_children():
|
for child in power_bar_container.get_children():
|
||||||
|
if child is Button:
|
||||||
|
var b_name = child.name.replace("Btn", "")
|
||||||
|
_ensure_shortcut_label(child, b_name)
|
||||||
|
if interaction_container:
|
||||||
|
for child in interaction_container.get_children():
|
||||||
if child is Button:
|
if child is Button:
|
||||||
var b_name = child.name.replace("Btn", "")
|
var b_name = child.name.replace("Btn", "")
|
||||||
_ensure_shortcut_label(child, b_name)
|
_ensure_shortcut_label(child, b_name)
|
||||||
@@ -141,73 +147,74 @@ func _create_touch_ui():
|
|||||||
if not virtual_joystick.direction_changed.is_connected(_on_joystick_direction):
|
if not virtual_joystick.direction_changed.is_connected(_on_joystick_direction):
|
||||||
virtual_joystick.direction_changed.connect(_on_joystick_direction)
|
virtual_joystick.direction_changed.connect(_on_joystick_direction)
|
||||||
|
|
||||||
# --- Actions Container ---
|
# --- Actions Containers ---
|
||||||
actions_container = container.get_node_or_null("ActionsBtn")
|
power_bar_container = container.get_node_or_null("PowerBarBtn")
|
||||||
if not actions_container:
|
if not power_bar_container:
|
||||||
actions_container = Control.new()
|
power_bar_container = container.get_node_or_null("ActionsBtn") # Fallback
|
||||||
actions_container.name = "ActionsBtn"
|
|
||||||
actions_container.set_anchors_preset(Control.PRESET_FULL_RECT) # Or appropriate preset
|
interaction_container = container.get_node_or_null("InteractionBtn")
|
||||||
actions_container.mouse_filter = Control.MOUSE_FILTER_PASS
|
|
||||||
container.add_child(actions_container)
|
# Create containers if missing (runtime dynamic creation)
|
||||||
|
if not power_bar_container:
|
||||||
|
power_bar_container = Control.new()
|
||||||
|
power_bar_container.name = "PowerBarBtn"
|
||||||
|
power_bar_container.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||||
|
power_bar_container.mouse_filter = Control.MOUSE_FILTER_PASS
|
||||||
|
container.add_child(power_bar_container)
|
||||||
else:
|
else:
|
||||||
print("[TouchControls] Found existing ActionsBtn container")
|
print("[TouchControls] Found existing PowerBarBtn container")
|
||||||
|
|
||||||
# Center buttons in the container instead of spreading them out
|
if not interaction_container:
|
||||||
if actions_container is BoxContainer:
|
interaction_container = Control.new()
|
||||||
actions_container.alignment = BoxContainer.ALIGNMENT_CENTER
|
interaction_container.name = "InteractionBtn"
|
||||||
|
interaction_container.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||||
|
interaction_container.mouse_filter = Control.MOUSE_FILTER_PASS
|
||||||
|
container.add_child(interaction_container)
|
||||||
|
else:
|
||||||
|
print("[TouchControls] Found existing InteractionBtn container")
|
||||||
|
|
||||||
# Create action buttons (parented to actions_container if possible, or use logic)
|
# Style/Align Containers
|
||||||
# User Request: "move those button to ActionsBtn children"
|
if power_bar_container is BoxContainer:
|
||||||
|
power_bar_container.alignment = BoxContainer.ALIGNMENT_CENTER
|
||||||
|
if interaction_container is BoxContainer:
|
||||||
|
interaction_container.alignment = BoxContainer.ALIGNMENT_CENTER
|
||||||
|
|
||||||
attack_mode_button = _find_or_create_action_button(actions_container, "AttackMode", "⚡", button_positions.attack_mode) # Renamed
|
# Create action buttons
|
||||||
# spawn_boost_button = _find_or_create_action_button(actions_container, "SpawnBoost", "🚀", button_positions.spawn_boost)
|
attack_mode_button = _find_or_create_action_button(power_bar_container, "AttackMode", "⚡", button_positions.attack_mode)
|
||||||
grab_button = _find_or_create_action_button(actions_container, "Grab", "👋", button_positions.grab)
|
tekton_grab_button = _find_or_create_action_button(power_bar_container, "TektonGrab", "👋", Vector2(-280, -80))
|
||||||
put_button = _find_or_create_action_button(actions_container, "Put", "📦", button_positions.put)
|
|
||||||
|
|
||||||
tekton_grab_button = _find_or_create_action_button(actions_container, "TektonGrab", "👋", Vector2(-280, -80))
|
|
||||||
|
|
||||||
|
grab_button = _find_or_create_action_button(interaction_container, "Grab", "👋", button_positions.grab)
|
||||||
|
put_button = _find_or_create_action_button(interaction_container, "Put", "📦", button_positions.put)
|
||||||
|
|
||||||
# Order: AttackMode, SpawnBoost, Grab, TektonGrab
|
# Order: AttackMode, SpawnBoost, Grab, TektonGrab
|
||||||
|
# Order / Icons
|
||||||
if attack_mode_button:
|
if attack_mode_button:
|
||||||
actions_container.move_child(attack_mode_button, 0)
|
|
||||||
attack_mode_button.icon = load("res://assets/graphics/touch_control/attack_mode.png")
|
attack_mode_button.icon = load("res://assets/graphics/touch_control/attack_mode.png")
|
||||||
attack_mode_button.expand_icon = true
|
attack_mode_button.expand_icon = true
|
||||||
|
|
||||||
# if spawn_boost_button:
|
|
||||||
# actions_container.move_child(spawn_boost_button, 1)
|
|
||||||
# spawn_boost_button.icon = load("res://assets/graphics/touch_control/spawn_tile.png")
|
|
||||||
# spawn_boost_button.expand_icon = true
|
|
||||||
|
|
||||||
if grab_button:
|
if grab_button:
|
||||||
actions_container.move_child(grab_button, 2)
|
|
||||||
grab_button.icon = load("res://assets/graphics/touch_control/take_tile.png")
|
grab_button.icon = load("res://assets/graphics/touch_control/take_tile.png")
|
||||||
grab_button.expand_icon = true
|
grab_button.expand_icon = true
|
||||||
|
|
||||||
if tekton_grab_button:
|
if tekton_grab_button:
|
||||||
actions_container.move_child(tekton_grab_button, 3)
|
|
||||||
tekton_grab_button.icon = load("res://assets/graphics/touch_control/grab_tekton.png")
|
tekton_grab_button.icon = load("res://assets/graphics/touch_control/grab_tekton.png")
|
||||||
tekton_grab_button.expand_icon = true
|
tekton_grab_button.expand_icon = true
|
||||||
|
|
||||||
|
|
||||||
# Hide Put Button
|
# Hide Put Button
|
||||||
if put_button:
|
if put_button:
|
||||||
put_button.visible = false
|
put_button.visible = true
|
||||||
|
|
||||||
# Create settings button (top-right corner)
|
# Use existing settings button (child of Main node)
|
||||||
settings_button = container.get_node_or_null("SettingsBtn")
|
settings_button = main_scene.get_node_or_null("SettingsBtn")
|
||||||
if not settings_button:
|
if not settings_button:
|
||||||
settings_button = Button.new()
|
# Fallback to local search just in case
|
||||||
settings_button.name = "SettingsBtn"
|
settings_button = container.get_node_or_null("SettingsBtn")
|
||||||
settings_button.text = "⚙"
|
|
||||||
settings_button.set_anchors_preset(Control.PRESET_TOP_RIGHT)
|
if settings_button:
|
||||||
settings_button.offset_left = -70
|
print("[TouchControls] Found existing SettingsBtn on main scene")
|
||||||
settings_button.offset_right = -20
|
# Ensure it's not hidden by mistake
|
||||||
settings_button.offset_top = 70
|
settings_button.visible = true
|
||||||
settings_button.offset_bottom = 120
|
|
||||||
settings_button.custom_minimum_size = Vector2(50, 50)
|
|
||||||
settings_button.mouse_filter = Control.MOUSE_FILTER_STOP
|
|
||||||
_style_button(settings_button, 0.5)
|
|
||||||
container.add_child(settings_button)
|
|
||||||
|
|
||||||
if not settings_button.pressed.is_connected(_on_settings_pressed):
|
if not settings_button.pressed.is_connected(_on_settings_pressed):
|
||||||
settings_button.pressed.connect(_on_settings_pressed)
|
settings_button.pressed.connect(_on_settings_pressed)
|
||||||
@@ -306,9 +313,8 @@ func _ensure_shortcut_label(btn: Button, button_name: String):
|
|||||||
|
|
||||||
match button_name:
|
match button_name:
|
||||||
"Grab": existing_lbl.text = SettingsManager.get_control_text("grab")
|
"Grab": existing_lbl.text = SettingsManager.get_control_text("grab")
|
||||||
"Put": existing_lbl.text = ""
|
"Put": existing_lbl.text = SettingsManager.get_control_text("put")
|
||||||
"AttackMode": existing_lbl.text = SettingsManager.get_control_text("attack_mode")
|
"AttackMode": existing_lbl.text = SettingsManager.get_control_text("attack_mode")
|
||||||
# "SpawnBoost": existing_lbl.text = SettingsManager.get_control_text("spawn_boost")
|
|
||||||
"TektonGrab": existing_lbl.text = SettingsManager.get_control_text("tekton_grab")
|
"TektonGrab": existing_lbl.text = SettingsManager.get_control_text("tekton_grab")
|
||||||
|
|
||||||
|
|
||||||
@@ -339,9 +345,8 @@ func _ensure_shortcut_label(btn: Button, button_name: String):
|
|||||||
|
|
||||||
match button_name:
|
match button_name:
|
||||||
"Grab": shortcut_lbl.text = SettingsManager.get_control_text("grab") if SettingsManager else "Space"
|
"Grab": shortcut_lbl.text = SettingsManager.get_control_text("grab") if SettingsManager else "Space"
|
||||||
"Put": shortcut_lbl.text = "" # Disabled shortcut
|
"Put": shortcut_lbl.text = SettingsManager.get_control_text("put") if SettingsManager else "R"
|
||||||
"AttackMode": shortcut_lbl.text = SettingsManager.get_control_text("attack_mode") if SettingsManager else "Q"
|
"AttackMode": shortcut_lbl.text = SettingsManager.get_control_text("attack_mode") if SettingsManager else "Q"
|
||||||
# "SpawnBoost": shortcut_lbl.text = SettingsManager.get_control_text("spawn_boost") if SettingsManager else "E"
|
|
||||||
"TektonGrab": shortcut_lbl.text = SettingsManager.get_control_text("tekton_grab") if SettingsManager else "G"
|
"TektonGrab": shortcut_lbl.text = SettingsManager.get_control_text("tekton_grab") if SettingsManager else "G"
|
||||||
|
|
||||||
|
|
||||||
@@ -495,17 +500,18 @@ func _apply_settings():
|
|||||||
virtual_joystick.visible = joystick_enabled
|
virtual_joystick.visible = joystick_enabled
|
||||||
|
|
||||||
# Apply touch buttons visibility - FORCED ON per request to "just show them"
|
# Apply touch buttons visibility - FORCED ON per request to "just show them"
|
||||||
if actions_container:
|
# Apply touch buttons visibility
|
||||||
actions_container.visible = true
|
if power_bar_container:
|
||||||
actions_container.set_anchors_preset(Control.PRESET_FULL_RECT)
|
power_bar_container.visible = true
|
||||||
actions_container.mouse_filter = Control.MOUSE_FILTER_PASS
|
if interaction_container:
|
||||||
|
interaction_container.visible = true
|
||||||
|
|
||||||
var buttons_visible = true
|
var buttons_visible = true
|
||||||
|
|
||||||
print("[TouchControls] Applying settings: ButtonsVisible=", buttons_visible)
|
print("[TouchControls] Applying settings: ButtonsVisible=", buttons_visible)
|
||||||
|
|
||||||
if grab_button:
|
if grab_button:
|
||||||
grab_button.visible = false
|
grab_button.visible = true
|
||||||
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
|
||||||
@@ -514,7 +520,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 = false # Always INTENTIONALLY HIDDEN per request
|
put_button.visible = true
|
||||||
|
|
||||||
if attack_mode_button:
|
if attack_mode_button:
|
||||||
attack_mode_button.visible = true
|
attack_mode_button.visible = true
|
||||||
@@ -617,7 +623,7 @@ func _on_tekton_carried_changed(_is_carrying: bool):
|
|||||||
# Swapping to Spawn function (Hotkey E)
|
# Swapping to Spawn function (Hotkey E)
|
||||||
tekton_grab_button.icon = load("res://assets/graphics/touch_control/spawn_tile.png")
|
tekton_grab_button.icon = load("res://assets/graphics/touch_control/spawn_tile.png")
|
||||||
if SettingsManager:
|
if SettingsManager:
|
||||||
_ensure_shortcut_label(tekton_grab_button, "SpawnBoost")
|
_ensure_shortcut_label(tekton_grab_button, "TektonGrab")
|
||||||
else:
|
else:
|
||||||
# Swapping back to Grab function (Hotkey G)
|
# Swapping back to Grab function (Hotkey G)
|
||||||
tekton_grab_button.icon = load("res://assets/graphics/touch_control/grab_tekton.png")
|
tekton_grab_button.icon = load("res://assets/graphics/touch_control/grab_tekton.png")
|
||||||
|
|||||||