slowpoker/Assets/Scripts/CustomNetworkManager.cs

80 lines
2.3 KiB
C#
Raw Normal View History

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
}
}