69 lines
1.7 KiB
C#
69 lines
1.7 KiB
C#
using Sirenix.OdinInspector;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.Netcode;
|
|
using UnityEngine;
|
|
using Zenject;
|
|
using ParrelSync;
|
|
|
|
public class GameManager : NetworkBehaviour
|
|
{
|
|
[SerializeField]
|
|
[ReadOnly]
|
|
[Inject]
|
|
private PlayerComponent localPlayer;
|
|
public PlayerComponent LocalPlayer {
|
|
get { return localPlayer; }
|
|
}
|
|
|
|
[SerializeField]
|
|
[ReadOnly]
|
|
[Inject]
|
|
private NetworkManager networkManager;
|
|
|
|
private void Start()
|
|
{
|
|
networkManager.OnClientConnectedCallback += OnClientConnectedCallback;
|
|
networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
|
|
|
|
if (ClonesManager.IsClone())
|
|
{
|
|
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");
|
|
}
|
|
}
|