12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- class_name PlayerManager
- extends Node2D
- const SPAWN_RANDOM := 100.0
- const SPAWN_HEIGHT := 200.0
- @onready var player_pool: Node2D = $PlayerPool
- func _ready():
- # We only need to spawn players on the server.
- if not multiplayer.is_server():
- return
- multiplayer.peer_connected.connect(add_player)
- multiplayer.peer_disconnected.connect(del_player)
- # Spawn already connected players
- for id in multiplayer.get_peers():
- add_player(id)
- # Spawn the local player unless this is a dedicated server export.
- if not OS.has_feature("dedicated_server"):
- add_player(1)
- func _exit_tree():
- if not multiplayer.is_server():
- return
- multiplayer.peer_connected.disconnect(add_player)
- multiplayer.peer_disconnected.disconnect(del_player)
- func add_player(id: int):
- var character = preload("res://component/entity/jumper/jumper.tscn").instantiate()
- # Set player id.
- character.player = id
- # Randomize character position.
- character.position = Vector2(randf() * SPAWN_RANDOM, SPAWN_HEIGHT)
- character.name = str(id)
- player_pool.add_child(character, true)
- func del_player(id: int):
- if not player_pool.has_node(str(id)):
- return
- player_pool.get_node(str(id)).queue_free()
|