summaryrefslogtreecommitdiff
path: root/scripts/Game.cs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Game.cs')
-rw-r--r--scripts/Game.cs23
1 files changed, 20 insertions, 3 deletions
diff --git a/scripts/Game.cs b/scripts/Game.cs
index 3a70e0c..b47c154 100644
--- a/scripts/Game.cs
+++ b/scripts/Game.cs
@@ -53,10 +53,21 @@ public partial class Game : Node {
// Se realmente houve uma ação, computamos um turno.
if (action != null) {
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();
- // Depois computamos os turnos dos outros atores.
- HandleEnemyTurns();
+
+ // 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);
@@ -73,7 +84,13 @@ public partial class Game : Node {
// Se o ator for um inimigo e estiver vivo, deixamos
// que sua IA faça um turno.
if (actor is Enemy enemy && enemy.IsAlive) {
- enemy.Soul.Perform();
+ // 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();
+ }
}
}
}