LunarInfantry/Assets/Scripts/TurnHandler.cs
2026-01-11 21:27:27 -08:00

104 lines
2.4 KiB
C#

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<PlayerEntity> playerEntities = new();
public List<Enemy> 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;
}
}
if (enemyEntities.Count == 0)
{
EndRound();
}
else
{
currentGameState = GameState.EnemyTurn;
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();
}
}