4
0
Fork 0
WolfBox/scripts/players.gd

102 lines
2.7 KiB
GDScript3
Raw Normal View History

2025-05-31 22:21:22 +01:00
extends Node
2025-06-21 14:35:32 +01:00
class_name Players
2025-05-31 22:21:22 +01:00
@export var player_scene: PackedScene = preload("res://objects/player.tscn")
2025-06-21 14:35:32 +01:00
@export var bot_scene: PackedScene = preload("res://objects/bot.tscn")
@export var bot_count: int = 7
@export var bot_test_mode = false
@onready var game_state: GameState = get_parent() as GameState
2025-05-31 22:21:22 +01:00
signal player_joined(player: Player)
signal player_left(player: Player)
2025-06-21 14:35:32 +01:00
static var instance: Players = null
2025-05-31 22:21:22 +01:00
func _ready() -> void:
connect("child_entered_tree", on_child_added)
2025-06-21 14:35:32 +01:00
if instance == null:
instance = self
await get_tree().create_timer(0.5).timeout
for i in range(bot_count):
create_bot(i)
#bot.player_name = "Bot %d" % i
#bot.player_pronouns = "they/them"
2025-05-31 22:21:22 +01:00
@rpc("any_peer", "call_remote", "reliable")
2025-06-21 14:35:32 +01:00
func clear_all_players():
for child in get_children():
child.queue_free()
@rpc("any_peer", "call_remote", "reliable")
func create_player_for_session_id(session_id: int) -> Player:
2025-05-31 22:21:22 +01:00
for child in get_children():
var player: Player = child as Player
if player == null:
continue
if player.session_id == session_id:
2025-06-21 14:35:32 +01:00
return player
2025-05-31 22:21:22 +01:00
var player: Player = player_scene.instantiate() as Player
player.name = "Player %d" % session_id
player.session_id = session_id
2025-06-21 14:35:32 +01:00
player.game_state = game_state
2025-05-31 22:21:22 +01:00
print("Created player object for session ID %d" % session_id)
add_child(player)
2025-06-21 14:35:32 +01:00
return player
@rpc("any_peer", "call_remote", "reliable")
func create_bot(bot_id: int) -> Bot:
var bot: Bot = bot_scene.instantiate() as Bot
bot.session_id = bot_id
bot.game_state = game_state
bot.player_name = "Bot %d" % bot_id
bot.test_mode = bot_test_mode
add_child(bot)
return bot
2025-05-31 22:21:22 +01:00
func find_player_by_session_id(session_id: int) -> Player:
for child in get_children():
var player: Player = child as Player
if player == null:
continue
if player.session_id == session_id:
return player
create_player_for_session_id.rpc_id(1, session_id)
for child in get_children():
var player: Player = child as Player
if player == null:
continue
if player.session_id == session_id:
return player
return null
2025-06-21 14:35:32 +01:00
func find_player_by_name(name: String) -> Player:
for player in get_players():
if player.player_name == name:
return player
return null
func get_players() -> Array[Player]:
var ret: Array[Player]
for child in get_children():
if child is Player:
ret.append(child as Player)
return ret
func get_active_players() -> Array[Player]:
return get_players().filter(func(player: Player): return player.playing)
2025-05-31 22:21:22 +01:00
func on_child_added(node: Node) -> void:
if node is Player:
print("Player joined: %d" % node.session_id)
player_joined.emit(node as Player)
2025-06-21 14:35:32 +01:00
func call_on_active_players(method: StringName):
for player in get_active_players():
player.call(method)