예제 #1
0
    // -----------------------------------------------------------------------------
    void GoToState(EBattleStates state)
    {
        if (m_battleState != state)
        {
            m_battleState = state;
            switch (state)
            {
            case EBattleStates.eSelection:
            {
                // Run AI during player selection
                SelectNextAIAction();
            }
            break;

            case EBattleStates.eOrderOfActionSelection:
            {
                SelectOrderOfActions();
                GoToState(EBattleStates.eAtkPhase1);
            }
            break;

            case EBattleStates.eAtkPhase1:
            {
                ResolveAttackPhase(EBattleStates.eAtkPhase1);
            }
            break;

            case EBattleStates.eAtkPhase2:
            {
                ResolveAttackPhase(EBattleStates.eAtkPhase2);
            }
            break;

            case EBattleStates.eEndTurn:
            {
                m_playerAction     = null;
                m_AiAction         = null;
                m_isPlayerInPhase1 = false;

                GoToState(EBattleStates.eSelection);
            }
            break;

            default:
                break;
            }
        }
    }
예제 #2
0
    // -----------------------------------------------------------------------------
    void Reset()
    {
        m_playerAttacking = false;
        m_playerPokeValues.Reset();
        m_oppPokeValues.Reset();
        m_lastAttackInfo.Reset();
        m_battleValues.Reset();

        m_playerPokemon      = null;
        m_opponentPokemon    = null;
        m_battleState        = EBattleStates.eNone;
        m_blockedByAnimation = false;

        m_isPlayerInPhase1 = false;
        m_playerAction     = null;
        m_AiAction         = null;
    }
예제 #3
0
    // -----------------------------------------------------------------------------
    void ResolveAttackPhase(EBattleStates state)
    {
        bool          isPlayer = state == EBattleStates.eAtkPhase1 && m_isPlayerInPhase1 || state == EBattleStates.eAtkPhase2 && !m_isPlayerInPhase1;
        CCombatAction action;
        Pokemon       attackingPokemon;
        Pokemon       defendingPokemon;

        if (isPlayer)
        {
            m_playerAttacking = true;
            action            = m_playerAction;
            attackingPokemon  = m_playerPokemon;
            defendingPokemon  = m_opponentPokemon;
        }
        else
        {
            m_playerAttacking = false;
            action            = m_AiAction;
            attackingPokemon  = m_opponentPokemon;
            defendingPokemon  = m_playerPokemon;
        }

        switch (action.GetActionType())
        {
        case ECombatActionType.Run:
        {
            // Only player can run away for now
            m_playerPokeValues.fleeAttempts++;
            if (CanRunAway())
            {
                StopFight(false, true);
            }
            else                     // if the run attempt fails, the turn is lost
            {
                GoToState(m_battleState + 1);
            }
        }
        break;

        case ECombatActionType.Switch:
        {
            OnSwitch(isPlayer, (CSwitchAction)action);
        }
        break;

        case ECombatActionType.Object:
        {
            // TODO
        }
        break;

        case ECombatActionType.Attack:
        {
            CAttackAction attackAction = (CAttackAction)action;
            Attack        attack       = FindObjectOfType <Attack> ();
            if (attack)
            {
                attack.StartAttack(attackAction.attackId, attackingPokemon, defendingPokemon);
            }
        }
        break;

        default:
            break;
        }
    }