Files
GaulishVillage/GaulishVillage/Entity/Npc/Trainable/Trainable.cs
2025-11-30 13:03:47 +01:00

65 lines
1.4 KiB
C#

namespace GaulishVillage;
public abstract class Trainable : Entity
{
public bool IsReturning = false;
public Trainable(Board board) : base(board) {}
public override void Act()
{
if (IsReturning)
ReturnToTownHall();
else
AttackEnemies();
}
protected void AttackEnemies()
{
Enemy closest = null;
int minDist = int.MaxValue;
foreach (var e in Board.Entities)
{
if (e is Enemy enemy)
{
int dist = Utils.ManhattanDistance(X, Y, enemy.X, enemy.Y);
if (dist < minDist)
{
minDist = dist;
closest = enemy;
}
}
}
if (closest != null)
{
if (X < closest.X) X++;
else if (X > closest.X) X--;
else if (Y < closest.Y) Y++;
else if (Y > closest.Y) Y--;
if (X == closest.X && Y == closest.Y)
{
Board.Entities.Remove(closest);
IsReturning = true;
}
}
else
{
IsReturning = true;
}
}
protected void ReturnToTownHall()
{
var th = Board.TownHall;
if (X < th.X) X++;
else if (X > th.X) X--;
else if (Y < th.Y) Y++;
else if (Y > th.Y) Y--;
if (X == th.X && Y == th.Y)
IsReturning = false;
}
}