summaryrefslogtreecommitdiff
path: root/scripts/Game.cs
diff options
context:
space:
mode:
authorMatheus <matheus.guedes.mg.m@gmail.com>2025-08-31 09:51:19 -0300
committerMatheus <matheus.guedes.mg.m@gmail.com>2025-08-31 09:51:19 -0300
commitd7d2454d5ccc1e0acb47cb679c7550e74c4e1916 (patch)
treed00941e010a0e84eca966fc8a0cdef0e67ebeedb /scripts/Game.cs
parentdac21a6dcb74be03dc1cde0798d09042beb558c9 (diff)
Sistema de turnos separado
Diffstat (limited to 'scripts/Game.cs')
-rw-r--r--scripts/Game.cs52
1 files changed, 11 insertions, 41 deletions
diff --git a/scripts/Game.cs b/scripts/Game.cs
index 981699d..58a5957 100644
--- a/scripts/Game.cs
+++ b/scripts/Game.cs
@@ -18,6 +18,10 @@ public partial class Game : Node {
/// Objeto para obter input do usuário.
/// </summary>
private InputHandler inputHandler;
+ /// <summary>
+ /// Gerenciador de turnos
+ /// </summary>
+ private TurnManager turnManager;
private UI ui;
@@ -41,6 +45,8 @@ public partial class Game : Node {
Map.Generate(player);
Map.UpdateFOV(player.GridPosition);
+
+ turnManager = new(Map);
}
/// <summary>
@@ -55,48 +61,12 @@ public partial class Game : Node {
// Pegamos uma ação do usuário
Action action = inputHandler.GetAction(player);
- // Se realmente houve uma ação ou se o jogador não puder agir, computamos um turno.
- if (action != null || player.Energy < 0) {
- Vector2I previousPlayerPos = player.GridPosition;
-
- // Início do turno, o jogador recebe um pouco de energia.
- if (player.Energy <= 0) {
- player.RechargeEnergy();
- }
-
- // Primeiro executamos a ação do jogador
- action?.Perform();
-
- // Se o jogador ainda tem energia, ele poderá fazer
- // mais um turno sem interrupções.
- if (player.Energy <= 0) {
- // Depois computamos os turnos dos outros atores.
- HandleEnemyTurns();
- }
- // Por fim, se o jogador mudou de lugar, atualizamos seu campo de visão.
- if (player.GridPosition != previousPlayerPos) {
- Map.UpdateFOV(player.GridPosition);
- }
+ if (action != null) {
+ turnManager.InsertPlayerAction(action);
}
- }
- /// <summary>
- /// Executa turnos para cada ator no mapa.
- /// </summary>
- private void HandleEnemyTurns() {
- foreach (Actor actor in Map.Map_Data.Actors) {
- if (actor is Player) continue;
- // Se o ator for um inimigo e estiver vivo, deixamos
- // que sua IA faça um turno.
- if (actor is Enemy enemy && enemy.IsAlive) {
- // Início do turno, inimigo recebe energia.
- enemy.RechargeEnergy();
-
- // O inimigo poderá fazer quantos turnos sua energia deixar.
- while (enemy.Energy > 0) {
- enemy.Soul.Perform();
- }
- }
- }
+ // Computamos um turno.
+ turnManager.Tick();
}
+
}