]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/states/SelectAttackType.cpp
reworked Application's state stack
[l2e.git] / src / battle / states / SelectAttackType.cpp
index 1d76b6c10894b4fa0dc0efa42ddbc4786fde43b2..c7a65be7a3ade4d69d9c54895d2248d24ac587d0 100644 (file)
@@ -7,24 +7,37 @@
 
 #include "SelectAttackType.h"
 
+#include "../AttackChoice.h"
 #include "../BattleState.h"
+#include "../../app/Application.h"
 #include "../../app/Input.h"
 #include "../../geometry/operators.h"
 
+#include <stdexcept>
+
+using app::Application;
 using app::Input;
 using geometry::Point;
 using geometry::Vector;
 
 namespace battle {
 
-void SelectAttackType::EnterState(app::Application &c, SDL_Surface *screen) {
+void SelectAttackType::EnterState(Application &c, SDL_Surface *screen) {
        ctrl = &c;
 }
 
-void SelectAttackType::ExitState() {
+void SelectAttackType::ExitState(Application &c, SDL_Surface *screen) {
        ctrl = 0;
 }
 
+void SelectAttackType::ResumeState(Application &ctrl, SDL_Surface *screen) {
+
+}
+
+void SelectAttackType::PauseState(Application &ctrl, SDL_Surface *screen) {
+
+}
+
 
 void SelectAttackType::Resize(int width, int height) {
 
@@ -33,36 +46,44 @@ void SelectAttackType::Resize(int width, int height) {
 
 void SelectAttackType::HandleInput(const Input &input) {
        if (input.IsDown(Input::PAD_UP)) {
-               battle->GetAttackTypeMenu().Select(AttackTypeMenu::MAGIC);
+               battle->GetAttackTypeMenu().Select(AttackChoice::MAGIC);
        } else if (input.IsDown(Input::PAD_RIGHT)) {
-               battle->GetAttackTypeMenu().Select(AttackTypeMenu::DEFEND);
+               battle->GetAttackTypeMenu().Select(AttackChoice::DEFEND);
        } else if (input.IsDown(Input::PAD_DOWN)) {
-               battle->GetAttackTypeMenu().Select(AttackTypeMenu::IKARI);
+               battle->GetAttackTypeMenu().Select(AttackChoice::IKARI);
        } else if (input.IsDown(Input::PAD_LEFT)) {
-               battle->GetAttackTypeMenu().Select(AttackTypeMenu::ITEM);
+               battle->GetAttackTypeMenu().Select(AttackChoice::ITEM);
        } else {
-               battle->GetAttackTypeMenu().Select(AttackTypeMenu::SWORD);
+               battle->GetAttackTypeMenu().Select(AttackChoice::SWORD);
        }
 
        if (input.JustPressed(Input::ACTION_A)) {
+               battle->SetAttackType(battle->GetAttackTypeMenu().Selected());
                switch (battle->GetAttackTypeMenu().Selected()) {
-                       case AttackTypeMenu::SWORD:
-                               // TODO: switch to next character
+                       case AttackChoice::SWORD:
+                               battle->NextHero();
                                break;
-                       case AttackTypeMenu::MAGIC:
+                       case AttackChoice::MAGIC:
                                // TODO: switch to spell select
                                break;
-                       case AttackTypeMenu::DEFEND:
-                               // TODO: switch to next character
+                       case AttackChoice::DEFEND:
+                               battle->NextHero();
                                break;
-                       case AttackTypeMenu::IKARI:
+                       case AttackChoice::IKARI:
                                // TODO: switch to ikari attack select
                                break;
-                       case AttackTypeMenu::ITEM:
+                       case AttackChoice::ITEM:
                                // TODO: switch to item select
                                break;
+                       default:
+                               throw std::logic_error("selected invalid attack type");
                }
        }
+
+       if (battle->AttackSelectionDone()) {
+               // TODO: switch to battle animation instead
+               ctrl->PopState();
+       }
 }
 
 void SelectAttackType::UpdateWorld(float deltaT) {