// ----------------------------------------------------------------------------- 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; } } }
// ----------------------------------------------------------------------------- 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; }
// ----------------------------------------------------------------------------- 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; } }