feat: add base functionality

Add ServerPlayerSpawnPoints.cs with its functionality
Add to Trooper OnServerSpawnPlayer() for spawning on SpawnPoint.
This commit is contained in:
Константин Адер 2024-12-09 17:32:33 +03:00
parent 1c4b76a078
commit b0eccf53b5
4 changed files with 144 additions and 116 deletions

View File

@ -11608,63 +11608,6 @@ Mesh:
offset: 0 offset: 0
size: 0 size: 0
path: path:
--- !u!1001 &911870924
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalPosition.x
value: -2.7960749
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalPosition.y
value: 0.0000019073486
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
propertyPath: m_Name
value: SpeedFireModels
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: b5e8b9c441024a5488ac81ee138cb2d0, type: 3}
--- !u!1 &955913176 --- !u!1 &955913176
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -14309,6 +14252,52 @@ Transform:
m_Children: [] m_Children: []
m_Father: {fileID: 291306114} m_Father: {fileID: 291306114}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1108456493
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1108456495}
- component: {fileID: 1108456494}
m_Layer: 0
m_Name: NetworkSpawnPos (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1108456494
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1108456493}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cee2c0113dc15964db87a29bb399e791, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SpawnPoints:
- {fileID: 1108456493}
--- !u!4 &1108456495
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1108456493}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -3, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1119466313 --- !u!1 &1119466313
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -22764,6 +22753,52 @@ Mesh:
offset: 0 offset: 0
size: 0 size: 0
path: path:
--- !u!1 &1528084438
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1528084439}
- component: {fileID: 1528084440}
m_Layer: 0
m_Name: NetworkSpawnPos
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1528084439
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1528084438}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -1, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1528084440
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1528084438}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cee2c0113dc15964db87a29bb399e791, type: 3}
m_Name:
m_EditorClassIdentifier:
m_SpawnPoints:
- {fileID: 1528084438}
--- !u!1 &1530074703 --- !u!1 &1530074703
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -28450,63 +28485,6 @@ Mesh:
offset: 0 offset: 0
size: 0 size: 0
path: path:
--- !u!1001 &1740863921
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalPosition.x
value: -1.3960747
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalPosition.y
value: 0.00000047683716
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
propertyPath: m_Name
value: RobotTestModel
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 68f975ad13142f649bdb7d103d57f656, type: 3}
--- !u!1 &1761487665 --- !u!1 &1761487665
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -36292,6 +36270,6 @@ SceneRoots:
- {fileID: 1316630045} - {fileID: 1316630045}
- {fileID: 308004456} - {fileID: 308004456}
- {fileID: 901735154} - {fileID: 901735154}
- {fileID: 911870924}
- {fileID: 1740863921}
- {fileID: 419097832} - {fileID: 419097832}
- {fileID: 1528084439}
- {fileID: 1108456495}

View File

@ -48,9 +48,17 @@ public class Trooper : RobotController
} }
// Networking Staff - Spawn & Despawn // Networking Staff - Spawn & Despawn
void OnServerSpawnPlayer()
{
// this is done server side, so we have a single source of truth for our spawn point list
var spawnPoint = ServerPlayerSpawnPoints.Instance.ConsumeNextSpawnPoint();
var spawnPosition = spawnPoint ? spawnPoint.transform.position : Vector3.zero;
transform.position = spawnPosition;
}
public override void OnNetworkSpawn() public override void OnNetworkSpawn()
{ {
OnServerSpawnPlayer();
base.OnNetworkSpawn(); base.OnNetworkSpawn();
playerInput.enabled = IsOwner; playerInput.enabled = IsOwner;

View File

@ -0,0 +1,40 @@
using System.Collections.Generic;
using UnityEngine;
public class ServerPlayerSpawnPoints : MonoBehaviour
{
[SerializeField]
List<GameObject> m_SpawnPoints;
static ServerPlayerSpawnPoints s_Instance;
public static ServerPlayerSpawnPoints Instance
{
get
{
if (s_Instance == null)
{
s_Instance = FindObjectOfType<ServerPlayerSpawnPoints>();
}
return s_Instance;
}
}
void OnDestroy()
{
s_Instance = null;
}
public GameObject ConsumeNextSpawnPoint()
{
if (m_SpawnPoints.Count == 0)
{
return null;
}
var toReturn = m_SpawnPoints[m_SpawnPoints.Count - 1];
m_SpawnPoints.RemoveAt(m_SpawnPoints.Count - 1);
return toReturn;
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: cee2c0113dc15964db87a29bb399e791