diff options
| author | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-08-28 00:38:48 -0300 |
|---|---|---|
| committer | Matheus <matheus.guedes.mg.m@gmail.com> | 2025-08-28 00:38:48 -0300 |
| commit | 2fb787a744d4f7a37d81233d2913a5ef39122f73 (patch) | |
| tree | f9595d6757203146aa8201a86275c2c842bae03b /scripts/actors/actions | |
| parent | 6c7e2ac133986efa57b43df52a5498c6f7efcf75 (diff) | |
Comentarios
Diffstat (limited to 'scripts/actors/actions')
| -rw-r--r-- | scripts/actors/actions/Action.cs | 24 | ||||
| -rw-r--r-- | scripts/actors/actions/BumpAction.cs | 10 | ||||
| -rw-r--r-- | scripts/actors/actions/DirectionalAction.cs | 15 | ||||
| -rw-r--r-- | scripts/actors/actions/MeleeAction.cs | 12 | ||||
| -rw-r--r-- | scripts/actors/actions/MovementAction.cs | 9 |
5 files changed, 60 insertions, 10 deletions
diff --git a/scripts/actors/actions/Action.cs b/scripts/actors/actions/Action.cs index bb5f6f1..0320dd8 100644 --- a/scripts/actors/actions/Action.cs +++ b/scripts/actors/actions/Action.cs @@ -1,16 +1,36 @@ using Godot; -using System; -using System.Data; + +/// <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 { + /// <summary> + /// O ator que realiza a ação. + /// </summary> protected Actor actor; public Action(Actor actor) { this.actor = actor; } + /// <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> public abstract void Perform(); + /// <summary> + /// É conveniente ter acesso ao mapa dentro de uma ação. + /// </summary> protected MapData Map_Data { get => actor.Map_Data; } diff --git a/scripts/actors/actions/BumpAction.cs b/scripts/actors/actions/BumpAction.cs index 5958b11..def721b 100644 --- a/scripts/actors/actions/BumpAction.cs +++ b/scripts/actors/actions/BumpAction.cs @@ -1,6 +1,10 @@ using Godot; -using System; +/// <summary> +/// Ação de "Esbarramento", utilizada principalmente pelo jogador. +/// Esta ação direcionada tentará andar para o destino, se houver um +/// ator no caminho, uma ação de ataque é gerada no lugar. +/// </summary> public partial class BumpAction : DirectionalAction { public BumpAction(Actor actor, Vector2I offset) : base(actor, offset) @@ -11,14 +15,18 @@ public partial class BumpAction : DirectionalAction { Vector2I destination = actor.GridPosition + Offset; + // Declaramos uma ação genérica. Action action; + // Se houver um ator no destino, crie uma ação de ataque. if (GetBlockingActorAtPosition(destination) != null) { action = new MeleeAction(actor, Offset); } else { + // Mas se não houver, crie uma ação de movimento. action = new MovementAction(actor, Offset); } + // Executa a ação. action.Perform(); } } diff --git a/scripts/actors/actions/DirectionalAction.cs b/scripts/actors/actions/DirectionalAction.cs index d5199f9..8c3c68f 100644 --- a/scripts/actors/actions/DirectionalAction.cs +++ b/scripts/actors/actions/DirectionalAction.cs @@ -1,14 +1,27 @@ using Godot; -using System; +/// <summary> +/// Ação direcionada. Esta ação é acompanhada com um vetor que representa uma +/// distância tendo como ponto de partida o ator. +/// </summary> public abstract partial class DirectionalAction : Action { + /// <summary> + /// Direção/distância do ator da ação. + /// Seu significado depende da ação que implementará esta classe. + /// </summary> public Vector2I Offset { get; private set; } public DirectionalAction(Actor actor, Vector2I offset) : base(actor) { Offset = offset; } + /// <summary> + /// É conveniente ter acesso à função para obter atores em uma determinada posição. + /// Este método expõe o método de mesmo nome do mapa. + /// </summary> + /// <param name="pos">Posição para verificar</param> + /// <returns>O ator naquela posição, nulo se não houver.</returns> protected Actor GetBlockingActorAtPosition(Vector2I pos) { return Map_Data.GetBlockingActorAtPosition(pos); } diff --git a/scripts/actors/actions/MeleeAction.cs b/scripts/actors/actions/MeleeAction.cs index c6d0960..cf40f1d 100644 --- a/scripts/actors/actions/MeleeAction.cs +++ b/scripts/actors/actions/MeleeAction.cs @@ -1,21 +1,27 @@ using Godot; -using System; -using System.Net.NetworkInformation; +/// <summary> +/// Ação de ataque físico. Uma ação direcionada que ataca um alvo. +/// </summary> public partial class MeleeAction : DirectionalAction { public MeleeAction(Actor actor, Vector2I offset) : base(actor, offset) { } + /// <summary> + /// Ataca o ator na direção da ação. + /// </summary> public override void Perform() { Vector2I destination = actor.GridPosition + Offset; - + // Eu te disse que este método seria útil. Actor target = GetBlockingActorAtPosition(destination); + // Se não houver um ator na direção, não podemos continuar. if (target == null) return; + // TODO: Implementar ataque. GD.Print($"Você tenta socar {target.ActorName}, mas como não sobra nada para o beta, você ainda não tem um método de ataque."); } } diff --git a/scripts/actors/actions/MovementAction.cs b/scripts/actors/actions/MovementAction.cs index 704dd4f..f86d542 100644 --- a/scripts/actors/actions/MovementAction.cs +++ b/scripts/actors/actions/MovementAction.cs @@ -1,6 +1,8 @@ using Godot; -using System; +/// <summary> +/// Ação de movimento. Movimenta o ator para a direção de seu Offset. +/// </summary> public partial class MovementAction : DirectionalAction { public MovementAction(Actor actor, Vector2I offset) : base(actor, offset) @@ -11,12 +13,13 @@ public partial class MovementAction : DirectionalAction { Vector2I finalDestination = actor.GridPosition + Offset; + // Não anda se o destino for um tile sólido. if (!Map_Data.IsTileWalkable(finalDestination)) return; + // Não anda se o destino for oculpado por um ator. + // Na maioria dos casos, essa condição nunca é verdadeira. if (GetBlockingActorAtPosition(finalDestination) != null) return; - GD.Print("What?"); - actor.Walk(Offset); } } |
