feat: Implement the "Stop N Go" arena with new assets, scenes, and associated game logic and UI.

This commit is contained in:
Yogi Wiguna
2026-03-26 15:13:24 +08:00
parent ebc1c9868a
commit 18e0e8aafd
150 changed files with 7726 additions and 10357 deletions
+11 -11
View File
@@ -36,10 +36,10 @@ var button_positions: Dictionary = {
var button_scale: float = 1.0
# Reference to main scene and player
var main_scene: Node3D
var local_player: Node3D
var main_scene: Node
var local_player: Node
func initialize(p_main: Node3D):
func initialize(p_main: Node):
main_scene = p_main
_create_touch_ui()
_load_settings()
@@ -70,7 +70,7 @@ func _on_control_remapped(_action: String, _key: int):
var b_name = child.name.replace("Btn", "")
_ensure_shortcut_label(child, b_name)
func set_player(p_player: Node3D):
func set_player(p_player: Node):
local_player = p_player
# Connect to Tekton status updates
@@ -191,19 +191,19 @@ func _create_touch_ui():
if put_button:
put_button.visible = true
# Use existing settings button (child of Main node)
settings_button = main_scene.get_node_or_null("SettingsBtn")
# SettingsBtn signal is handled by main.gd (_toggle_pause_menu).
# We only grab the reference here in case touch_controls needs it in future,
# but we do NOT connect a second handler to avoid double-toggle.
settings_button = main_scene.get_node_or_null("TopMenuUI/SettingsBtn")
if not settings_button:
settings_button = main_scene.get_node_or_null("SettingsBtn")
if not settings_button:
# Fallback to local search just in case
settings_button = container.get_node_or_null("SettingsBtn")
if settings_button:
print("[TouchControls] Found existing SettingsBtn on main scene")
# Ensure it's not hidden by mistake
settings_button.visible = true
if not settings_button.pressed.is_connected(_on_settings_pressed):
settings_button.pressed.connect(_on_settings_pressed)
# Note: do NOT connect pressed here — main.gd already connects _toggle_pause_menu
# Always visible now - controlled by settings toggle
# Can be hidden via settings if user doesn't want touch controls on desktop
+9 -4
View File
@@ -37,8 +37,10 @@ func initialize(player_node):
if not playerboard_ui:
playerboard_ui = player_node.get_node_or_null("PlayerboardUI")
# Connect PlayerName label (Level/XP/Name UI)
player_name_label = player_node.get_node_or_null("PlayerName")
# Connect PlayerName label — now lives under PlayerBoardUI
player_name_label = player_node.get_node_or_null("PlayerBoardUI/PlayerName")
if not player_name_label:
player_name_label = player_node.get_node_or_null("PlayerName")
func set_local_player(player):
@@ -380,10 +382,13 @@ func setup_timer_labels(main_node):
suffix_label.add_theme_color_override("font_color", Color(0.7, 0.7, 0.7))
func setup_playerboard_label(main_node):
var lbl = main_node.get_node_or_null("PlayerBoardLabel")
# PlayerBoardLabel now lives under PlayerBoardUI
var lbl = main_node.get_node_or_null("PlayerBoardUI/PlayerBoardLabel")
if not lbl:
lbl = main_node.get_node_or_null("PlayerBoardLabel")
if lbl:
playerboard_label = lbl
playerboard_label.text = "x0" # Start at x0
playerboard_label.text = "x0"
print("[UIManager] Found PlayerBoardLabel")
else:
print("[UIManager] PlayerBoardLabel not found")