mirror of
https://gitlab.com/open-fpsz/open-fpsz.git
synced 2026-01-19 19:44:46 +00:00
✨ Introduce a map manager
This commit is contained in:
parent
66270e65cd
commit
3c2e07eae5
|
|
@ -1,11 +1,21 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://chbno00ugl6te"]
|
||||
[gd_scene load_steps=8 format=3 uid="uid://chbno00ugl6te"]
|
||||
|
||||
[ext_resource type="Environment" uid="uid://d2ahijqqspw5f" path="res://environments/default.tres" id="1_3nr12"]
|
||||
[ext_resource type="Script" path="res://maps/map.gd" id="1_6ysiv"]
|
||||
[ext_resource type="Terrain3DStorage" uid="uid://dyon4xda4k40d" path="res://maps/genesis/resources/storage.res" id="1_a88qe"]
|
||||
[ext_resource type="Terrain3DMaterial" uid="uid://bd4lr5sxu8xu" path="res://maps/genesis/resources/material.res" id="2_o2y3d"]
|
||||
[ext_resource type="Terrain3DTextureList" uid="uid://dnqa8kxgm3xuw" path="res://maps/genesis/resources/textures.res" id="3_1cww7"]
|
||||
|
||||
[node name="Terrain3D" type="Terrain3D"]
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_k2vhq"]
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_5ytwx"]
|
||||
|
||||
[node name="Map" type="Node" node_paths=PackedStringArray("_flagstand", "_player_spawns_root")]
|
||||
script = ExtResource("1_6ysiv")
|
||||
_flagstand = NodePath("Terrain3D/FlagPillar/CSGCylinder3D/FlagStand")
|
||||
_player_spawns_root = NodePath("Terrain3D/PlayerSpawns")
|
||||
|
||||
[node name="Terrain3D" type="Terrain3D" parent="."]
|
||||
storage = ExtResource("1_a88qe")
|
||||
material = ExtResource("2_o2y3d")
|
||||
texture_list = ExtResource("3_1cww7")
|
||||
|
|
@ -13,8 +23,41 @@ collision_layer = 2147483648
|
|||
collision_mask = 2147483648
|
||||
mesh_size = 24
|
||||
|
||||
[node name="PlayerSpawns" type="Node" parent="Terrain3D"]
|
||||
|
||||
[node name="Spawn1" type="Marker3D" parent="Terrain3D/PlayerSpawns"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 95.5378, -32.735)
|
||||
visible = false
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Terrain3D/PlayerSpawns/Spawn1"]
|
||||
mesh = SubResource("CapsuleMesh_k2vhq")
|
||||
|
||||
[node name="Spawn2" type="Marker3D" parent="Terrain3D/PlayerSpawns"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 98.3078, 18.061)
|
||||
visible = false
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Terrain3D/PlayerSpawns/Spawn2"]
|
||||
mesh = SubResource("CapsuleMesh_5ytwx")
|
||||
|
||||
[node name="FlagPillar" type="CSGCombiner3D" parent="Terrain3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 2.83726, 0, 0, 0, 1, 0, 94.6411, 0)
|
||||
use_collision = true
|
||||
collision_layer = 2147483648
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Terrain3D/FlagPillar"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9311, 0)
|
||||
size = Vector3(0.5, 6, 0.5)
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Terrain3D/FlagPillar"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.42967, 0)
|
||||
height = 5.0
|
||||
|
||||
[node name="FlagStand" type="Marker3D" parent="Terrain3D/FlagPillar/CSGCylinder3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.42315, 0)
|
||||
|
||||
[node name="Sunlight" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(-0.866024, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.75, -0.43301, 0, 100, 0)
|
||||
transform = Transform3D(-0.866024, -0.433016, 0.25, 0, 0.499998, 0.866027, -0.500003, 0.75, -0.43301, 0, 100, 0)
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
|
|
|
|||
16
maps/map.gd
Normal file
16
maps/map.gd
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
class_name Map extends Node
|
||||
|
||||
@export var _flagstand : Node3D
|
||||
@export var _player_spawns_root : Node
|
||||
|
||||
var _rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||
|
||||
func get_flagstand() -> Node3D:
|
||||
return _flagstand
|
||||
|
||||
func get_player_spawn() -> Node3D:
|
||||
var spawn_count : int = _player_spawns_root.get_child_count()
|
||||
var spawn_index : int = _rng.randi_range(0, spawn_count - 1)
|
||||
var spawn_selected : Node3D = _player_spawns_root.get_child(spawn_index)
|
||||
return spawn_selected
|
||||
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue