private void BattleHandler_OnWaveLost(object sender, BattleEventArgs e)
 {
     foreach (Bunny bunny in e.bunnies)
     {
         UnsubscribeFromBunnyEvents(bunny);
     }
 }
 private void BattleHandler_OnBunniesInitialized(object sender, BattleEventArgs e)
 {
     foreach (Bunny bunny in e.bunnies)
     {
         SubscribeToBunnyEvents(bunny);
     }
 }
 private void BattleHandler_OnEnemiesInitialized(object sender, BattleEventArgs e)
 {
     foreach (Enemy enemy in e.enemies)
     {
         SubscribeToEnemyEvents(enemy);
     }
 }
Пример #4
0
        /// <summary>
        /// Lose the current enemy wave and exit the battle scene.
        /// </summary>
        private void LoseWave()
        {
            battleState = BattleState.Idle;
            sceneTransition.SaveAndLoadScene("AreaSelect");

            BattleEventArgs args = new BattleEventArgs(currentBunnies, currentEnemies, null, null, IsBossWave);

            OnWaveLost?.Invoke(this, args);
        }
Пример #5
0
        /// <summary>
        /// Win the current enemy wave and set the battle state accordingly.
        /// </summary>
        private void WinWave()
        {
            battleState = BattleState.Idle;
            bool isFinalWave = IsBossWave;

            if (IsBossWave)
            {
                int areasUnlocked = SaveData.current.areasUnlocked;
                if (areasUnlocked == (int)gameManager.BattleArea &&
                    areasUnlocked < (int)Globals.Area.CarrotTop)
                {
                    // Unlock next area
                    SaveData.current.areasUnlocked++;
                }
                else if (gameManager.BattleArea == Globals.Area.Final2)
                {
                    // Complete game
                    SaveData.current.isGameComplete = true;
                }

                // Area is clear
                if (gameManager.cutsceneFileName.HasValue())
                {
                    sceneTransition.SaveAndLoadScene("Cutscene");
                }
                else
                {
                    sceneTransition.SaveAndLoadScene("AreaSelect");
                }
            }
            else
            {
                // Revive defeated bunnies
                foreach (Bunny bunny in GetDefeatedBunnies())
                {
                    bunny.Revive();
                }

                // Move to next wave
                wave++;
                if (IsBossWave && gameManager.cutsceneFileName.HasValue())
                {
                    sceneTransition.SaveAndLoadScene("Cutscene");
                    isFinalWave = true;
                }
                else
                {
                    InitializeWave();
                }
                StartTravel();
            }

            BattleEventArgs args = new BattleEventArgs(currentBunnies, currentEnemies, null, null, isFinalWave);

            OnWaveWon?.Invoke(this, args);
        }
Пример #6
0
 private void BattleHandler_OnSelectedBunnyChanged(object sender, BattleEventArgs e)
 {
     if (e.selectedBunny == null)
     {
         ShowTurnPanel();
     }
     else
     {
         SetOptions(e.selectedBunny);
     }
 }
 private void BattleHandler_OnEnemiesInitialized(object sender, BattleEventArgs e)
 {
     if (e.isFinalWave)
     {
         // Start boss battle music
         bossReached = true;
         bool isFinalBattle = GameManager.Instance.BattleArea == Globals.Area.Final2;
         PlayMusic(isFinalBattle ? finalBossBattleMusic : bossBattleMusic);
     }
     else if (!audioSource.isPlaying)
     {
         // Start regular enemy battle music
         bool isFinalArea = GameManager.Instance.BattleArea == Globals.Area.CarrotTop;
         PlayMusic(isFinalArea ? finalAreaBattleMusic : regularBattleMusic);
     }
 }
Пример #8
0
        /// <summary>
        /// Perform each turn in the turn collection. Sets the battle state once all turns have been performed.
        /// </summary>
        private IEnumerator HandleTurns()
        {
            WaitForSeconds turnDelay = new WaitForSeconds(turnTime);

            while (!turnCollection.IsEmpty)
            {
                // Perform turn
                Turn turn = turnCollection.Pop();
                turn.turnAction?.Invoke();
                BattleEventArgs args = new BattleEventArgs(currentBunnies, currentEnemies, null, turn, IsBossWave);
                OnTurnPerformed?.Invoke(this, args);

                yield return(turnDelay);
            }

            HandleEndOfTurns();
        }
Пример #9
0
        private void InitializeBunnies(Bunny[] bunnies)
        {
            currentBunnies = bunnies;
            for (int i = 0; i < bunnies.Length; i++)
            {
                bunnyActors[i].Fighter = bunnies[i];
            }

            BattleEventArgs args = new BattleEventArgs(bunnies, currentEnemies, null, null, IsBossWave);

            OnBunniesInitialized?.Invoke(this, args);

            // Subscribe to events
            foreach (Bunny bunny in bunnies)
            {
                bunny.OnDefeat  += Bunny_OnDefeat;
                bunny.OnLevelUp += Bunny_OnLevelUp;
            }
        }
Пример #10
0
        private void InitializeEnemies(Enemy[] enemies)
        {
            // Create copies of enemies and assign to actors
            currentEnemies = new Enemy[enemies.Length];
            for (int i = 0; i < enemies.Length; i++)
            {
                currentEnemies[i]      = enemies[i].ShallowCopy();
                enemyActors[i].Fighter = currentEnemies[i];
            }

            BattleEventArgs args = new BattleEventArgs(currentBunnies, currentEnemies, null, null, IsBossWave);

            OnEnemiesInitialized?.Invoke(this, args);

            // Subscribe to events
            foreach (Enemy enemy in currentEnemies)
            {
                enemy.OnDefeat += Enemy_OnDefeat;
            }
        }
Пример #11
0
        /// <summary>
        /// Find the next bunny to get input for.
        /// </summary>
        private void NextInput()
        {
            // Find next bunny
            do
            {
                inputCount++;
            }while (inputCount <= bunnyActors.Length && !SelectedBunny.IsAlive);

            // Raise event
            BattleEventArgs args;

            if (inputCount <= bunnyActors.Length)
            {
                args = new BattleEventArgs(currentBunnies, currentEnemies, SelectedBunny, null, IsBossWave);
            }
            else
            {
                args = new BattleEventArgs(currentBunnies, currentEnemies, null, null, IsBossWave);
            }
            OnSelectedBunnyChanged?.Invoke(this, args);
        }
Пример #12
0
 private void BattleHandler_OnTurnPerformed(object sender, BattleEventArgs e)
 {
     SetTurnText(e.currentTurn.message);
     SetPlayerStatText(e.bunnies);
 }
Пример #13
0
 private void BattleHandler_OnSettingUpInput(object sender, BattleEventArgs e)
 {
     SetCanvasEnabled(true);
     ShowPlayerInputPanel();
     SetEnemyButtons(e.enemies);
 }
Пример #14
0
 private void BattleHandler_OnBunniesInitialized(object sender, BattleEventArgs e)
 {
     SetPlayerStatText(e.bunnies);
 }
Пример #15
0
 private void BattleHandler_OnWaveLost(object sender, BattleEventArgs e)
 {
     SetCanvasEnabled(false);
 }
Пример #16
0
 private void BattleHandler_OnWaveWon(object sender, BattleEventArgs e)
 {
     SetCanvasEnabled(false);
     SetPlayerStatText(e.bunnies);
 }