IEnumerator BattleRoutine() { yield return(new WaitForSeconds(_delayTime)); // populates command queue _board.BattleCommands(); // cycles through queue int count = _boardInvoker.CommandQueue.Count; for (int i = 0; i < count; i++) { _boardInvoker.PlayTopCommand(); yield return(new WaitForSeconds(_delayTime)); if (StateMachine.Enemy.CurrentHealth <= 0) { StateMachine.ChangeState <PlayerWinCardGameState>(); _boardInvoker.CommandQueue.Clear(); yield break; } else if (StateMachine.Player.CurrentHealth <= 0) { StateMachine.ChangeState <PlayerLoseCardGameState>(); _boardInvoker.CommandQueue.Clear(); yield break; } } if (StateMachine.Player.BoostDeck.Count == 0) { StateMachine.ChangeState <PlayerLoseCardGameState>(); } else if (StateMachine.Enemy.BoostDeck.Count == 0) { StateMachine.ChangeState <PlayerWinCardGameState>(); } else { StateMachine.ChangeState <BoostStepCardGameState>(); } }