From 6f2c2edd52171a4df7f35de695c9b2e7801d3e5f Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 4 Sep 2025 16:58:58 -0300 Subject: Preparação para itens MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/entities/Entity.cs | 82 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 scripts/entities/Entity.cs (limited to 'scripts/entities/Entity.cs') 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 { + /// + /// A definição da entidade possui caracterísitcas padrões que definem + /// a entidade em questão. + /// + private EntityDefinition definition; + + /// + /// É conveniente ter acesso ao mapa dentro da entidade. Isto porque ela existe dentro + /// do mapa, então é necessário ter acesso à algumas informações. + /// + public MapData Map_Data { get; set; } + + private Vector2I gridPosition = Vector2I.Zero; + /// + /// Posição da entidade no mapa do jogo. Diferentemente de Position, GridPosition tem como formato + /// os tiles do mapa. + /// + 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; + /// + /// Se a entidade bloqueia movimento (não pode oculpar a mesma célula de outra entidade.) + /// + public bool BlocksMovement { + get => blocksMovement; + protected set { + blocksMovement = value; + } + } + + private string displayName; + /// + /// Nome da entidade. + /// + 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); + } + + /// + /// 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. + /// + /// A definição do ator. + 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 -- cgit v1.2.3