private static void DoRadiusAttack(Tower tower, List<Creep> creepsWithinRange) { var type = tower.Type; var power = tower.GetStatValue("Power"); foreach (var creep in creepsWithinRange) creep.ReceiveAttack(type, power, RadiusAttackModifier); }
private static void DamageCreepAndSurroundingCreeps(Tower tower, Creep target, List<Creep> creepsWithinRange) { if (tower.AttackType == AttackType.Circle) DoRadiusAttack(tower, creepsWithinRange); else if (tower.AttackType == AttackType.Cone) DoConeAttack(tower, target, creepsWithinRange); //else if (tower.AttackType == AttackType.DirectShot) // target.ReceiveAttack(tower.Type, tower.Power); }
private static List<Creep> FindAllCreepsWithinRangeOfTower(Tower tower, List<Creep> creeps) { float range = tower.GetStatValue("Range"); float rangeSquared = range * range; var targets = new List<Creep>(); foreach (Creep creep in creeps) { var distance = (creep.Position - tower.Position).LengthSquared; if (distance <= rangeSquared) targets.Add(creep); } return targets; }
private static void DoConeAttack(Tower tower, Creep target, List<Creep> creepsWithinRange) { Vector2D towerPosition = tower.Position.GetVector2D(); Vector2D creepPosition = target.Position.GetVector2D(); Vector2D aim = Vector2D.Normalize(creepPosition - towerPosition); float edgeDotProduct = GetEdgeDotProduct(creepPosition, towerPosition, aim); var power = tower.GetStatValue("Power"); foreach (Creep creep in creepsWithinRange) { var position = creep.Position.GetVector2D(); if (aim.DotProduct(Vector2D.Normalize(position - towerPosition)) >= edgeDotProduct) creep.ReceiveAttack(tower.Type, power, ConeAttackModifier); } }