From c71f2023dfaa0eefadab9a854c9da3050d5744a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20=C5=A0vec?= Date: Sun, 25 Aug 2024 21:57:37 +0200 Subject: [PATCH] Refactor connection handling to game manager --- .../GlobalBoostrap/NetworkManager.prefab | 14 ----- Assets/Scripts/Components/PlayerComponent.cs | 5 -- Assets/Scripts/Managers/ConnectionManager.cs | 54 ------------------- .../Managers/ConnectionManager.cs.meta | 11 ---- Assets/Scripts/Managers/GameManager.cs | 51 ++++++++++++++++-- Assets/Scripts/Managers/LevelManager.cs | 3 +- Assets/Scripts/Managers/SceneManager.cs | 3 +- 7 files changed, 50 insertions(+), 91 deletions(-) delete mode 100644 Assets/Scripts/Managers/ConnectionManager.cs delete mode 100644 Assets/Scripts/Managers/ConnectionManager.cs.meta diff --git a/Assets/Prefabs/GlobalBoostrap/NetworkManager.prefab b/Assets/Prefabs/GlobalBoostrap/NetworkManager.prefab index ea8b2f0e..269fd0a9 100644 --- a/Assets/Prefabs/GlobalBoostrap/NetworkManager.prefab +++ b/Assets/Prefabs/GlobalBoostrap/NetworkManager.prefab @@ -11,7 +11,6 @@ GameObject: - component: {fileID: 3572856719409378894} - component: {fileID: 8614138672144993884} - component: {fileID: 1446823875350840172} - - component: {fileID: 4889055508275984978} m_Layer: 0 m_Name: NetworkManager m_TagString: Untagged @@ -100,16 +99,3 @@ MonoBehaviour: PacketDelayMS: 0 PacketJitterMS: 0 PacketDropRate: 0 ---- !u!114 &4889055508275984978 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8643863892294462044} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: cb16de57aad3ebe42bb3df246dc58d5f, type: 3} - m_Name: - m_EditorClassIdentifier: - networkManager: {fileID: 8614138672144993884} diff --git a/Assets/Scripts/Components/PlayerComponent.cs b/Assets/Scripts/Components/PlayerComponent.cs index 25e973b8..62f1fa46 100644 --- a/Assets/Scripts/Components/PlayerComponent.cs +++ b/Assets/Scripts/Components/PlayerComponent.cs @@ -9,8 +9,6 @@ using Unity.Netcode.Components; using Unity.VisualScripting; using UnityEngine; using UnityEngine.Rendering.Universal; -using Zenject; -using static Unity.Burst.Intrinsics.X86.Avx; public class PlayerComponent : NetworkBehaviour { @@ -30,9 +28,6 @@ public class PlayerComponent : NetworkBehaviour [SerializeField] private float fadeDuration = 2f; - [SerializeField] - public GameManager gameManager; - public Vector3 Position { get { return controller.transform.position; } diff --git a/Assets/Scripts/Managers/ConnectionManager.cs b/Assets/Scripts/Managers/ConnectionManager.cs deleted file mode 100644 index bb975621..00000000 --- a/Assets/Scripts/Managers/ConnectionManager.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Sirenix.OdinInspector; -using System.Collections; -using System.Collections.Generic; -using Unity.Netcode; -using UnityEngine; -using Zenject; - -public class ConnectionManager : NetworkBehaviour -{ - [SerializeField] - private NetworkManager networkManager; - - [Inject] - [SerializeField] - [ReadOnly] - private GameManager gameManager; - - private void Start() - { - networkManager.OnClientConnectedCallback += OnClientConnectedCallback; - networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback; - } - - private void OnClientConnectedCallback(ulong clientId) - { - Debug.Log($"Client-{clientId} is connected and can spawn {nameof(NetworkObject)}s."); - - if (networkManager.LocalClientId == clientId) - { - StartCoroutine(SpawnLocalPlayer()); - } - } - - private IEnumerator SpawnLocalPlayer() - { - yield return new WaitForEndOfFrame(); - - var playerObject = networkManager.LocalClient.PlayerObject; - var player = playerObject.GetComponent(); - player.gameManager = gameManager; - gameManager.PlayerSpawnedOnNetwork(player); - yield return null; - } - - private void OnClientDisconnectCallback(ulong clientId) - { - Debug.Log($"Client-{clientId} is disconnected and can spawn {nameof(NetworkObject)}s."); - - if (networkManager.LocalClientId == clientId) - { - - } - } -} diff --git a/Assets/Scripts/Managers/ConnectionManager.cs.meta b/Assets/Scripts/Managers/ConnectionManager.cs.meta deleted file mode 100644 index 142e7aa3..00000000 --- a/Assets/Scripts/Managers/ConnectionManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cb16de57aad3ebe42bb3df246dc58d5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Managers/GameManager.cs b/Assets/Scripts/Managers/GameManager.cs index c6e64ed8..490498a2 100644 --- a/Assets/Scripts/Managers/GameManager.cs +++ b/Assets/Scripts/Managers/GameManager.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using Unity.Netcode; using UnityEngine; using Zenject; +using ParrelSync; public class GameManager : NetworkBehaviour { @@ -15,13 +16,53 @@ public class GameManager : NetworkBehaviour get { return localPlayer; } } - public void PlayerSpawnedOnNetwork(PlayerComponent player) + [SerializeField] + [ReadOnly] + [Inject] + private NetworkManager networkManager; + + private void Start() { - if (player.IsLocalPlayer) + networkManager.OnClientConnectedCallback += OnClientConnectedCallback; + networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback; + + if (ClonesManager.IsClone()) { - player.Teleport(localPlayer.Position, localPlayer.Rotation); - localPlayer.DestroyWithDependencies(); - localPlayer = player; + networkManager.StartClient(); + } + else + { + networkManager.StartHost(); } } + + private void OnClientConnectedCallback(ulong clientId) + { + Debug.Log($"Client-{clientId} is connected and can spawn {nameof(NetworkObject)}s."); + + if (networkManager.LocalClientId == clientId) + { + StartCoroutine(SpawnLocalPlayer()); + } + } + + private IEnumerator SpawnLocalPlayer() + { + yield return new WaitForEndOfFrame(); + + var position = localPlayer.Position; + var rotation = localPlayer.Rotation; + localPlayer.DestroyWithDependencies(); + + var playerObject = networkManager.LocalClient.PlayerObject; + var player = playerObject.GetComponent(); + player.Teleport(position, rotation); + localPlayer = player; + yield return null; + } + + private void OnClientDisconnectCallback(ulong clientId) + { + Debug.Log($"Client-{clientId} is disconnected"); + } } diff --git a/Assets/Scripts/Managers/LevelManager.cs b/Assets/Scripts/Managers/LevelManager.cs index 2a36fde5..9cd6557f 100644 --- a/Assets/Scripts/Managers/LevelManager.cs +++ b/Assets/Scripts/Managers/LevelManager.cs @@ -3,10 +3,11 @@ using Sirenix.OdinInspector; using System.Collections; using System.Collections.Generic; using System.Linq; +using Unity.Netcode; using UnityEngine; using Zenject; -public class LevelManager : MonoBehaviour +public class LevelManager : NetworkBehaviour { [SerializeField] [ReadOnly] diff --git a/Assets/Scripts/Managers/SceneManager.cs b/Assets/Scripts/Managers/SceneManager.cs index 9274385b..c53fde16 100644 --- a/Assets/Scripts/Managers/SceneManager.cs +++ b/Assets/Scripts/Managers/SceneManager.cs @@ -2,11 +2,12 @@ using HurricaneVR.Framework.Core.Player; using Sirenix.OdinInspector; using System.Collections; using System.Collections.Generic; +using Unity.Netcode; using UnityEngine; using UnityEngine.SceneManagement; using Zenject; -public class SceneManager : MonoBehaviour +public class SceneManager : NetworkBehaviour { enum Scene {