예제 #1
0
    private IEnumerator waitForNextWave(float waitLength)
    {
        wavePointer += 1;

        if (wavePointer == waves.Count)
        {
            if (GameObject.FindGameObjectWithTag("GeneratorManager").GetComponent <GeneratorRepair>().GetGeneratorRepaired() == true)
            {
                current = waveState.gameWon;
            }
            else
            {
                current = waveState.gameLost;
            }
        }
        else //waits for 1/2 downtime, changes state to beforeWave
        {   // waits another 1/2 downtime before starting wave
            yield return(new WaitForSeconds(waitLength / 2));

            current = waveState.beforeWaveStart;
            yield return(new WaitForSeconds(waitLength / 2));

            initiateWave(waves[wavePointer]);

            nextWaveStarted = false;
        }
    }
예제 #2
0
    IEnumerator SpawnWave(Wave _wave)
    {
        Debug.Log("Spawning Wave: " + _wave.waveName);
        state = waveState.SPAWNING;
        for (int i = 0; i < _wave.count; i++)
        {
            SpawnEnemy(_wave.enemy[Random.Range(0, _wave.enemy.Length)]);
            yield return(new WaitForSeconds(1f / _wave.rate));
        }
        state = waveState.WAITING;

        yield break;
    }
예제 #3
0
    public void checkRemainingEnemies()
    {
        //
        // ## Checks how many enemies are present in scene & sets state to waveComplete depending
        //

        remainingEnemies = GameObject.FindGameObjectsWithTag("Enemy");

        if (remainingEnemies.Length == 0)
        {
            current = waveState.waveComplete;
        }
    }
예제 #4
0
 // Update is called once per frame
 void Update()
 {
     if (state == waveState.DONE)
     {
         return;
     }
     if (state == waveState.WAITING)
     {
         if (!enemyIsAlive())
         {
             // Test to see if there are any waves left if we killed all the enemies.
             if (nextWave + 1 >= waves.Length && !loop)
             {
                 if (!lastLevel)
                 {
                     MessageBroadcaster.Instance.BroadcastAnnouncement("Wave " + waves.Length + " of " + waves.Length + " Defeated. Level Complete");
                     PlayerManager.instance.playerPortal.SetActive(true);
                 }
                 else
                 {
                     Debug.Log("hey there, I'm done spawning now");
                     PlayerManager.instance.GameWin();
                     state = waveState.DONE;
                 }
             }
             else
             {
                 //Begin new round
                 waveCompleted();
             }
             return;
         }
         else
         {
             return;
         }
     }
     if (waveCountdown <= 0)
     {
         if (state != waveState.SPAWNING)
         {
             StartCoroutine(SpawnWave(waves[nextWave]));
         }
     }
     else
     {
         waveCountdown -= Time.deltaTime;
     }
 }
예제 #5
0
 void waveCompleted()
 {
     Debug.Log("Wave Complete");
     MessageBroadcaster.Instance.BroadcastAnnouncement("Wave " + (nextWave + 1) + " of " + waves.Length + " Defeated");
     state         = waveState.COUNTING;
     waveCountdown = timeBetweenWaves;
     if (nextWave + 1 > waves.Length)
     {
         nextWave = 0;
         Debug.Log("All waves complete: Looping...");
     }
     else
     {
         nextWave++;
     }
 }
예제 #6
0
    public void initiateWave(waveData wave)
    {
        //
        // ## Calls spawn script from Spawners in scene
        // ## Sets current state to waveActive
        //

        waveLength = wave.waveLength;
        waveTimer  = 0;
        spawners   = GameObject.FindGameObjectsWithTag("Spawner");

        for (int i = 0; i < spawners.Length; i++)
        {
            spawners[i].GetComponent <spawnerScript>().startWave(waves[wavePointer]);
        }

        current = waveState.waveActive;
    }
예제 #7
0
    private void FixedUpdate()
    {
        switch (current)
        {
        case waveState.beforeWaveStart:
            timeRemaining.text = "Get ready";
            break;

        case waveState.waveActive:
            //
            // ## Updates wave UI timer, calculates if time has run out & changes state accordingly
            //

            waveTimer += Time.deltaTime;

            if (waveTimer > waveLength)
            {
                current = waveState.waveFail;
            }
            else
            {
                checkRemainingEnemies();

                float  remaining = waveLength - waveTimer;
                string minutes   = Mathf.Floor(remaining / 60).ToString("00");
                string seconds   = (remaining % 60).ToString("00");

                timeRemaining.text = minutes + ":" + seconds;
            }
            break;

        case waveState.waveFail:
            timeRemaining.text = "Wave failed!";
            break;

        case waveState.waveComplete:
            //
            // ## checks if this is the last wave - if not, waits for DownTime until starting the next
            // ## if none come next, game is complete - if generator is fixed, the game is won
            // ## if generator is still broken, game is lost
            //

            timeRemaining.text = "Wave complete!";

            if (nextWaveStarted == false)
            {
                if (doors[wavePointer] != null)
                {
                    doors[wavePointer].SetLocked(false);
                }
                StartCoroutine(waitForNextWave(waves[wavePointer].downtime));
                nextWaveStarted = true;
            }

            break;

        case waveState.gameWon:
            timeRemaining.text = "Game won!";
            break;

        case waveState.gameLost:
            timeRemaining.text = "FAILED";
            break;
        }
    }