Refactor connection handling to game manager

This commit is contained in:
2024-08-25 21:57:37 +02:00
parent b05cab8288
commit c71f2023df
7 changed files with 50 additions and 91 deletions

View File

@@ -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<PlayerComponent>();
player.Teleport(position, rotation);
localPlayer = player;
yield return null;
}
private void OnClientDisconnectCallback(ulong clientId)
{
Debug.Log($"Client-{clientId} is disconnected");
}
}