2024-02-19 21:00:36 +03:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
using Mirror;
|
|
|
|
using System;
|
2024-03-19 17:42:38 +03:00
|
|
|
using Characters;
|
2024-02-19 21:00:36 +03:00
|
|
|
|
|
|
|
public class NetworkGameManager : NetworkBehaviour
|
|
|
|
{
|
|
|
|
public static NetworkGameManager singleton { get; private set; }
|
|
|
|
private CustomNetworkManager networkManager;
|
2024-03-17 00:30:59 +03:00
|
|
|
|
|
|
|
public GameObject enemyPrefab;
|
|
|
|
public List<GameObject> enemyList = new List<GameObject>();
|
2024-02-19 21:00:36 +03:00
|
|
|
|
|
|
|
public GameObject winner;
|
2024-03-17 00:30:59 +03:00
|
|
|
public bool gameStart = false;
|
2024-02-19 21:00:36 +03:00
|
|
|
|
|
|
|
// public List<Pawn> alive;
|
|
|
|
// public List<Pawn> dead;
|
|
|
|
|
2024-03-17 01:02:25 +03:00
|
|
|
public event Action RestartCallback;
|
2024-02-19 21:00:36 +03:00
|
|
|
|
|
|
|
void Awake()
|
|
|
|
{
|
|
|
|
if (singleton != null && singleton != this)
|
|
|
|
{
|
|
|
|
Destroy(this);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
singleton = this;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Start()
|
|
|
|
{
|
|
|
|
networkManager = NetworkManager.singleton.GetComponent<CustomNetworkManager>();
|
|
|
|
|
|
|
|
networkManager.OnLiveStateCallback += OnLiveStateCallback;
|
|
|
|
|
|
|
|
// foreach (var playerObject in networkManager.players)
|
|
|
|
// {
|
|
|
|
// var player = playerObject.GetComponent<Pawn>();
|
|
|
|
// player.OnLiveState += OnLiveState;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
[Server]
|
|
|
|
void OnLiveStateCallback()
|
|
|
|
{
|
|
|
|
if (networkManager.dead.Count == networkManager.players.Count)
|
|
|
|
{
|
|
|
|
CmdRestartScene();
|
|
|
|
}
|
|
|
|
|
2024-03-17 00:30:59 +03:00
|
|
|
if (networkManager.alive.Count == 1 && networkManager.players.Count > 1)
|
|
|
|
{
|
|
|
|
SetWinner(networkManager.alive[0].gameObject);
|
|
|
|
}
|
2024-02-19 21:00:36 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
[ClientRpc]
|
|
|
|
public void SetWinner(GameObject gameObject)
|
|
|
|
{
|
|
|
|
winner = gameObject;
|
|
|
|
CmdRestartScene();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[ClientRpc]
|
|
|
|
void RpcResetScene()
|
|
|
|
{
|
|
|
|
RestartCallback?.Invoke();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Command(requiresAuthority = false)]
|
|
|
|
public void CmdRestartScene()
|
|
|
|
{
|
|
|
|
RpcResetScene();
|
|
|
|
networkManager.RestartScene();
|
|
|
|
}
|
|
|
|
|
2024-03-17 00:30:59 +03:00
|
|
|
private void FixedUpdate()
|
|
|
|
{
|
|
|
|
if (enemyList.Count == networkManager.maxMonsters) return;
|
|
|
|
|
|
|
|
if (networkManager.players.Count == networkManager.maxConnections)
|
|
|
|
{
|
|
|
|
for (int i = 0; i < networkManager.maxMonsters; i++)
|
|
|
|
{
|
|
|
|
GameObject go = Instantiate(enemyPrefab, new Vector3(80 + i, 0, 30.7f), Quaternion.identity);
|
|
|
|
NetworkServer.Spawn(go);
|
|
|
|
enemyList.Add(go);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-02-19 21:00:36 +03:00
|
|
|
}
|