forked from Nekojimi/JackIt
48 lines
1.3 KiB
GDScript
48 lines
1.3 KiB
GDScript
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)
|