Beispiel #1
0
 //TODO: Change from dev button
 private void DisplayWaveStartButton()
 {
     if (GUI.Button(new Rect(Screen.width / 2 - 50, 5, 100, 30), "Start Wave"))
     {
         if (CheckWaveStart())
         {
             OnStartWave?.Invoke();
         }
     }
 }
Beispiel #2
0
    IEnumerator LifeCycleWave()
    {
        Wave currentWave = _wavesList[currentWaveNum - 1];

        CountUnits = currentWave.units.Count;

        if (OnStartWave != null)
        {
            OnStartWave.Invoke(currentWaveNum);
        }

        yield return(new WaitForSeconds(1));

        //Поочереди спавним юнитов с неким интервалом
        for (int i = 0; i < currentWave.units.Count; i++)
        {
            _spawner.Spawn(currentWave.units[i]);
            yield return(new WaitForSeconds(delayBetweenSpawnUnits));
        }
        //После спавна всех юнитов запускам цикл проверки
        //где каждую секунду будем проверять остались ли еще активные юниты на поле
        while (true)
        {
            yield return(new WaitForSeconds(1));

            if (currentWave.units.All(x => x.activeSelf == false))
            {
                if (OnFinishWave != null)
                {
                    OnFinishWave.Invoke(currentWaveNum);
                }

                if (currentWaveNum < wavesCount)
                {
                    currentWaveNum++;
                }
                else
                {
                    GameOver(); //завершаем игру, если это была последняя волна
                }
                //если выживших не осталось переключаемся на следующую волну и завершаем корутину
                yield break;
            }
        }
    }