summaryrefslogtreecommitdiff
path: root/scripts/entities/Entity.cs
diff options
context:
space:
mode:
authorMatheus <matheus.guedes.mg.m@gmail.com>2025-09-04 16:58:58 -0300
committerMatheus <matheus.guedes.mg.m@gmail.com>2025-09-04 16:58:58 -0300
commit6f2c2edd52171a4df7f35de695c9b2e7801d3e5f (patch)
tree509002136987182309a934623b19d19393e306e3 /scripts/entities/Entity.cs
parent9953c9a5818baa392a48a4d18339c73f3b7a814e (diff)
Preparação para itens
Diffstat (limited to 'scripts/entities/Entity.cs')
-rw-r--r--scripts/entities/Entity.cs82
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/entities/Entity.cs b/scripts/entities/Entity.cs
new file mode 100644
index 0000000..fb83f90
--- /dev/null
+++ b/scripts/entities/Entity.cs
@@ -0,0 +1,82 @@
+using Godot;
+
+public partial class Entity : Sprite2D {
+ /// <summary>
+ /// A definição da entidade possui caracterísitcas padrões que definem
+ /// a entidade em questão.
+ /// </summary>
+ private EntityDefinition definition;
+
+ /// <summary>
+ /// É conveniente ter acesso ao mapa dentro da entidade. Isto porque ela existe 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 da entidade 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;
+ }
+
+ private bool blocksMovement;
+ /// <summary>
+ /// Se a entidade bloqueia movimento (não pode oculpar a mesma célula de outra entidade.)
+ /// </summary>
+ public bool BlocksMovement {
+ get => blocksMovement;
+ protected set {
+ blocksMovement = value;
+ }
+ }
+
+ private string displayName;
+ /// <summary>
+ /// Nome da entidade.
+ /// </summary>
+ public string DisplayName {
+ get => displayName;
+ protected set {
+ displayName = value;
+ }
+ }
+
+ public override void _Ready()
+ {
+ base._Ready();
+ // Quando a entidade for carregada completamente, atualizamos sua posição para refletir
+ // sua posição real.
+ GridPosition = Grid.WorldToGrid(Position);
+ }
+
+ public Entity(Vector2I initialPosition, MapData map, EntityDefinition definition) {
+ GridPosition = initialPosition;
+ Map_Data = map;
+ Centered = false;
+
+ 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(EntityDefinition definition) {
+ this.definition = definition;
+ BlocksMovement = definition.blocksMovement;
+ DisplayName = definition.name;
+ ZIndex = 1;
+ Texture = definition.texture;
+ }
+} \ No newline at end of file