diff --git a/Assets/Scenes/MultiplayerScene.unity b/Assets/Scenes/MultiplayerScene.unity index 73b56f4..7f8db51 100644 --- a/Assets/Scenes/MultiplayerScene.unity +++ b/Assets/Scenes/MultiplayerScene.unity @@ -11608,63 +11608,6 @@ Mesh: offset: 0 size: 0 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 GameObject: m_ObjectHideFlags: 0 @@ -14309,6 +14252,52 @@ Transform: m_Children: [] m_Father: {fileID: 291306114} 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 GameObject: m_ObjectHideFlags: 0 @@ -22764,6 +22753,52 @@ Mesh: offset: 0 size: 0 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 GameObject: m_ObjectHideFlags: 0 @@ -28450,63 +28485,6 @@ Mesh: offset: 0 size: 0 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 GameObject: m_ObjectHideFlags: 0 @@ -36292,6 +36270,6 @@ SceneRoots: - {fileID: 1316630045} - {fileID: 308004456} - {fileID: 901735154} - - {fileID: 911870924} - - {fileID: 1740863921} - {fileID: 419097832} + - {fileID: 1528084439} + - {fileID: 1108456495} diff --git a/Assets/Scripts/Runtime/Core/Classes/Trooper.cs b/Assets/Scripts/Runtime/Core/Classes/Trooper.cs index eca21e4..2db805b 100644 --- a/Assets/Scripts/Runtime/Core/Classes/Trooper.cs +++ b/Assets/Scripts/Runtime/Core/Classes/Trooper.cs @@ -48,9 +48,17 @@ public class Trooper : RobotController } // 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() { + OnServerSpawnPlayer(); base.OnNetworkSpawn(); playerInput.enabled = IsOwner; diff --git a/Assets/Scripts/Runtime/Networking/ServerPlayerSpawnPoints.cs b/Assets/Scripts/Runtime/Networking/ServerPlayerSpawnPoints.cs new file mode 100644 index 0000000..70b2e0c --- /dev/null +++ b/Assets/Scripts/Runtime/Networking/ServerPlayerSpawnPoints.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using UnityEngine; + +public class ServerPlayerSpawnPoints : MonoBehaviour +{ + [SerializeField] + List m_SpawnPoints; + + static ServerPlayerSpawnPoints s_Instance; + + public static ServerPlayerSpawnPoints Instance + { + get + { + if (s_Instance == null) + { + s_Instance = FindObjectOfType(); + } + + 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; + } +} diff --git a/Assets/Scripts/Runtime/Networking/ServerPlayerSpawnPoints.cs.meta b/Assets/Scripts/Runtime/Networking/ServerPlayerSpawnPoints.cs.meta new file mode 100644 index 0000000..808c259 --- /dev/null +++ b/Assets/Scripts/Runtime/Networking/ServerPlayerSpawnPoints.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: cee2c0113dc15964db87a29bb399e791 \ No newline at end of file