Ejemplo n.º 1
0
    private void WaveCheck()
    {
        waveTimer -= Time.deltaTime;

        if (allowWave)
        {
            if (waveTimer != 0)
            {
                if (currentWave > 0)
                {
                    Item random = possibleItems.items[UnityEngine.Random.Range(0, possibleItems.items.Length)];
                    Instantiate(random, waveRewardLocation.position, Quaternion.identity);

                    waveTimer = timeUntilWave;
                }

                if (currentWave >= maxWaves)
                {
                    Item random = possibleItems.items[UnityEngine.Random.Range(0, possibleItems.items.Length)];
                    OnStageReward(random, random, random);

                    Destroy(gameObject);
                }
            }

            if (Input.GetKeyDown(KeyCode.E) || waveTimer <= 0)
            {
                OnWaveChange?.Invoke(diffcultyScale);

                currentWave++;
                waveTimer = 0;
                allowWave = false;
            }
        }
    }
Ejemplo n.º 2
0
    IEnumerator SpawnEnemies()
    {
        yield return(new WaitForSeconds(waveInfo.secondsBeforeEnemiesSpawns));

        foreach (Wave wave in waveInfo.waves)
        {
            OnWaveChange?.Invoke(true);
            waveText.text = string.Format("Wave {0}", (++waveCount).ToString());

            //Add all enemies to spawn for current wave
            foreach (EnemyInfo enemy in wave.enemies)
            {
                int number = Random.Range(enemy.minNumber, enemy.maxNumber);
                for (int i = 0; i < number; i++)
                {
                    enemiesToSpawn.Add(enemy);
                }
            }

            enemyCount = enemiesToSpawn.Count;

            //Spawn enemies
            for (int i = enemiesToSpawn.Count - 1; i >= 0; i--)
            {
                yield return(new WaitForSeconds(wave.secondsBetweenEnemies));

                EnemyInfo enemy = enemiesToSpawn[Random.Range(0, enemiesToSpawn.Count)];
                enemiesToSpawn.Remove(enemy);
                Transform spawnpoint = waveInfo.enemySpawnpoints[(int)enemy.enemySize].
                                       transforms[Random.Range(0, waveInfo.enemySpawnpoints[(int)enemy.enemySize].transforms.Length)];
                Enemy e = Instantiate(enemy.enemy, spawnpoint.position, spawnpoint.rotation).GetComponent <Enemy>();
                aliveEnemies.Add(e);
                e.Agent.Warp(spawnpoint.position);
                e.OnEnemyDeath += EnemyDied;

                enemiesLeftText.text = string.Format("Enemies left: {0}/{1}", aliveEnemies.Count, enemyCount);
            }

            //Done spawning enemies
            //Wait until all enemies are dead or wave time is over
            float time = Time.time;
            yield return(new WaitUntil(() => aliveEnemies.Count == 0 || Time.time >= time + wave.secondsToKillAllEnemies));

            //Killed all enemies on time
            if (aliveEnemies.Count == 0)
            {
                OnWaveChange?.Invoke(false);
                yield return(new WaitForSeconds(wave.secondsBetweenWavesSucceeded));
            }
            else
            {
                yield return(new WaitUntil(() => aliveEnemies.Count == 0));

                OnWaveChange?.Invoke(false);
                yield return(new WaitForSeconds(wave.secondsBetweenWavesFailed));
            }
        }

        yield return(new WaitUntil(() => aliveEnemies.Count == 0));

        IngamePanelManager.Instance?.Victory();
    }