Я уже реализовал базовое поведение последователя для другого врага
// For knife soldier, simply runs at player
IEnumerable<int> FollowPlayer(float acceleration = 0.3f)
{
while (true)
{
if (!PlayerShip.Instance.IsDead)
Velocity += (PlayerShip.Instance.Position - Position) * (acceleration / (PlayerShip.Instance.Position - Position).Length());
if (Velocity != Vector2.Zero)
Orientation = PlayerShip.Instance.Position.ToAngle();
yield return 0;
}
}`
Я хочу реализовать более сложное поведение для снайпера.Он будет действовать исходя из того, что снайпер должен находиться на определенном расстоянии от игрока, прежде чем он сможет стрелять.Вот код для этого:
public static void HandleSniperShotRange()
{
float acceleration = 0.2f;
// Check whether player is within sniper range (Used for sniper behaviour)
for (int i = 0; i < enemies.Count; i++)
{
if (enemies[i].IsActive && IsCollidingSniperRange(PlayerShip.Instance, enemies[i]))
{
enemies[i].Velocity += (PlayerShip.Instance.Position - enemies[i].Position) * (acceleration / (PlayerShip.Instance.Position - enemies[i].Position).Length());
enemies[i].Orientation = PlayerShip.Instance.Position.ToAngle() * -1;
}
}
}
private static bool IsCollidingSniperRange(Entity a, Entity b)
{
float radius = a.Radius + b.Radius + 120;
return !a.IsExpired && !b.IsExpired && Vector2.DistanceSquared(a.Position, b.Position) < radius * radius;
}
Мой код в настоящее время рисует снайпер на экране, но он не будет двигаться.
Теперь я не смог поместить их обоих в один и тот жеКласс Enemy как мой класс EntityManager хранит списки всех добавленных вражеских объектов.Когда я помещал поведение снайпера в класс врага, оно работало, но все враги отступали от игрока, если он находился слишком близко.
Как я мог поместить этот код в свой класс врага или как я мог уйти?это в EntityManager, но заставить его обновлять каждый кадр и правильно взаимодействовать?
Спасибо