overhaul bot
This commit is contained in:
@@ -5,7 +5,7 @@ extends Node
|
||||
signal game_started()
|
||||
signal game_state_changed()
|
||||
|
||||
@export var enable_bots: bool = false
|
||||
@export var enable_bots: bool = true
|
||||
@export var max_players: int = 4
|
||||
|
||||
var players: Array = []
|
||||
|
||||
@@ -140,7 +140,8 @@ func _initialize_player_scores():
|
||||
"""Initialize scores for all connected players to 0."""
|
||||
var all_players = get_tree().get_nodes_in_group("Players")
|
||||
for player in all_players:
|
||||
var peer_id = player.get_multiplayer_authority()
|
||||
# Use name.to_int() for ID because bots share authority 1 but have unique node names
|
||||
var peer_id = player.name.to_int()
|
||||
if not player_scores.has(peer_id):
|
||||
player_scores[peer_id] = 0
|
||||
_update_leaderboard()
|
||||
@@ -186,7 +187,8 @@ func on_goal_completed(player: Node, time_remaining: float):
|
||||
if not multiplayer.is_server():
|
||||
return
|
||||
|
||||
var peer_id = player.get_multiplayer_authority()
|
||||
# Use name.to_int() for ID because bots share authority 1
|
||||
var peer_id = player.name.to_int()
|
||||
|
||||
# Calculate score: base + time bonus
|
||||
var time_bonus = int(time_remaining * TIME_BONUS_MULTIPLIER)
|
||||
@@ -241,7 +243,8 @@ func _process_cycle_end_for_all_players():
|
||||
var all_players = get_tree().get_nodes_in_group("Players")
|
||||
|
||||
for player in all_players:
|
||||
var peer_id = player.get_multiplayer_authority()
|
||||
# Use name.to_int() for ID because bots share authority 1
|
||||
var peer_id = player.name.to_int()
|
||||
var match_score = _calculate_match_score(player)
|
||||
|
||||
if match_score > 0:
|
||||
@@ -297,7 +300,7 @@ func regenerate_goals_for_player(player: Node):
|
||||
player.goals = int_goals
|
||||
|
||||
# Use main scene's RPC which properly looks up player by ID on each client
|
||||
var peer_id = player.get_multiplayer_authority()
|
||||
var peer_id = player.name.to_int()
|
||||
if main_scene:
|
||||
main_scene.rpc("sync_player_goals", peer_id, int_goals)
|
||||
|
||||
|
||||
@@ -47,17 +47,22 @@ func after_action_completed():
|
||||
# Clear the highlights after placing the tiles. (Quickfix for Clientside)
|
||||
clear_highlights()
|
||||
|
||||
# Only update UI if this is the LOCAL HUMAN PLAYER
|
||||
# Bots are owned by the host (authority match) but shouldn't trigger UI updates
|
||||
if multiplayer.get_unique_id() == player.get_multiplayer_authority():
|
||||
var main = player.get_tree().get_root().get_node_or_null("Main")
|
||||
if main:
|
||||
main.ui_manager.update_button_states()
|
||||
main.ui_manager.update_playerboard_ui()
|
||||
|
||||
# Add this line to sync all boards
|
||||
main.update_all_players_boards()
|
||||
|
||||
# Add sync for playerboard
|
||||
if player.is_multiplayer_authority():
|
||||
if not player.is_bot and not player.is_in_group("Bots"):
|
||||
var main = player.get_tree().get_root().get_node_or_null("Main")
|
||||
if main:
|
||||
main.ui_manager.update_button_states()
|
||||
main.ui_manager.update_playerboard_ui()
|
||||
|
||||
# Add this line to sync all boards
|
||||
main.update_all_players_boards()
|
||||
|
||||
# Sync playerboard (Bots DO need to sync their board logic, just not update local UI)
|
||||
if player.is_multiplayer_authority():
|
||||
var main = player.get_tree().get_root().get_node_or_null("Main")
|
||||
if main:
|
||||
main.rpc("sync_playerboard", player.get_multiplayer_authority(), player.playerboard)
|
||||
|
||||
player._is_processing_action = false
|
||||
|
||||
Reference in New Issue
Block a user