]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/states/SelectAttackType.cpp
added item select state
[l2e.git] / src / battle / states / SelectAttackType.cpp
index b3b3e0b0a6290195e56f63a2b47f543fee7f4619..c5e0bba3b580ebcd20886fed04996f54f590b130 100644 (file)
@@ -7,6 +7,9 @@
 
 #include "SelectAttackType.h"
 
+#include "SelectItem.h"
+#include "SelectMoveAction.h"
+#include "SelectSpell.h"
 #include "../AttackChoice.h"
 #include "../BattleState.h"
 #include "../../app/Application.h"
@@ -31,7 +34,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 +71,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();
@@ -76,12 +83,17 @@ void SelectAttackType::HandleInput(const Input &input) {
                                battle->NextHero();
                                break;
                        case AttackChoice::ITEM:
-                               // TODO: switch to item select
-                               battle->NextHero();
+                               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()) {