]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/states/SelectAttackType.cpp
added ikari select state
[l2e.git] / src / battle / states / SelectAttackType.cpp
index 2664295929ca873055902587c0764a1f93b310a0..5e687b670622ec25f4b870cacfe00fa15a34e3cb 100644 (file)
@@ -7,6 +7,10 @@
 
 #include "SelectAttackType.h"
 
+#include "SelectIkari.h"
+#include "SelectItem.h"
+#include "SelectMoveAction.h"
+#include "SelectSpell.h"
 #include "../AttackChoice.h"
 #include "../BattleState.h"
 #include "../../app/Application.h"
@@ -31,7 +35,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) {
@@ -61,23 +68,32 @@ void SelectAttackType::HandleInput(const Input &input) {
                battle->SetAttackType(battle->GetAttackTypeMenu().Selected());
                switch (battle->GetAttackTypeMenu().Selected()) {
                        case AttackChoice::SWORD:
+                               // TODO: switch to target select
                                battle->NextHero();
                                break;
                        case AttackChoice::MAGIC:
-                               // TODO: switch to spell select
+                               if (battle->ActiveHero().CanUseMagic()) {
+                                       ctrl->PushState(new SelectSpell(battle, this));
+                               }
                                break;
                        case AttackChoice::DEFEND:
                                battle->NextHero();
                                break;
                        case AttackChoice::IKARI:
-                               // TODO: switch to ikari attack select
+                               ctrl->PushState(new SelectIkari(battle, this));
                                break;
                        case AttackChoice::ITEM:
-                               // TODO: switch to item select
+                               ctrl->PushState(new SelectItem(battle, this));
                                break;
                        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()) {