using System.Collections; using System.Collections.Generic; using UnityEngine; using Mirror; using Player; using System; public class CustomNetworkManager : NetworkManager { public List players; // public event Action RestartCallback; public List alive; public List dead; public event Action OnSceneChanged; public event Action OnLiveStateCallback; private float _restartTime = 5f; public int maxMonsters; public override void OnServerSceneChanged(string sceneName) { // foreach (var player in players) // { // player.GetComponent().OnLiveState -= OnLiveState; // } base.OnServerSceneChanged(sceneName); players.Clear(); alive.Clear(); dead.Clear(); foreach (NetworkConnectionToClient conn in NetworkServer.connections.Values) { NetworkServer.SetClientReady(conn); NetworkClient.ready = true; if (conn.identity != null) { this.OnServerAddPlayer(conn); } } OnSceneChanged?.Invoke(); } public override void OnServerAddPlayer(NetworkConnectionToClient conn) { base.OnServerAddPlayer(conn); players.Add(conn.identity.gameObject); Pawn player = conn.identity.GetComponent(); player.OnLiveState += OnLiveState; } public override void OnServerDisconnect(NetworkConnectionToClient conn) { players.Remove(conn.identity.gameObject); Pawn player = conn.identity.GetComponent(); player.OnLiveState -= OnLiveState; if (alive.Contains(player)) alive.Remove(player); if (dead.Contains(player)) dead.Remove(player); base.OnServerDisconnect(conn); } [Server] public void CallLiveStateCallback() { OnLiveStateCallback?.Invoke(); } [Server] private void OnLiveState(Pawn player, bool state) { if (state) { if (!alive.Contains(player)) alive.Add(player); if (dead.Contains(player)) dead.Remove(player); } else { if (alive.Contains(player)) alive.Remove(player); if (!dead.Contains(player)) dead.Add(player); } CallLiveStateCallback(); } [Server] public void RestartScene() { StartCoroutine(RestartTimer()); } IEnumerator RestartTimer() { yield return new WaitForSeconds(_restartTime); this.ServerChangeScene(NetworkManager.networkSceneName); StopCoroutine(RestartTimer()); } // private List alive2 { // get { // return players.FindAll(player => player.GetComponent().Alive == true).ConvertAll(); // } // } }