public void Action(MyAI _player) { //Если цели ещё нет, то запрашиваем её. if (this.Target.X == -1) { this.Target = _player.GetBattleTarget(this.Location); } //Проверяем список противников. Если кто-то достаточно близко, останавливаемся. if (_player.OtherNanoBotsInfo != null) { foreach (NanoBotInfo botEnemy in _player.OtherNanoBotsInfo) { if (botEnemy.PlayerID == 0) { Distance = _player.GeomDist(botEnemy.Location, this.Location); if (Distance < this.DefenseDistance) { this.StopMoving(); } } } } if (this.State == NanoBotState.WaitingOrders) { //Ищем ближайшую цель MinDistance = 1000; if (_player.OtherNanoBotsInfo != null) { foreach (NanoBotInfo botEnemy in _player.OtherNanoBotsInfo) { if (botEnemy.PlayerID == 0) { this.Distance = _player.GeomDist(botEnemy.Location, this.Location); //Если вражеский AI достаточно близко, то он пользуется абсолютным приоритетом! if ((botEnemy.NanoBotType == NanoBotType.NanoAI) && (Distance < this.DefenseDistance)) { MinDistance = -1; ShootAt = botEnemy.Location; } if (Distance < MinDistance) { MinDistance = Distance; ShootAt = botEnemy.Location; } } } } //Если противник близко, то стреляем в него. if (MinDistance < this.DefenseDistance) { this.DefendTo(ShootAt, 3); return; } //Если не дошли до цели - идём к ней. if (this.Target != this.Location) { //string str = "Defender[" + this.ID.ToString() +"] X: " + this.Location.X.ToString() + " Y: " + this.Location.Y.ToString() + "\n"; //Debugger.Log(2, "Local", str); MoveTo(_player.Pathfinder.FindPath(this.Location, Target)); return; } } }