public static CircularUnit NearestEnemyUnit(Wizard self, World world) { CircularUnit nearestEnemyUnit = null; Building nearestEnemyBuilding = NearestEnemyBuilding(self, world, true); Minion nearestEnemyMinion = NearestEnemyMinion(self, world, true); Wizard nearestEnemyWizard = NearestEnemyWizard(self, world, true); nearestEnemyBuilding = nearestEnemyBuilding == null?NearestEnemyBuilding(self, world, false) : nearestEnemyBuilding; nearestEnemyMinion = nearestEnemyMinion == null?NearestEnemyMinion(self, world, false) : nearestEnemyMinion; nearestEnemyWizard = nearestEnemyWizard == null?NearestEnemyWizard(self, world, false) : nearestEnemyWizard; double minDist = world.Width; if (nearestEnemyBuilding != null && self.GetDistanceTo(nearestEnemyBuilding) < minDist) { minDist = self.GetDistanceTo(nearestEnemyBuilding); nearestEnemyUnit = nearestEnemyBuilding; } if (nearestEnemyMinion != null && self.GetDistanceTo(nearestEnemyMinion) < minDist) { minDist = self.GetDistanceTo(nearestEnemyMinion); nearestEnemyUnit = nearestEnemyMinion; } if (nearestEnemyWizard != null && self.GetDistanceTo(nearestEnemyWizard) < minDist) { minDist = self.GetDistanceTo(nearestEnemyWizard); nearestEnemyUnit = nearestEnemyWizard; } return(nearestEnemyUnit); }
public static void Circle(CircularUnit circularUnit, VisualClientColor color) { if (DebugHelper.CanDebug) { VisualClient.Instance.Circle(circularUnit.X, circularUnit.Y, (float)circularUnit.Radius, color.r, color.g, color.b); } }
private static void AttackUnit(Wizard self, Move move, World world, CircularUnit unit) { double radius = unit.Radius; move.Turn = self.GetAngleTo(unit); move.Speed = 4; //Console.WriteLine(self.GetAngleTo(unit)); if (self.GetDistanceTo(unit) < self.CastRange + radius - 100) { move.Speed = 0; move.StrafeSpeed = 0; stop = true; } if (stop) { if (self.RemainingCooldownTicksByAction[1] > 10) { move.Speed = -3; } if (self.RemainingCooldownTicksByAction[1] > 35) { move.Speed = 3; } } }
public static CircularUnit UnitForAttack(Wizard self, World world, bool mode) { double minHp = Math.Pow(10, 10); CircularUnit unitForAttack = null; foreach (Wizard wizard in world.Wizards) { if (self.GetDistanceTo(wizard) < 500 && (Find.IsClosed(self, world, wizard) || !mode) && self.Faction != wizard.Faction) { if (wizard.Life < minHp) { minHp = wizard.Life; unitForAttack = wizard; } } } foreach (Minion minion in world.Minions) { if (self.GetDistanceTo(minion) < self.CastRange - 100 && (Find.IsClosed(self, world, minion) || !mode) && self.Faction != minion.Faction && minion.Faction != Faction.Neutral) { if (minion.Life < minHp) { minHp = minion.Life; unitForAttack = minion; } } } foreach (Building building in world.Buildings) { if (self.GetDistanceTo(building) < self.CastRange - 100 && (Find.IsClosed(self, world, building) || !mode) && self.Faction != building.Faction) { if (building.Life < minHp) { minHp = building.Life; unitForAttack = building; } } } // neutral foreach (Minion minion in world.Minions) { if (self.GetDistanceTo(minion) < 40 && (Find.IsClosed(self, world, minion) || !mode) && minion.Faction == Faction.Neutral) { unitForAttack = minion; } } return(unitForAttack); }
public static void Attack(Wizard self, Move move, World world) { CircularUnit unitForAttack = Find.UnitForAttack(self, world, true) == null?Find.UnitForAttack(self, world, false) : Find.UnitForAttack(self, world, true); CircularUnit nearestEnemyUnit = Find.NearestEnemyUnit(self, world); if (unitForAttack != null) { AttackUnit(self, move, world, unitForAttack); } else if (nearestEnemyUnit != null) { AttackUnit(self, move, world, nearestEnemyUnit); } }
double getAngleTo(Wizard delf, CircularUnit unit, bool type) { double res = delf.GetAngleTo(unit); if (type) { return(res); } else if (res <= 0) { return(res + Math.PI); } else { return(res - Math.PI); } }
public static CircularUnit NearestHostile(Wizard self, World world) { CircularUnit hostile = null; double minDist = world.Width; double dist; foreach (Building h in world.Buildings) { dist = self.GetDistanceTo(h); if (self.Faction != h.Faction && dist < minDist) { minDist = dist; hostile = h; } } foreach (Wizard h in world.Wizards) { dist = self.GetDistanceTo(h); if (self.Faction != h.Faction && dist < minDist) { minDist = dist; hostile = h; } } foreach (Minion h in world.Minions) { dist = self.GetDistanceTo(h); if (self.Faction != h.Faction && dist < minDist) { if (!(h.Faction == Faction.Neutral && Math.Abs(h.GetAngleTo(self)) < Pi / 10 && (h.SpeedX > 0.2 || h.SpeedY > 0.2))) { continue; } minDist = dist; hostile = h; } } return(hostile); }
public static bool IsUnion(this CircularUnit unit, Wizard me) { return(unit.Faction == me.Faction); }
public ACircularUnit(CircularUnit unit) : base(unit) { Radius = unit.Radius; }