protected override void MoveToAttackAction(float dt) {
// Если очень близко есть союзники, меняем угол движения
float moveAngleChange = 0f;
List<Entity> enemies =
Parent.Children.Where(x => ((x != null) && x.Tag == Tags.Enemy))
.Cast<Entity>()
.OrderBy(DistanceTo)
.ToList();
if (enemies.Count > 2) {
if (DistanceTo(enemies[2]) < 100) {
moveAngleChange = -AngleTo(enemies[2].Position)/CCRandom.Next(1, 4);
}
}
// Если в зоне атаки - атакуем
if (Target != null && DistanceTo(Target) < AttackRadius && AttackCooldownCounter == 0) {
ActionState = ActionState.Attack;
} // Если далеко - идем к цели
else if (Target != null &&
DistanceTo(Target) < SightRadius*1.5f && DistanceTo(Target) > AttackRadius*0.7f) {
MoveByAngle(AngleTo(Target.Position) + moveAngleChange, Speed*dt);
}
else {
Target = null;
ActionState = ActionState.Idle;
}
}