private void AttackNearbyEnemyUnits(Players player, Players otherPlayer) { foreach (var attackingUnit in UnitsByPlayer[player].OfType <IAttackingUnit>()) { if (attackingUnit.HasTarget()) { continue; } var target = SpatialUnitsByPlayer.NearestUnit(otherPlayer, attackingUnit.Position, attackingUnit.GetRange(), unit => Math.Abs(AttackModifiers.GetModifier(attackingUnit.UnitType, unit.UnitType)) >= float.Epsilon); if (target != null && target is IDamageableUnit attackedUnit) { attackingUnit.SetTarget(attackedUnit, false); } } }