using Godot; namespace TheLegendOfGustav.Entities.Actors.AI; /// /// Enum das diferentes IAs disponíveis. /// public enum AIType { None, DefaultHostile }; /// /// base para as IAs do jogo. /// public abstract partial class BaseAI : Node { /// /// Corpo controlado pela IA. /// O corpo é a marionete da alma. /// protected Actor body; public override void _Ready() { base._Ready(); // Por padrão, a IA é filha do nó de seu corpo. body = GetParent(); } /// /// Computa um único turno para o ator controlado. /// Aviso: NPCs não possuem ações gratuitas. /// A IA SEMPRE precisa executar uma ação que custe energia. /// public abstract void Perform(); /// /// Utiliza o pathfinder do mapa para obter um caminho /// da posição atual do ator para um destino qualquer. /// /// Destino /// Vetor com vetores, passo a passo para chegar no destino. protected Godot.Collections.Array GetPathTo(Vector2I destination) { // Arrays do Godot são muito mais confortáveis de manipular, então // eu converto o Array do C# em um array do Godot antes de retornar o caminho. Godot.Collections.Array list = []; Vector2[] path = body.MapData.Pathfinder.GetPointPath(body.GridPosition, destination); list.AddRange(path); return list; } }