feat: Implement the initial main game scene, including GridMap, comprehensive UI, and mobile touch controls.

This commit is contained in:
Yogi Wiguna
2026-02-10 11:26:28 +08:00
parent 65d18d8d96
commit 2c1f6746d4
4 changed files with 43 additions and 9 deletions
+9
View File
@@ -680,6 +680,15 @@ func add_player_character(peer_id: int, is_bot: bool = false):
GameStateManager.add_player(peer_id) GameStateManager.add_player(peer_id)
# Try to set name from LobbyManager data if available
var lobby_players = LobbyManager.get_players()
for p_data in lobby_players:
if p_data.get("id") == peer_id:
var p_name = p_data.get("name", "Player")
player_character.display_name = p_name
print("[Main] Set player %d name to %s from Lobby data" % [peer_id, p_name])
break
if peer_id == multiplayer.get_unique_id(): if peer_id == multiplayer.get_unique_id():
GameStateManager.local_player_character = player_character GameStateManager.local_player_character = player_character
ui_manager.set_local_player(player_character) ui_manager.set_local_player(player_character)
+23 -9
View File
@@ -1028,23 +1028,37 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
texture = ExtResource("9_6gcb6") texture = ExtResource("9_6gcb6")
[node name="PlayerboardPanel2" type="PanelContainer" parent="." unique_id=1458381676] [node name="PlayeBoardPanelName" type="PanelContainer" parent="." unique_id=1458381676]
material = SubResource("ShaderMaterial_j8jky") material = SubResource("ShaderMaterial_j8jky")
offset_left = 22.0 offset_left = 44.0
offset_top = 116.559875 offset_top = 113.710526
offset_right = 241.46997 offset_right = 216.29385
offset_bottom = 156.22003 offset_bottom = 153.37068
rotation = -0.10297442 rotation = -0.10297442
theme_override_styles/panel = SubResource("StyleBoxFlat_playerboard") theme_override_styles/panel = SubResource("StyleBoxFlat_playerboard")
[node name="PlayerName" type="Label" parent="." unique_id=254337877]
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 50.718987
offset_top = -244.58023
offset_right = 133.719
offset_bottom = -208.58023
grow_vertical = 2
rotation = -0.10297442
theme_override_fonts/font = ExtResource("13_j8jky")
theme_override_font_sizes/font_size = 32
text = "Guest"
[node name="PlayerBoardLabel" type="Label" parent="." unique_id=341385584] [node name="PlayerBoardLabel" type="Label" parent="." unique_id=341385584]
anchors_preset = 4 anchors_preset = 4
anchor_top = 0.5 anchor_top = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.5
offset_left = 31.000004 offset_left = 170.71896
offset_top = -243.44012 offset_top = -258.02036
offset_right = 71.0 offset_right = 210.71896
offset_bottom = -207.44012 offset_bottom = -222.02036
grow_vertical = 2 grow_vertical = 2
rotation = -0.10297442 rotation = -0.10297442
theme_override_fonts/font = ExtResource("13_j8jky") theme_override_fonts/font = ExtResource("13_j8jky")
+2
View File
@@ -161,6 +161,8 @@ func _ready():
# Look up player's display name from LobbyManager # Look up player's display name from LobbyManager
var my_id = get_multiplayer_authority() var my_id = get_multiplayer_authority()
print("[Player] _ready for %s (Auth: %s). Current display_name: '%s'" % [name, my_id, display_name])
if is_bot or is_in_group("Bots"): if is_bot or is_in_group("Bots"):
# Bots get a unique name based on their Node Name (Bot ID) # Bots get a unique name based on their Node Name (Bot ID)
var bot_id = name.to_int() var bot_id = name.to_int()
+9
View File
@@ -28,6 +28,7 @@ var action_menu_instance
var powerup_inventory_ui var powerup_inventory_ui
var timer_label: Label var timer_label: Label
var playerboard_label: Label # Shows (xN) goal completions var playerboard_label: Label # Shows (xN) goal completions
var player_name_label: Label # Shows player name on main UI
var local_player_character var local_player_character
var _previous_playerboard_state: Array = [] var _previous_playerboard_state: Array = []
@@ -59,6 +60,9 @@ func initialize(player_node):
arrange_button = player_node.get_node("ActionMenu/ActionButtonContainer/ArrangeButton") arrange_button = player_node.get_node("ActionMenu/ActionButtonContainer/ArrangeButton")
playerboard_ui = player_node.get_node("PlayerboardUI") playerboard_ui = player_node.get_node("PlayerboardUI")
# Connect PlayerName label (Level/XP/Name UI)
player_name_label = player_node.get_node_or_null("PlayerName")
# ... (skipping unchanged functions) ... # ... (skipping unchanged functions) ...
func set_local_player(player): func set_local_player(player):
@@ -70,6 +74,11 @@ func set_local_player(player):
# Connect to powerup signals with deferred call (manager needs time to initialize) # Connect to powerup signals with deferred call (manager needs time to initialize)
_connect_powerup_manager_deferred(player) _connect_powerup_manager_deferred(player)
# Update Player Name Label
if player_name_label:
player_name_label.text = player.display_name
print("[UIManager] Updated PlayerName label to: ", player.display_name)
func setup_action_buttons(action_state_callback): func setup_action_buttons(action_state_callback):
move_button.pressed.connect(func(): action_state_callback.call(ActionState.MOVING)) move_button.pressed.connect(func(): action_state_callback.call(ActionState.MOVING))
grab_button.pressed.connect(func(): action_state_callback.call(ActionState.GRABBING)) grab_button.pressed.connect(func(): action_state_callback.call(ActionState.GRABBING))