private void InstantiateRandomAsteroid()

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;
        }
    }