]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/states/SelectAttackType.cpp
added spell selection battle state
[l2e.git] / src / battle / states / SelectAttackType.cpp
index b3b3e0b0a6290195e56f63a2b47f543fee7f4619..7dd06f6217b8e610f49828b891994b020ef20c1d 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "SelectAttackType.h"
 
+#include "SelectMoveAction.h"
+#include "SelectSpell.h"
 #include "../AttackChoice.h"
 #include "../BattleState.h"
 #include "../../app/Application.h"
@@ -31,7 +33,10 @@ void SelectAttackType::ExitState(Application &c, SDL_Surface *screen) {
 }
 
 void SelectAttackType::ResumeState(Application &ctrl, SDL_Surface *screen) {
-
+       if (battle->AttackSelectionDone()) {
+               // pass through
+               ctrl.PopState();
+       }
 }
 
 void SelectAttackType::PauseState(Application &ctrl, SDL_Surface *screen) {
@@ -65,8 +70,9 @@ void SelectAttackType::HandleInput(const Input &input) {
                                battle->NextHero();
                                break;
                        case AttackChoice::MAGIC:
-                               // TODO: switch to spell select
-                               battle->NextHero();
+                               if (battle->ActiveHero().CanUseMagic()) {
+                                       ctrl->PushState(new SelectSpell(battle, this));
+                               }
                                break;
                        case AttackChoice::DEFEND:
                                battle->NextHero();
@@ -82,6 +88,12 @@ void SelectAttackType::HandleInput(const Input &input) {
                        default:
                                throw std::logic_error("selected invalid attack type");
                }
+       } else if (input.JustPressed(Input::ACTION_B)) {
+               battle->SetAttackType(AttackChoice::UNDECIDED);
+               battle->PreviousHero();
+               if (battle->BeforeFirstHero()) {
+                       ctrl->ChangeState(new SelectMoveAction(battle));
+               }
        }
 
        if (battle->AttackSelectionDone()) {