2024-10-17 17:23:05 +03:00
|
|
|
using System;
|
2024-10-17 23:09:51 +03:00
|
|
|
using System.Collections.Generic;
|
2024-10-17 17:23:05 +03:00
|
|
|
using System.Linq;
|
|
|
|
using Mirror;
|
|
|
|
using UnityEngine;
|
|
|
|
using UnityEngine.SceneManagement;
|
|
|
|
|
|
|
|
public class CustomNetworkManager : NetworkManager
|
|
|
|
{
|
|
|
|
[Scene] public string menuScene;
|
|
|
|
public NetworkRoomPlayerLobby roomPlayerPrefab;
|
2024-10-17 23:09:51 +03:00
|
|
|
public List<NetworkRoomPlayerLobby> RoomPlayers = new List<NetworkRoomPlayerLobby>();
|
|
|
|
public GameObject PlayerInMenu;
|
|
|
|
|
|
|
|
// public static event Action OnClientConnected;
|
|
|
|
// public static event Action OnClientDisconnected;
|
2024-10-17 17:23:05 +03:00
|
|
|
|
2024-10-17 23:09:51 +03:00
|
|
|
public override void OnStartServer()
|
|
|
|
{
|
|
|
|
Destroy(PlayerInMenu);
|
|
|
|
spawnPrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs").ToList();
|
|
|
|
}
|
2024-10-17 17:23:05 +03:00
|
|
|
|
|
|
|
// ReSharper disable Unity.PerformanceAnalysis
|
|
|
|
public override void OnStartClient()
|
|
|
|
{
|
2024-10-17 23:09:51 +03:00
|
|
|
Destroy(PlayerInMenu);
|
2024-10-17 17:23:05 +03:00
|
|
|
var spawnablePrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs");
|
|
|
|
|
|
|
|
foreach (var prefab in spawnablePrefabs)
|
|
|
|
{
|
|
|
|
NetworkClient.RegisterPrefab(prefab);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// ReSharper disable Unity.PerformanceAnalysis
|
|
|
|
public override void OnServerAddPlayer(NetworkConnectionToClient conn)
|
|
|
|
{
|
2024-10-17 23:09:51 +03:00
|
|
|
Debug.Log("OnServerAddPlayer");
|
|
|
|
if (SceneManager.GetActiveScene().name == "Menu")
|
2024-10-17 17:23:05 +03:00
|
|
|
{
|
|
|
|
NetworkRoomPlayerLobby roomPlayerInstance = Instantiate(roomPlayerPrefab);
|
|
|
|
NetworkServer.AddPlayerForConnection(conn, roomPlayerInstance.gameObject);
|
2024-10-17 23:09:51 +03:00
|
|
|
RoomPlayers.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>();
|
|
|
|
|
|
|
|
RoomPlayers.Remove(player);
|
2024-10-17 17:23:05 +03:00
|
|
|
}
|
2024-10-17 23:09:51 +03:00
|
|
|
Debug.Log("disconnected from Server");
|
|
|
|
|
|
|
|
|
|
|
|
base.OnServerDisconnect(conn);
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void OnServerChangeScene(string newSceneName)
|
|
|
|
{
|
|
|
|
if (newSceneName == "Menu")
|
|
|
|
{
|
|
|
|
Instantiate(PlayerInMenu);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void OnStopServer()
|
|
|
|
{
|
|
|
|
// Instantiate(PlayerInMenu);
|
|
|
|
RoomPlayers.Clear();
|
2024-10-17 17:23:05 +03:00
|
|
|
}
|
|
|
|
}
|