summaryrefslogtreecommitdiff
path: root/scripts/Entities/Actions/Action.cs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Entities/Actions/Action.cs')
-rw-r--r--scripts/Entities/Actions/Action.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/Entities/Actions/Action.cs b/scripts/Entities/Actions/Action.cs
new file mode 100644
index 0000000..b2d6a4b
--- /dev/null
+++ b/scripts/Entities/Actions/Action.cs
@@ -0,0 +1,69 @@
+using Godot;
+using TheLegendOfGustav.Entities.Actors;
+using TheLegendOfGustav.Map;
+
+namespace TheLegendOfGustav.Entities.Actions;
+
+/// <summary>
+/// <c>Action</c> representa uma ação no jogo efetuada por um ator.
+/// Ações são geradas pelo jogador e pela IA, elas regem os atores do jogo.
+/// </summary>
+public abstract partial class Action : RefCounted
+{
+ private Actor actor;
+
+ private int cost;
+
+ public Action(Actor actor)
+ {
+ Actor = actor;
+ // Custo base, subclasses podem sobreescrever isto se quiserem.
+ Cost = 10;
+ }
+
+ /// <summary>
+ /// O ator que realiza a ação.
+ /// </summary>
+ public Actor Actor
+ {
+ get => actor;
+ private set
+ {
+ actor = value;
+ }
+ }
+
+ /// <summary>
+ /// O custo da ação.
+ /// </summary>
+ protected int Cost
+ {
+ get => cost;
+ set
+ {
+ cost = value;
+ }
+ }
+
+ /// <summary>
+ /// É conveniente ter acesso ao mapa dentro de uma ação.
+ /// </summary>
+ protected MapData MapData
+ {
+ get => actor.MapData;
+ }
+
+ /// <summary>
+ /// Método que executa a ação. Subclasses da ação devem implementar este método.
+ /// <example>
+ /// Exemplo:
+ /// <code>
+ /// Action action = new Action(actor);
+ /// /* . . . */
+ /// action.Perform();
+ /// </code>
+ /// </example>
+ /// </summary>
+ /// <returns>Se a ação foi executada ou não.</returns>
+ public abstract bool Perform();
+}