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;
|
2024-10-18 00:42:52 +03:00
|
|
|
using UnityEngine.Serialization;
|
2024-10-17 17:23:05 +03:00
|
|
|
|
|
|
|
public class CustomNetworkManager : NetworkManager
|
|
|
|
{
|
2024-10-18 00:42:52 +03:00
|
|
|
[SerializeField] public NetworkRoomPlayerLobby gamePlayerPrefab;
|
|
|
|
public List<NetworkRoomPlayerLobby> GamePlayers = new List<NetworkRoomPlayerLobby>();
|
2024-10-17 23:09:51 +03:00
|
|
|
public GameObject PlayerInMenu;
|
|
|
|
|
2024-10-18 00:42:52 +03:00
|
|
|
[Scene] public string menuScene = "Menu";
|
2024-10-17 23:09:51 +03:00
|
|
|
// 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()
|
|
|
|
{
|
2024-10-18 23:36:46 +03:00
|
|
|
if (PlayerInMenu != null && PlayerInMenu.scene.IsValid())
|
|
|
|
{
|
|
|
|
Destroy(PlayerInMenu);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Debug.LogWarning("PlayerInMenu is not a valid scene instance.");
|
|
|
|
}
|
|
|
|
|
2024-10-17 23:09:51 +03:00
|
|
|
spawnPrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs").ToList();
|
|
|
|
}
|
2024-10-17 17:23:05 +03:00
|
|
|
|
|
|
|
// ReSharper disable Unity.PerformanceAnalysis
|
|
|
|
public override void OnStartClient()
|
|
|
|
{
|
|
|
|
var spawnablePrefabs = Resources.LoadAll<GameObject>("SpawnablePrefabs");
|
|
|
|
|
|
|
|
foreach (var prefab in spawnablePrefabs)
|
|
|
|
{
|
|
|
|
NetworkClient.RegisterPrefab(prefab);
|
|
|
|
}
|
2024-10-18 23:36:46 +03:00
|
|
|
|
|
|
|
if(PlayerInMenu != null) DestroyImmediate(PlayerInMenu, true);
|
2024-10-17 17:23:05 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
// ReSharper disable Unity.PerformanceAnalysis
|
|
|
|
public override void OnServerAddPlayer(NetworkConnectionToClient conn)
|
|
|
|
{
|
2024-10-17 23:09:51 +03:00
|
|
|
Debug.Log("OnServerAddPlayer");
|
2024-10-18 00:42:52 +03:00
|
|
|
// if (SceneManager.GetActiveScene().path == menuScene)
|
|
|
|
// {
|
|
|
|
NetworkRoomPlayerLobby player = Instantiate(gamePlayerPrefab);
|
|
|
|
NetworkServer.AddPlayerForConnection(conn, player.gameObject);
|
|
|
|
GamePlayers.Add( conn.identity.GetComponent<NetworkRoomPlayerLobby>());
|
2024-10-17 23:09:51 +03:00
|
|
|
Debug.Log("Player added");
|
2024-10-18 00:42:52 +03:00
|
|
|
// }
|
2024-10-17 23:09:51 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
public override void OnServerDisconnect(NetworkConnectionToClient conn)
|
|
|
|
{
|
|
|
|
var networkIdentity = conn.identity;
|
|
|
|
|
|
|
|
if (networkIdentity != null)
|
|
|
|
{
|
|
|
|
// ReSharper disable once Unity.PerformanceCriticalCodeInvocation
|
|
|
|
var player = networkIdentity.GetComponent<NetworkRoomPlayerLobby>();
|
|
|
|
|
2024-10-18 00:42:52 +03:00
|
|
|
GamePlayers.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)
|
|
|
|
{
|
2024-10-18 00:42:52 +03:00
|
|
|
if (newSceneName == menuScene)
|
2024-10-17 23:09:51 +03:00
|
|
|
{
|
|
|
|
Instantiate(PlayerInMenu);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void OnStopServer()
|
|
|
|
{
|
|
|
|
// Instantiate(PlayerInMenu);
|
2024-10-18 00:42:52 +03:00
|
|
|
GamePlayers.Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void StartGame()
|
|
|
|
{
|
|
|
|
ServerChangeScene("Demo");
|
|
|
|
Debug.Log("GAME STARTING");
|
2024-10-17 17:23:05 +03:00
|
|
|
}
|
2024-10-18 00:42:52 +03:00
|
|
|
|
|
|
|
// 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);
|
|
|
|
// }
|
2024-10-17 17:23:05 +03:00
|
|
|
}
|