using System; using System.Collections.Generic; using System.Linq; using Mirror; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.Serialization; public class CustomNetworkManager : NetworkManager { [SerializeField] public NetworkRoomPlayerLobby gamePlayerPrefab; public List GamePlayers = new List(); public GameObject PlayerInMenu; [Scene] public string menuScene = "Menu"; // public static event Action OnClientConnected; // public static event Action OnClientDisconnected; public override void OnStartServer() { if (PlayerInMenu != null && PlayerInMenu.scene.IsValid()) { Destroy(PlayerInMenu); } else { Debug.LogWarning("PlayerInMenu is not a valid scene instance."); } spawnPrefabs = Resources.LoadAll("SpawnablePrefabs").ToList(); } // ReSharper disable Unity.PerformanceAnalysis public override void OnStartClient() { var spawnablePrefabs = Resources.LoadAll("SpawnablePrefabs"); foreach (var prefab in spawnablePrefabs) { NetworkClient.RegisterPrefab(prefab); } if(PlayerInMenu != null) DestroyImmediate(PlayerInMenu, true); } // ReSharper disable Unity.PerformanceAnalysis public override void OnServerAddPlayer(NetworkConnectionToClient conn) { Debug.Log("OnServerAddPlayer"); // if (SceneManager.GetActiveScene().path == menuScene) // { NetworkRoomPlayerLobby player = Instantiate(gamePlayerPrefab); NetworkServer.AddPlayerForConnection(conn, player.gameObject); GamePlayers.Add( conn.identity.GetComponent()); Debug.Log("Player added"); // } } public override void OnServerDisconnect(NetworkConnectionToClient conn) { var networkIdentity = conn.identity; if (networkIdentity != null) { // ReSharper disable once Unity.PerformanceCriticalCodeInvocation var player = networkIdentity.GetComponent(); GamePlayers.Remove(player); } Debug.Log("disconnected from Server"); base.OnServerDisconnect(conn); } public override void OnServerChangeScene(string newSceneName) { if (newSceneName == menuScene) { Instantiate(PlayerInMenu); } } public override void OnStopServer() { // Instantiate(PlayerInMenu); GamePlayers.Clear(); } public void StartGame() { ServerChangeScene("Demo"); Debug.Log("GAME STARTING"); } // public override void ServerChangeScene(string newSceneName) // { // Debug.Log("sss"); // if(SceneManager.GetActiveScene().path == menuScene && newSceneName.StartsWith("Demo")) // { // Debug.Log("YES"); // int newNum = GamePlayers.Count; // for (int i = 0; i < newNum; i++) // { // var conn = GamePlayers[0].connectionToClient; // var gameplayerInstance = Instantiate(gamePlayerPrefab); // Debug.Log(gameplayerInstance.transform.position); // // NetworkServer.Destroy(conn.identity.gameObject); // NetworkServer.ReplacePlayerForConnection(conn, gameplayerInstance.gameObject, true); // } // } // // base.ServerChangeScene(newSceneName); // } }