39 lines
1.1 KiB
GDScript
39 lines
1.1 KiB
GDScript
extends Node
|
|
|
|
# PlayerManager - Handles player and bot lifecycle management
|
|
|
|
signal player_added(peer_id, player_node)
|
|
signal player_removed(peer_id)
|
|
signal bot_created(bot_id, bot_node)
|
|
signal bot_removed(bot_id)
|
|
|
|
var player_scene = preload("res://scenes/player.tscn")
|
|
var connected_peer_ids = []
|
|
|
|
func add_player_character(peer_id: int, position: Vector2i = Vector2i.ZERO) -> Node:
|
|
var player_character = player_scene.instantiate()
|
|
player_character.set_multiplayer_authority(peer_id)
|
|
player_character.name = str(peer_id)
|
|
|
|
connected_peer_ids.append(peer_id)
|
|
|
|
return player_character
|
|
|
|
func create_bot(bot_id: int) -> Node:
|
|
var bot_character = player_scene.instantiate()
|
|
bot_character.set_multiplayer_authority(1) # Server controls bots
|
|
bot_character.name = str(bot_id)
|
|
bot_character.is_bot = true
|
|
|
|
return bot_character
|
|
|
|
func remove_player(peer_id: int):
|
|
connected_peer_ids.erase(peer_id)
|
|
emit_signal("player_removed", peer_id)
|
|
|
|
func get_next_available_bot_id(max_players: int, current_players: Array) -> int:
|
|
for i in range(2, max_players + 1):
|
|
if not i in current_players:
|
|
return i
|
|
return -1
|