void setNewSpawnPosition(float cameraTopY, Enemy enemy) { Vector2 spawnPosition = Vector2.Zero; if (enemy is Orange) { ((Orange)enemy).initialize(); spawnPosition.Y = enemy.positionY; } else { spawnPosition.Y = cameraTopY + enemy.getRadius(); } bool found = false; float allowedDistance = enemy.getRadius(); float allowedDistanceSquared; int step = -1; do { ++step; allowedDistance += 5.0f; allowedDistanceSquared = allowedDistance * allowedDistance; spawnPosition.X = Calc.randomScalar(zone.Left, zone.Right); for (int i = 0; i < spawnPositions.Length; ++i) { if (Vector2.DistanceSquared(spawnPosition, spawnPositions[i]) > allowedDistanceSquared) { found = true; break; } } } while (!found); enemy.position2D = spawnPosition; }