diff options
| author | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-09-04 17:20:48 -0300 |
|---|---|---|
| committer | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-09-04 17:20:48 -0300 |
| commit | 147bb12b5d48c5432aa1bd1cbe60b8435294445b (patch) | |
| tree | ef76e9404d7125b370a4c370603e242e4fd0d6b7 /scripts | |
| parent | 396c0788cea3bc68022c4bc5a96c82e058bc9b93 (diff) | |
Ações gratuitas são mais explícitas
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/Time/TurnManager.cs | 9 | ||||
| -rw-r--r-- | scripts/entities/actions/Action.cs | 3 | ||||
| -rw-r--r-- | scripts/entities/actions/BumpAction.cs | 4 | ||||
| -rw-r--r-- | scripts/entities/actions/MeleeAction.cs | 7 | ||||
| -rw-r--r-- | scripts/entities/actions/MovementAction.cs | 8 | ||||
| -rw-r--r-- | scripts/entities/actions/WaitAction.cs | 3 |
6 files changed, 20 insertions, 14 deletions
diff --git a/scripts/Time/TurnManager.cs b/scripts/Time/TurnManager.cs index fd16f0f..01efc18 100644 --- a/scripts/Time/TurnManager.cs +++ b/scripts/Time/TurnManager.cs @@ -50,17 +50,18 @@ public partial class TurnManager : RefCounted StartTurn(); } + bool actionResult = true;; // Primeiro executamos a ação do jogador, se ele puder. if (playerActionQueue.Count > 0 && Player.Energy > 0) { Action action = playerActionQueue[0]; playerActionQueue.RemoveAt(0); - action.Perform(); + actionResult = action.Perform(); } - // Se o jogador ainda tem energia, ele poderá fazer - // mais um turno sem interrupções. - if (Player.Energy <= 0) { + // Se a ação do jogador for gratuita ou se o jogador ainda possuir energia, + // ele poderá fazer mais um turno sem interrupções. + if (actionResult && Player.Energy <= 0) { // Depois computamos os turnos dos outros atores. HandleEnemyTurns(); map.UpdateFOV(Player.GridPosition); diff --git a/scripts/entities/actions/Action.cs b/scripts/entities/actions/Action.cs index f20e262..3f15105 100644 --- a/scripts/entities/actions/Action.cs +++ b/scripts/entities/actions/Action.cs @@ -31,7 +31,8 @@ public abstract partial class Action : RefCounted { /// </code> /// </example> /// </summary> - public abstract void Perform(); + /// <returns>Se a ação foi executada ou não.</returns> + public abstract bool Perform(); /// <summary> /// É conveniente ter acesso ao mapa dentro de uma ação. diff --git a/scripts/entities/actions/BumpAction.cs b/scripts/entities/actions/BumpAction.cs index bee202b..fa2605f 100644 --- a/scripts/entities/actions/BumpAction.cs +++ b/scripts/entities/actions/BumpAction.cs @@ -13,7 +13,7 @@ public partial class BumpAction : DirectionalAction // Como esta ação inevitavelmente gera outras ações, // não faz sentido descontar a energia do ator. - public override void Perform() + public override bool Perform() { // Declaramos uma ação genérica. Action action; @@ -27,6 +27,6 @@ public partial class BumpAction : DirectionalAction } // Executa a ação. - action.Perform(); + return action.Perform(); } } diff --git a/scripts/entities/actions/MeleeAction.cs b/scripts/entities/actions/MeleeAction.cs index 6dfeb78..09c5cc7 100644 --- a/scripts/entities/actions/MeleeAction.cs +++ b/scripts/entities/actions/MeleeAction.cs @@ -12,14 +12,14 @@ public partial class MeleeAction : DirectionalAction /// <summary> /// Ataca o ator na direção da ação. /// </summary> - public override void Perform() + public override bool Perform() { // Eu te disse que este método seria útil. Entity potentialTarget = GetTarget(); // Só podemos atacar atores. if (potentialTarget is not Actor) { - return; + return false; } Actor target = (Actor)potentialTarget; @@ -27,7 +27,7 @@ public partial class MeleeAction : DirectionalAction // Se não houver um ator na direção, não podemos continuar. // Isto é uma ação gratuita. - if (target == null) return; + if (target == null) return false; // não podemos ter dano negativo. int damage = actor.Atk - target.Def; @@ -43,5 +43,6 @@ public partial class MeleeAction : DirectionalAction MessageLogData.Instance.AddMessage(attackDesc); actor.Energy -= cost; + return true; } } diff --git a/scripts/entities/actions/MovementAction.cs b/scripts/entities/actions/MovementAction.cs index 2c394fc..403ec0a 100644 --- a/scripts/entities/actions/MovementAction.cs +++ b/scripts/entities/actions/MovementAction.cs @@ -9,16 +9,18 @@ public partial class MovementAction : DirectionalAction { } - public override void Perform() + public override bool Perform() { // Não anda se o destino for um tile sólido. - if (!Map_Data.GetTile(Destination).IsWalkable) return; + if (!Map_Data.GetTile(Destination).IsWalkable) return true; // Não anda se o destino for oculpado por um ator. // Na maioria dos casos, essa condição nunca é verdadeira. - if (GetTarget() != null) return; + if (GetTarget() != null) return true; actor.Walk(Offset); actor.Energy -= cost; + + return true; } } diff --git a/scripts/entities/actions/WaitAction.cs b/scripts/entities/actions/WaitAction.cs index 2d3ccc2..c26d884 100644 --- a/scripts/entities/actions/WaitAction.cs +++ b/scripts/entities/actions/WaitAction.cs @@ -9,7 +9,7 @@ public partial class WaitAction : Action { } - public override void Perform() + public override bool Perform() { //-=-==============================================-======++++*@@%*+#%%+*%%#*#%%@%**%%#=:+%@%=--.....::::@@@:................... #@----::@@@@@@@@@@@@@ //--============--===========================================+@. :@ =% @ :* @#= @@*........@@@:................ .::::::@@@@@@@@@@@@ @@ -97,6 +97,7 @@ public partial class WaitAction : Action //@@@@@@@@@@@======++====+*%@@@@%%%@@@@%*+#@@@@@%#%@@#=+**=. =**+=***==*#*: :%@@@@@@@@@**=+#*==*###*=. -=**+::@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@+==+==++=====++=====++=+++++++++===+++++#% +@@@* :#%= =@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ actor.Energy -= cost; + return true; } |
