forked from Nekojimi/JackIt
48 lines
1.3 KiB
GDScript3
48 lines
1.3 KiB
GDScript3
|
extends Node
|
||
|
|
||
|
@export var player_scene: PackedScene = preload("res://objects/player.tscn")
|
||
|
|
||
|
signal player_joined(player: Player)
|
||
|
signal player_left(player: Player)
|
||
|
|
||
|
func _ready() -> void:
|
||
|
connect("child_entered_tree", on_child_added)
|
||
|
|
||
|
@rpc("any_peer", "call_remote", "reliable")
|
||
|
func create_player_for_session_id(session_id: int) -> void:
|
||
|
for child in get_children():
|
||
|
var player: Player = child as Player
|
||
|
if player == null:
|
||
|
continue
|
||
|
if player.session_id == session_id:
|
||
|
return
|
||
|
|
||
|
var player: Player = player_scene.instantiate() as Player
|
||
|
player.name = "Player %d" % session_id
|
||
|
player.session_id = session_id
|
||
|
print("Created player object for session ID %d" % session_id)
|
||
|
add_child(player)
|
||
|
|
||
|
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
|
||
|
|
||
|
func on_child_added(node: Node) -> void:
|
||
|
if node is Player:
|
||
|
print("Player joined: %d" % node.session_id)
|
||
|
player_joined.emit(node as Player)
|