slowpoker/Assets/Scripts/Network/CustomNetworkManager.cs

117 lines
3.6 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;
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
}