ProjectZ/Assets/Scripts/Network/CustomNetworkManager.cs

151 lines
3.5 KiB
C#
Raw Normal View History

2024-02-19 21:00:36 +03:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mirror;
2024-03-19 17:42:38 +03:00
using Characters;
2024-02-19 21:00:36 +03:00
using System;
public class CustomNetworkManager : NetworkManager
{
public List<GameObject> players;
// public event Action RestartCallback;
public List<Pawn> alive;
public List<Pawn> dead;
public event Action OnSceneChanged;
public event Action OnLiveStateCallback;
2024-03-20 18:03:21 +03:00
public event Action OnPlayerSpawned;
2024-02-19 21:00:36 +03:00
private float _restartTime = 5f;
2024-03-17 00:30:59 +03:00
public int maxMonsters;
2024-02-19 21:00:36 +03:00
public override void OnServerSceneChanged(string sceneName)
{
// foreach (var player in players)
// {
// player.GetComponent<Pawn>().OnLiveState -= OnLiveState;
// }
base.OnServerSceneChanged(sceneName);
players.Clear();
alive.Clear();
dead.Clear();
foreach (NetworkConnectionToClient conn in NetworkServer.connections.Values)
{
NetworkServer.SetClientReady(conn);
NetworkClient.ready = true;
if (conn.identity != null)
{
this.OnServerAddPlayer(conn);
}
}
OnSceneChanged?.Invoke();
}
2024-03-21 18:28:37 +03:00
// public void OnConnectedToServer()
// {
// print("OnConnectedToServer");
// if (players.Count == maxConnections)
// {
//
// }
// }
// public override void OnServerConnect(NetworkConnectionToClient conn)
// {
// print(conn.address);
// }
2024-03-20 18:03:21 +03:00
2024-02-19 21:00:36 +03:00
public override void OnServerAddPlayer(NetworkConnectionToClient conn)
{
base.OnServerAddPlayer(conn);
players.Add(conn.identity.gameObject);
Pawn player = conn.identity.GetComponent<Pawn>();
player.OnLiveState += OnLiveState;
2024-03-20 18:03:21 +03:00
OnPlayerSpawned?.Invoke();
2024-02-19 21:00:36 +03:00
}
public override void OnServerDisconnect(NetworkConnectionToClient conn)
{
players.Remove(conn.identity.gameObject);
Pawn player = conn.identity.GetComponent<Pawn>();
player.OnLiveState -= OnLiveState;
if (alive.Contains(player))
alive.Remove(player);
if (dead.Contains(player))
dead.Remove(player);
base.OnServerDisconnect(conn);
}
[Server]
public void CallLiveStateCallback()
{
OnLiveStateCallback?.Invoke();
}
[Server]
private void OnLiveState(Pawn player, bool state)
{
if (state)
{
if (!alive.Contains(player))
alive.Add(player);
if (dead.Contains(player))
dead.Remove(player);
}
else
{
if (alive.Contains(player))
alive.Remove(player);
if (!dead.Contains(player))
dead.Add(player);
}
CallLiveStateCallback();
}
[Server]
public void RestartScene()
{
StartCoroutine(RestartTimer());
}
2024-03-21 15:16:40 +03:00
string getLevelById(Int32 id)
{
switch (id)
{
case 0 :
return "Assets/Scenes/Space.unity";
case 1 :
return "Assets/Scenes/Procedural.unity";
default:
return "Assets/Scenes/Space.unity";
}
}
2024-02-19 21:00:36 +03:00
2024-03-21 15:16:40 +03:00
// ReSharper disable Unity.PerformanceAnalysis
2024-02-19 21:00:36 +03:00
IEnumerator RestartTimer()
{
yield return new WaitForSeconds(_restartTime);
2024-03-20 23:26:02 +03:00
2024-03-21 15:16:40 +03:00
print(PlayerPrefs.GetInt("Level"));
2024-02-19 21:00:36 +03:00
2024-03-21 15:16:40 +03:00
ServerChangeScene( getLevelById(PlayerPrefs.GetInt("Level")));
2024-02-19 21:00:36 +03:00
StopCoroutine(RestartTimer());
}
}