DyatelO 1e4f5573ca 4.1 Кристаллы могут наносить урон с помощью огненных шаров.
4.2 После удара о противника должен проигрываться эффект удара.
4.3 У кристаллов изначально 3800 HP и урон 440 HP.
4.4 (ЧАСТИЧНО!) После постройки кристаллы не видимы для противников.
4.5 Кристалл стреляет без ограничений с перерывом в 2 сек.

Добавлены поля в PlayerState для метода Update.
2021-11-05 09:10:56 +03:00

93 lines
2.3 KiB
C#

using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class GameManager : MonoBehaviour
{
#region Static Fields
public static List<PlayerState> players = new List<PlayerState>();
public static List<PlayerState> activePlayers = new List<PlayerState>();
public static List<PlayerState> tempDeadPlayers = new List<PlayerState>();
public static List<TileOwner> deadOwners = new List<TileOwner>();
public static int coinsPerTree = 50;
#endregion
[SerializeField] private TextMeshProUGUI _coinText;
private void Awake()
{
activePlayers.Clear();
tempDeadPlayers.Clear();
players.Clear();
DeathChecker.OnPlayerDeath += KillPlayer;
DeathChecker.OnPlayerRes += ResPlayer;
DeathChecker.OnPlayerDeathPermanent += DestroyPermanent;
GameData.OnCoinsCollected += UpdateCoinUI;
players = FindPlayers();
SetupActivePlayers(players);
}
private void UpdateCoinUI()
{
_coinText.text = GameData.coins.ToString();
}
private void SetupActivePlayers(List<PlayerState> allPlayers)
{
foreach (var player in allPlayers)
{
activePlayers.Add(player);
}
}
private void KillPlayer(PlayerState deadPlayer)
{
activePlayers.Remove(deadPlayer);
tempDeadPlayers.Add(deadPlayer);
}
private void ResPlayer(PlayerState resPlayer)
{
activePlayers.Add(resPlayer);
tempDeadPlayers.Remove(resPlayer);
}
private void DestroyPermanent(PlayerState deadPlayer)
{
Debug.Log("destroyed perm " + deadPlayer.name);
activePlayers.Remove(deadPlayer);
players.Remove(deadPlayer);
foreach (var player in activePlayers)
{
player.ResetEnemies();
}
deadOwners.Add(deadPlayer.ownerIndex);
}
private List<PlayerState> FindPlayers()
{
List<PlayerState> resultPlayerList = new List<PlayerState>();
var players = FindObjectsOfType<PlayerState>();
foreach (var player in players)
{
resultPlayerList.Add(player);
}
return resultPlayerList;
}
}
public enum TileOwner
{
Neutral = 0,
Ariost = 1,
Ragnar = 2,
Emir = 3,
Asvald = 4,
Tower = 5
}