81 lines
1.7 KiB
C#
81 lines
1.7 KiB
C#
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using Mirror;
|
||
|
using System;
|
||
|
using Player;
|
||
|
|
||
|
public class NetworkGameManager : NetworkBehaviour
|
||
|
{
|
||
|
public static NetworkGameManager singleton { get; private set; }
|
||
|
private CustomNetworkManager networkManager;
|
||
|
|
||
|
public GameObject winner;
|
||
|
|
||
|
// public List<Pawn> alive;
|
||
|
// public List<Pawn> dead;
|
||
|
|
||
|
public event Action RestartCallback;
|
||
|
|
||
|
void Awake()
|
||
|
{
|
||
|
if (singleton != null && singleton != this)
|
||
|
{
|
||
|
Destroy(this);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
singleton = this;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Start()
|
||
|
{
|
||
|
networkManager = NetworkManager.singleton.GetComponent<CustomNetworkManager>();
|
||
|
|
||
|
networkManager.OnLiveStateCallback += OnLiveStateCallback;
|
||
|
|
||
|
// foreach (var playerObject in networkManager.players)
|
||
|
// {
|
||
|
// var player = playerObject.GetComponent<Pawn>();
|
||
|
// player.OnLiveState += OnLiveState;
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
[Server]
|
||
|
void OnLiveStateCallback()
|
||
|
{
|
||
|
if (networkManager.dead.Count == networkManager.players.Count)
|
||
|
{
|
||
|
CmdRestartScene();
|
||
|
}
|
||
|
|
||
|
// if (networkManager.alive.Count == 1)
|
||
|
// {
|
||
|
// SetWinner(networkManager.alive[0].gameObject);
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
[ClientRpc]
|
||
|
public void SetWinner(GameObject gameObject)
|
||
|
{
|
||
|
winner = gameObject;
|
||
|
CmdRestartScene();
|
||
|
}
|
||
|
|
||
|
|
||
|
[ClientRpc]
|
||
|
void RpcResetScene()
|
||
|
{
|
||
|
RestartCallback?.Invoke();
|
||
|
}
|
||
|
|
||
|
[Command(requiresAuthority = false)]
|
||
|
public void CmdRestartScene()
|
||
|
{
|
||
|
RpcResetScene();
|
||
|
networkManager.RestartScene();
|
||
|
}
|
||
|
|
||
|
}
|