public void Spawn(SpawnBase spawnMethod)
 {
     spawnMethod.Spawn();
 }
Beispiel #2
0
        private IEnumerator waveRountine()
        {
            bool bossWave = false;
            Wave lastWave = activeWave;

            // Get the wave
            Wave wave = getNextWave(out bossWave);

            // Make sure we have a valid wave
            if (wave == null)
            {
                yield break;
            }

            activeWave = wave;

            if (bossWave == false)
            {
                // Trigger wave started
                onWaveStarted();
            }
            else
            {
                // Trigger the wave event
                if (bossRoundIsWave == true)
                {
                    onWaveStarted();
                }

                // Trigger the boss wave start
                onBossWaveStarted();
            }

            // Wait for the start delay
            yield return(new WaitForSeconds(activeWave.waveStartDelay));

            // Begin spawning
            for (int i = 0; i < activeWave.spawnCount; i++)
            {
                // Make sure there is room for more spawnables
                while (InstancesRemaining >= maximumSpawnedItems)
                {
                    yield return(null);
                }

                // Spawn flag
                bool canSpawn = false;

                // Get the spawn manager
                SpawnBase spawn = (activeWave.spawnManager != null) ? activeWave.spawnManager : spawnManager;

                // Wait until we can spawn
                while (canSpawn == false)
                {
                    // Check if we are able to spawn
                    canSpawn = spawn.canSpawn();
                    yield return(null);
                }

                // Spawn the enemy
                spawn.spawn();
                spawnedCount++;

                // Wait for next spawn
                yield return(new WaitForSeconds(activeWave.randomSpawnDelay()));
            }

            // Wait for all enemies to become dead
            if (activeWave.waitForDead == true)
            {
                while (InstancesRemaining > 0)
                {
                    yield return(null);
                }
            }

            // Wait for end of wave delay
            yield return(new WaitForSeconds(activeWave.waveCompleteDelay));

            if (bossWave == false)
            {
                // Trigger wave end
                onWaveEnded();
            }
            else
            {
                // Trigger boss wave end
                onBossWaveEnded();

                // Trigger wave end event
                if (bossRoundIsWave == true)
                {
                    if (onExitWave != null)
                    {
                        onExitWave(activeWave);
                    }
                }

                // Revert to the previous wave so that wave advance works correctly
                activeWave = lastWave;
            }
        }