using System.Collections; using System.Collections.Generic; using UnityEngine; using Mirror; using System; using Characters; public class NetworkGameManager : NetworkBehaviour { public static NetworkGameManager singleton { get; private set; } private CustomNetworkManager networkManager; public GameObject enemyPrefab; public List enemyList = new List(); public GameObject winner; public bool gameStart = false; // public List alive; // public List dead; public event Action RestartCallback; void Awake() { if (singleton != null && singleton != this) { Destroy(this); } else { singleton = this; } } void Start() { networkManager = NetworkManager.singleton.GetComponent(); networkManager.OnLiveStateCallback += OnLiveStateCallback; // foreach (var playerObject in networkManager.players) // { // var player = playerObject.GetComponent(); // player.OnLiveState += OnLiveState; // } } [Server] void OnLiveStateCallback() { if (networkManager.dead.Count == networkManager.players.Count) { CmdRestartScene(); } if (networkManager.alive.Count == 1 && networkManager.players.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(); } private void FixedUpdate() { if (enemyList.Count == networkManager.maxMonsters) return; if (networkManager.players.Count == networkManager.maxConnections) { for (int i = 0; i < networkManager.maxMonsters; i++) { GameObject go = Instantiate(enemyPrefab, new Vector3(80 + i, 0, 30.7f), Quaternion.identity); NetworkServer.Spawn(go); enemyList.Add(go); } } } }