Example #1
0
    void Start()
    {
        waveNumber = 1;

        // First wave is delayed
        nextWaveSpawnTimer = Time.timeSinceLevelLoad + 15f;

        // Spawners
        spawnPositions = new List <Vector3>();
        foreach (Transform child in spawnerParent)
        {
            spawnPositions.Add(child.position);
        }
        nextAttackFrom = spawnPositions[UtilitiesClass
                                        .GetRandomArrayIndex(spawnPositions.Count)];
        waveCircleTrans.position = nextAttackFrom;
    }
Example #2
0
    private IEnumerator SpawnWave()
    {
        // Endgame check
        if (waveNumber <= 35)
        {
            currentSpawnRate = betweenSpawns;
        }
        else
        {
            currentSpawnRate = endgameBetweenSpawns;
        }

        // Stop Timer
        nextWaveSpawnTimer = int.MaxValue;

        // Spawer
        for (int i = 0; i < (baseWaveEnemies + waveIncreaser * waveNumber); i++)
        {
            randomPositionMultiplier.x = Random.Range(-spaceOffset, spaceOffset);
            randomPositionMultiplier.y = Random.Range(-spaceOffset, spaceOffset);
            Enemy.Create(nextAttackFrom + randomPositionMultiplier);

            yield return(new WaitForSeconds(currentSpawnRate));
        }

        // Cleanup
        waveNumber++;
        OnWaveNumberChanged?.Invoke(this, System.EventArgs.Empty);
        nextAttackFrom = spawnPositions[UtilitiesClass
                                        .GetRandomArrayIndex(spawnPositions.Count)];
        waveCircleTrans.position = nextAttackFrom;

        // New timer
        nextWaveSpawnTimer =
            Time.timeSinceLevelLoad +
            Mathf.Clamp(20 - Mathf.FloorToInt(waveNumber / 2), 5, 20);
    }