Example #1
0
    IEnumerator SpawnWave()
    {
        bool spawning = true;

        while (spawning)
        {
            if (Time.time - waveTimer < waveTimeToWait && enemies.Count == 0)
            {
                if (Input.GetKeyDown(KeyCode.RightArrow))
                {
                    waveTimer -= waveTimeToWait;
                }
                enemyText.text = $"Time to Wave {waveNum+1}: {Mathf.Round((waveTimeToWait - (Time.time - waveTimer)))}";
            }
            else if (elevators != null)
            {
                if (enemyQueue.Count == 0 && spawnWave)
                {
                    waveNum++;

                    if (waveNum == 5)
                    {
                        SceneManager.LoadScene("MainMenu");
                        spawning = false;
                        yield return(null);
                    }

                    waveTimer = Time.time;
                    if (waveNum == 4) //5th wave = boss wave
                    {
                        SpawnBoss();
                    }
                    else
                    {
                        GenerateEnemyQueue();
                    }

                    spawnWave = false;

                    traderManager.GenerateShop();
                    traderOut = true;
                }
                else if (enemyQueue.Count == 0 && !spawnWave && enemies.Count == 0)
                {
                    spawnWave = true;
                }
                else
                {
                    if (Time.time - waveSpawnTimer < Constants.WAVEGEN_GROUP_SPAWN_TIME)
                    {
                    }
                    else
                    {
                        if (traderOut)
                        {
                            traderManager.RemoveShop();
                        }

                        int spawnNum = maxEnemyGroupSpawn;

                        if (spawnNum + enemies.Count > maxEnemiesOut)
                        {
                            spawnNum = spawnNum - ((spawnNum + enemies.Count) - maxEnemiesOut);
                        }
                        if (spawnNum > enemyQueue.Count)
                        {
                            spawnNum = enemyQueue.Count;
                        }

                        SpawnEnemyGroup(spawnNum);

                        waveSpawnTimer = Time.time;

                        enemyText.text = $"Wave: {waveNum + 1}\nEnemies Remaining: {enemyQueue.Count + enemies.Count}\nEnemies Out: {enemies.Count}";
                    }

                    yield return(new WaitForSeconds(1f));
                }
                enemyText.text = $"Wave: {waveNum+1}\nEnemies Remaining: {enemyQueue.Count + enemies.Count}\nEnemies Out: {enemies.Count}";
                yield return(new WaitForSeconds(1f));
            }
            yield return(null);
        }
    }