in Assets/Scripts/AsteroidSpawner.cs [44:93]
private void InstantiateRandomAsteroid()
{
var asteroidsOverlap = true;
float spawnX = 0;
float spawnY = 0;
var scale = UnityEngine.Random.Range(minimumScale, maximumScale);
do
{
var randomValue = UnityEngine.Random.value;
if (randomValue > 0.75f)
{
spawnX = UnityEngine.Random.Range(minimumX - maximumScale - scale, minimumX - minimumScale - scale);
spawnY = UnityEngine.Random.Range(minimumY, maximumY);
}
else if (randomValue > 0.5f)
{
spawnX = UnityEngine.Random.Range(maximumX + minimumScale + scale, maximumX + maximumScale + scale);
spawnY = UnityEngine.Random.Range(minimumY, maximumY);
}
else if (randomValue > 0.25f)
{
spawnX = UnityEngine.Random.Range(minimumX, maximumX);
spawnY = UnityEngine.Random.Range(minimumY - maximumScale - scale, minimumY - minimumScale - scale);
}
else
{
spawnX = UnityEngine.Random.Range(minimumX, maximumX);
spawnY = UnityEngine.Random.Range(maximumY + minimumScale + scale, maximumY + maximumScale + scale);
}
// Avoiding spawning 2 asteroids on top of each other
var collidersBuffer = new Collider[16]; // TODO: move to field
var size = Physics.OverlapBoxNonAlloc(
new Vector3(spawnX, spawnY, 0), new Vector3(1, 1, 1), collidersBuffer);
asteroidsOverlap = size > 0;
} while (asteroidsOverlap);
var asteroidObject = Instantiate(asteroid, new Vector3(spawnX, spawnY, 0), Quaternion.Euler(0, 0, 0));
asteroidObject.transform.LookAt(screenCenter);
asteroidObject.transform.localScale = new Vector3(scale, scale, scale);
if (asteroidObject.gameObject.TryGetComponent<HealthController>(out var healthController))
{
healthController.health = (int)(healthController.health * scale);
healthController.currentHealth = healthController.health;
}
}