slowpoker/Assets/Scripts/Network/CustomNetworkManager.cs
2024-10-19 18:00:02 +03:00

117 lines
3.6 KiB
C#

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<NetworkRoomPlayerLobby> GamePlayers = new List<NetworkRoomPlayerLobby>();
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<GameObject>("SpawnablePrefabs").ToList();
}
// ReSharper disable Unity.PerformanceAnalysis
public override void OnStartClient()
{
var spawnablePrefabs = Resources.LoadAll<GameObject>("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<NetworkRoomPlayerLobby>());
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<NetworkRoomPlayerLobby>();
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);
// }
}