using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public class TurnHandler : MonoBehaviour { #region Statication public static TurnHandler instance; private void Awake() { if (instance != null && instance != this) { Destroy(gameObject); return; } instance = this; } #endregion [Header("Entity Lists")] public List playerEntities = new(); public List enemyEntities = new(); public enum GameState {PlayerTurn, EnemyTurn} public GameState currentGameState = GameState.PlayerTurn; private int currentEnemy = 0; [Header("Spawning")] [SerializeField] private int enemySpawnAmount; private void SortEnemies() { enemyEntities = enemyEntities.OrderBy(o=>o.turnSpeed).ToList(); } private void Start() { SortEnemies(); } public void UpdateTurns() { if (currentGameState == GameState.PlayerTurn) { foreach (PlayerEntity player in playerEntities) { if (!player.hasMoved || !player.hasAttacked) { return; } } currentGameState = GameState.EnemyTurn; if (!enemyEntities[0]) { EndRound(); } else { enemyEntities[0].StartTurn(); } } else if (currentGameState == GameState.EnemyTurn) { currentEnemy++; if (currentEnemy > enemyEntities.Count - 1) { EndRound(); return; } enemyEntities[currentEnemy].StartTurn(); } } private void EndRound() { EnvironmentTurn(); currentEnemy = 0; currentGameState = GameState.PlayerTurn; foreach (PlayerEntity player in playerEntities) { player.hasMoved = false; player.hasAttacked = false; } } public void EnvironmentTurn() { EnemySpawner.instance.SpawnEnemy(enemySpawnAmount); } public void SkipAll() { foreach (PlayerEntity player in playerEntities) { player.hasMoved = true; player.hasAttacked = true; } UpdateTurns(); } }