summaryrefslogtreecommitdiff
path: root/scripts/actors/Actor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/actors/Actor.cs')
-rw-r--r--scripts/actors/Actor.cs63
1 files changed, 63 insertions, 0 deletions
diff --git a/scripts/actors/Actor.cs b/scripts/actors/Actor.cs
index 199c301..9257bdc 100644
--- a/scripts/actors/Actor.cs
+++ b/scripts/actors/Actor.cs
@@ -1,39 +1,76 @@
using Godot;
+/// <summary>
+/// A classe de ator define um personagem no jogo.
+/// </summary>
[GlobalClass]
public abstract partial class Actor : Sprite2D
{
+ /// <summary>
+ /// A definição do ator possui caracterísitcas padrões que definem
+ /// o ator em questão.
+ /// </summary>
protected ActorDefinition definition;
+ /// <summary>
+ /// É conveniente ter acesso ao mapa dentro do ator. Isto porque suas ações são feitas dentro
+ /// do mapa, então é necessário ter acesso à algumas informações.
+ /// </summary>
public MapData Map_Data { get; set; }
+
private Vector2I gridPosition = Vector2I.Zero;
+ /// <summary>
+ /// Posição do ator no mapa do jogo. Diferentemente de Position, GridPosition tem como formato
+ /// os tiles do mapa.
+ /// </summary>
public Vector2I GridPosition {
set {
gridPosition = value;
+ // O sistema de coordenadas do Godot é em pixels, mas faz mais sentido para o jogo utilizar coordenadas em tiles.
+ // Esta propriedade converte um sistema para o outro automaticamente.
Position = Grid.GridToWorld(value);
}
get => gridPosition;
}
+ /// <summary>
+ /// Se o ator bloqueia movimento (não pode oculpar a mesma célula de outro ator.)
+ /// </summary>
public bool BlocksMovement {
get => definition.blocksMovement;
}
+ /// <summary>
+ /// Nome do ator.
+ /// </summary>
public string ActorName {
get => definition.name;
}
private int hp;
+ /// <summary>
+ /// HP máximo do ator.
+ /// </summary>
public int MaxHp { get; private set; }
+ /// <summary>
+ /// HP atual do ator.
+ /// </summary>
public int Hp {
get => hp;
set {
+ // Esta propriedade impede que o HP seja maior que o máximo.
hp = int.Clamp(value, 0, MaxHp);
}
}
private int mp;
+ /// <summary>
+ /// Máximo de mana do ator.
+ /// </summary>
public int MaxMp { get; private set; }
+ /// <summary>
+ /// Mana atual do ator.
+ /// </summary>
public int Mp {
get => mp;
set {
@@ -41,22 +78,42 @@ public abstract partial class Actor : Sprite2D
}
}
+ /// <summary>
+ /// Estatística de ataque
+ /// </summary>
public int Atk { get; private set; }
+ /// <summary>
+ /// Estatística de defesa.
+ /// </summary>
public int Def { get; private set; }
+ /// <summary>
+ /// Estatística mental.
+ /// </summary>
public int Men { get; private set; }
public override void _Ready()
{
base._Ready();
+ // Quando o ator for carregado completamente, atualizamos sua posição para refletir
+ // sua posição real.
GridPosition = Grid.WorldToGrid(Position);
}
+ /// <summary>
+ /// Move o ator para uma localização. Veja MovementAction.
+ /// </summary>
+ /// <param name="offset">Vetor que parte da posição do ator até o seu destino.</param>
public void Walk(Vector2I offset) {
+ // Cada ator tem um peso no sistema de pathfinding.
+ // Sempre que ele se mover, removemos seu peso da posição antiga
Map_Data.UnregisterBlockingActor(this);
GridPosition += offset;
+ // E colocamos na próxima.
Map_Data.RegisterBlockingActor(this);
+ // Este peso influencia o algoritmo de pathfinding.
+ // Atores evitam caminhos bloqueados. por outros atores.
}
public Actor(Vector2I initialPosition, MapData map, ActorDefinition definition) {
@@ -67,6 +124,12 @@ public abstract partial class Actor : Sprite2D
SetDefinition(definition);
}
+ /// <summary>
+ /// Aplica uma definição de NPC para o ator.
+ /// Se o ator for um boneco de barro, este método é como um
+ /// sopro de vida.
+ /// </summary>
+ /// <param name="definition">A definição do ator.</param>
public virtual void SetDefinition(ActorDefinition definition) {
this.definition = definition;
Texture = definition.texture;