update, fix
This commit is contained in:
+55
-41
@@ -405,19 +405,29 @@ func replace_bot_with_player(player_id):
|
||||
var bot_id = bots[0]
|
||||
var bot_node = get_node_or_null(str(bot_id))
|
||||
if bot_node:
|
||||
# Transfer bot's goals to new player
|
||||
# Get bot's state
|
||||
var goals = bot_node.goals
|
||||
var playerboard = bot_node.playerboard.duplicate()
|
||||
var current_pos = bot_node.current_position
|
||||
|
||||
# Transfer state to new player
|
||||
var player_node = get_node_or_null(str(player_id))
|
||||
if player_node:
|
||||
player_node.goals = goals
|
||||
player_node.playerboard = playerboard.duplicate() # Make sure to duplicate
|
||||
player_node.current_position = current_pos
|
||||
|
||||
# Sync state
|
||||
rpc("sync_player_goals", player_id, goals)
|
||||
|
||||
# Now remove the bot
|
||||
bots.pop_front()
|
||||
players.erase(bot_id)
|
||||
players.append(player_id)
|
||||
rpc("remove_bot", bot_id)
|
||||
rpc("sync_players", players)
|
||||
rpc("sync_playerboard", player_id, playerboard)
|
||||
|
||||
# Remove bot but keep board structure intact
|
||||
bots.pop_front()
|
||||
players.erase(bot_id)
|
||||
players.append(player_id)
|
||||
rpc("remove_bot_keep_board", bot_id)
|
||||
rpc("sync_players", players)
|
||||
|
||||
|
||||
@rpc("call_local")
|
||||
func remove_bot(bot_id):
|
||||
@@ -522,43 +532,47 @@ func update_all_players_boards():
|
||||
if not game_started:
|
||||
return
|
||||
|
||||
var all_players = get_tree().get_nodes_in_group("Players")
|
||||
var local_id = multiplayer.get_unique_id()
|
||||
var all_players = get_tree().get_nodes_in_group("Players")
|
||||
var all_player_boards = $AllPlayerBoards
|
||||
|
||||
# Sort players by relative position to local player
|
||||
all_players.sort_custom(func(a, b):
|
||||
var a_id = int(String(a.name))
|
||||
var b_id = int(String(b.name))
|
||||
|
||||
# Calculate relative positions
|
||||
var a_rel = (a_id - local_id + max_players) % max_players
|
||||
var b_rel = (b_id - local_id + max_players) % max_players
|
||||
return a_rel < b_rel
|
||||
)
|
||||
# Store current active tab
|
||||
var current_tab = all_player_boards.current_tab
|
||||
|
||||
# Update each player's board in AllPlayerBoards
|
||||
for i in range(min(all_players.size() - 1, 3)): # Skip local player, max 3 other players
|
||||
var player = all_players[i + 1] # +1 to skip local player
|
||||
var board = $AllPlayerBoards.get_child(i) # "2", "3", "4"
|
||||
var board_ui = board.get_node("PlayerboardUI")
|
||||
|
||||
# Update each slot
|
||||
# Board 1 should show host (server)
|
||||
var host_player = null
|
||||
# Find host player (ID 1)
|
||||
for player in all_players:
|
||||
if int(String(player.name)) == 1:
|
||||
host_player = player
|
||||
break
|
||||
|
||||
# Update host board
|
||||
var host_board = all_player_boards.get_node("1")
|
||||
if host_player and host_board and host_board.has_node("PlayerboardUI"):
|
||||
host_board.visible = true
|
||||
var board_ui = host_board.get_node("PlayerboardUI")
|
||||
for slot_idx in range(25):
|
||||
var slot = board_ui.get_node("Slot%d" % (slot_idx + 1))
|
||||
var value = player.playerboard[slot_idx]
|
||||
|
||||
# Hide all tiles first
|
||||
slot.get_node("TileHeart").hide()
|
||||
slot.get_node("TileDiamond").hide()
|
||||
slot.get_node("TileStar").hide()
|
||||
slot.get_node("TileCoin").hide()
|
||||
|
||||
# Show correct tile based on value
|
||||
match value:
|
||||
7: slot.get_node("TileHeart").show()
|
||||
8: slot.get_node("TileDiamond").show()
|
||||
9: slot.get_node("TileStar").show()
|
||||
10: slot.get_node("TileCoin").show()
|
||||
update_board_slot(board_ui, slot_idx, host_player.playerboard[slot_idx])
|
||||
|
||||
# Sort remaining players by ID for boards 2-4
|
||||
var other_players = all_players.filter(func(p): return int(String(p.name)) != 1)
|
||||
other_players.sort_custom(func(a, b): return int(String(a.name)) < int(String(b.name)))
|
||||
|
||||
# Update boards 2-4 with remaining players
|
||||
for i in range(min(other_players.size(), 3)):
|
||||
var board_num = i + 2 # boards 2,3,4
|
||||
var player = other_players[i]
|
||||
var board = all_player_boards.get_node(str(board_num))
|
||||
|
||||
if board and board.has_node("PlayerboardUI"):
|
||||
board.visible = true
|
||||
var board_ui = board.get_node("PlayerboardUI")
|
||||
for slot_idx in range(25):
|
||||
update_board_slot(board_ui, slot_idx, player.playerboard[slot_idx])
|
||||
|
||||
# Restore previous active tab
|
||||
all_player_boards.current_tab = current_tab
|
||||
|
||||
@rpc("any_peer", "call_local")
|
||||
func sync_playerboard(player_id: int, new_playerboard: Array):
|
||||
|
||||
Reference in New Issue
Block a user