Introduce a map manager

This commit is contained in:
Squinty 2024-04-21 07:32:52 +00:00
parent 5c4cc1a6ce
commit ae58fb2d7e
3 changed files with 80 additions and 20 deletions

View file

@ -13,31 +13,25 @@ script/source = "class_name Multiplayer extends Node
@export var FLAG : PackedScene
@export var MAX_CLIENTS : int = 24
@onready var map : Node = $Map
@onready var players : Node = $Players
@onready var objectives : Node = $Objectives
@onready var map : Node = $Map
var _map_manager : Map
signal connected_to_server
signal connection_failed
func load_map(scene : PackedScene) -> void:
map.add_child(scene.instantiate())
func start_server(port : int, nickname : String) -> void:
var peer : ENetMultiplayerPeer = ENetMultiplayerPeer.new()
peer.create_server(port, MAX_CLIENTS)
multiplayer.multiplayer_peer = peer
load_map.call_deferred(MAP)
_load_map.call_deferred(MAP, nickname)
multiplayer.peer_disconnected.connect(remove_player)
if DisplayServer.get_name() != \"headless\":
add_player(1, nickname)
add_flag()
func join_server(host : String, port : int, nickname : String) -> void:
var peer : ENetMultiplayerPeer= ENetMultiplayerPeer.new()
peer.create_client(host, port)
@ -60,7 +54,7 @@ func add_player(peer_id : int, nickname : String) -> void:
player.name = str(peer_id)
player.player_id = peer_id
player.nickname = nickname
player.position = Vector3(0.0, 150.0, 0.0)
player.global_position = _map_manager.get_player_spawn().position
players.add_child(player)
player.died.connect(respawn_player)
print(\"Peer `%s` connected\" % player.name)
@ -73,17 +67,24 @@ func remove_player(peer_id : int) -> void:
player.queue_free()
print(\"Peer `%s` disconnected\" % node_name)
func _load_map(scene : PackedScene, nickname : String) -> void:
var map_scene : Node = scene.instantiate()
_map_manager = map_scene
map_scene.ready.connect(_add_flag)
if DisplayServer.get_name() != \"headless\":
add_player(1, nickname)
map.add_child(map_scene)
func _add_flag() -> void:
var flag : Flag = FLAG.instantiate()
flag.global_position = _map_manager.get_flagstand().global_position
objectives.add_child(flag)
@rpc(\"any_peer\")
func _join_match(nickname : String) -> void:
if multiplayer.is_server():
add_player(multiplayer.get_remote_sender_id(), nickname)
func add_flag() -> void:
var flag : Flag = FLAG.instantiate()
flag.position = Vector3(5.0, 100.0, 0.0)
objectives.add_child(flag)
func _exit_tree() -> void:
if multiplayer.is_server():
#multiplayer.peer_connected.disconnect(add_player)