mirror of
https://gitlab.com/open-fpsz/open-fpsz.git
synced 2026-01-19 19:44:46 +00:00
94 lines
2.7 KiB
Plaintext
94 lines
2.7 KiB
Plaintext
|
|
[gd_scene load_steps=4 format=3 uid="uid://c7ae4jw5d8mue"]
|
||
|
|
|
||
|
|
[ext_resource type="PackedScene" uid="uid://cbhx1xme0sb7k" path="res://entities/player/player.tscn" id="1_7bj5d"]
|
||
|
|
[ext_resource type="PackedScene" uid="uid://chbno00ugl6te" path="res://maps/genesis/genesis.tscn" id="2_nnx26"]
|
||
|
|
|
||
|
|
[sub_resource type="GDScript" id="GDScript_pj58d"]
|
||
|
|
script/source = "class_name Multiplayer extends Node
|
||
|
|
|
||
|
|
@export_category(\"Parameters\")
|
||
|
|
@export var MAP : PackedScene
|
||
|
|
@export var PLAYER : PackedScene
|
||
|
|
@export var MAX_CLIENTS : int = 24
|
||
|
|
|
||
|
|
@onready var map = $Map
|
||
|
|
@onready var players = $Players
|
||
|
|
|
||
|
|
signal connected_to_server
|
||
|
|
signal connection_failed
|
||
|
|
|
||
|
|
func load_map(scene : PackedScene):
|
||
|
|
map.add_child(scene.instantiate())
|
||
|
|
|
||
|
|
func start_server(port):
|
||
|
|
var peer = ENetMultiplayerPeer.new()
|
||
|
|
peer.create_server(port, MAX_CLIENTS)
|
||
|
|
|
||
|
|
multiplayer.multiplayer_peer = peer
|
||
|
|
|
||
|
|
load_map.call_deferred(MAP)
|
||
|
|
|
||
|
|
multiplayer.peer_connected.connect(add_player)
|
||
|
|
multiplayer.peer_disconnected.connect(remove_player)
|
||
|
|
|
||
|
|
for id in multiplayer.get_peers():
|
||
|
|
add_player(id)
|
||
|
|
|
||
|
|
if DisplayServer.get_name() != \"headless\":
|
||
|
|
add_player(1)
|
||
|
|
|
||
|
|
func join_server(host, port):
|
||
|
|
var peer = ENetMultiplayerPeer.new()
|
||
|
|
peer.create_client(host, port)
|
||
|
|
multiplayer.connected_to_server.connect(_on_connected_to_server)
|
||
|
|
multiplayer.connection_failed.connect(_on_connection_failed)
|
||
|
|
multiplayer.multiplayer_peer = peer
|
||
|
|
|
||
|
|
func _on_connected_to_server():
|
||
|
|
connected_to_server.emit()
|
||
|
|
|
||
|
|
func _on_connection_failed():
|
||
|
|
connection_failed.emit()
|
||
|
|
|
||
|
|
func respawn_player(player):
|
||
|
|
player.respawn(Vector3(0.0, 150.0, 0.0))
|
||
|
|
|
||
|
|
func add_player(peer_id : int):
|
||
|
|
var player : Player = PLAYER.instantiate()
|
||
|
|
player.name = str(peer_id)
|
||
|
|
player.player_id = peer_id
|
||
|
|
player.position = Vector3(0.0, 150.0, 0.0)
|
||
|
|
players.add_child(player)
|
||
|
|
player.died.connect(respawn_player)
|
||
|
|
print(\"Peer `%s` connected\" % player.name)
|
||
|
|
|
||
|
|
func remove_player(peer_id : int):
|
||
|
|
var node_name = str(peer_id)
|
||
|
|
if players.has_node(node_name):
|
||
|
|
players.get_node(node_name).queue_free()
|
||
|
|
print(\"Peer `%s` disconnected\" % node_name)
|
||
|
|
|
||
|
|
func _exit_tree():
|
||
|
|
if multiplayer.is_server():
|
||
|
|
multiplayer.peer_connected.disconnect(add_player)
|
||
|
|
multiplayer.peer_disconnected.disconnect(remove_player)
|
||
|
|
"
|
||
|
|
|
||
|
|
[node name="Multiplayer" type="Node"]
|
||
|
|
script = SubResource("GDScript_pj58d")
|
||
|
|
MAP = ExtResource("2_nnx26")
|
||
|
|
PLAYER = ExtResource("1_7bj5d")
|
||
|
|
|
||
|
|
[node name="Map" type="Node" parent="."]
|
||
|
|
|
||
|
|
[node name="MapSpawner" type="MultiplayerSpawner" parent="."]
|
||
|
|
_spawnable_scenes = PackedStringArray("res://maps/genesis/genesis.tscn")
|
||
|
|
spawn_path = NodePath("../Map")
|
||
|
|
spawn_limit = 1
|
||
|
|
|
||
|
|
[node name="Players" type="Node" parent="."]
|
||
|
|
|
||
|
|
[node name="PlayersSpawner" type="MultiplayerSpawner" parent="."]
|
||
|
|
_spawnable_scenes = PackedStringArray("res://entities/player/player.tscn")
|
||
|
|
spawn_path = NodePath("../Players")
|