]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/BattleState.cpp
added battle move menu
[l2e.git] / src / battle / BattleState.cpp
index 758d9d8224a097d2b0cdd731dfc00dac17117b59..a2c306a2ef7050d1fd9d0a468d768d152962229b 100644 (file)
@@ -58,7 +58,35 @@ void BattleState::ExitState() {
 
 
 void BattleState::HandleInput(const Input &input) {
-       attackTypeMenu.ReadInput(input);
+       if (moveChoice == -1) {
+               if (input.IsDown(Input::PAD_UP)) {
+                       moveMenu.Select(MoveMenu::CHANGE);
+               } else if (input.IsDown(Input::PAD_DOWN)) {
+                       moveMenu.Select(MoveMenu::RUN);
+               } else {
+                       moveMenu.Select(MoveMenu::ATTACK);
+               }
+
+               if (input.JustPressed(Input::ACTION_A)) {
+                       moveChoice = moveMenu.Selected();
+               }
+       } else {
+               if (input.IsDown(Input::PAD_UP)) {
+                       attackTypeMenu.Select(AttackTypeMenu::MAGIC);
+               } else if (input.IsDown(Input::PAD_RIGHT)) {
+                       attackTypeMenu.Select(AttackTypeMenu::DEFEND);
+               } else if (input.IsDown(Input::PAD_DOWN)) {
+                       attackTypeMenu.Select(AttackTypeMenu::IKARI);
+               } else if (input.IsDown(Input::PAD_LEFT)) {
+                       attackTypeMenu.Select(AttackTypeMenu::ITEM);
+               } else {
+                       attackTypeMenu.Select(AttackTypeMenu::SWORD);
+               }
+
+               if (input.JustPressed(Input::ACTION_A)) {
+                       activeHero = (activeHero + 1) % 4;
+               }
+       }
 }
 
 void BattleState::UpdateWorld(float deltaT) {
@@ -74,7 +102,11 @@ void BattleState::Render(SDL_Surface *screen) {
        RenderMonsters(screen, offset);
 //     RenderHeroes(screen, offset);
        RenderHeroTags(screen, offset);
-       RenderAttackTypeMenu(screen, offset);
+       if (moveChoice == -1) {
+               RenderMoveMenu(screen, offset);
+       } else {
+               RenderAttackTypeMenu(screen, offset);
+       }
 }
 
 void BattleState::RenderBackground(SDL_Surface *screen, const Vector<int> &offset) {
@@ -112,7 +144,7 @@ void BattleState::RenderHeroTags(SDL_Surface *screen, const Vector<int> &offset)
        tagPosition[3] = Point<int>(tagWidth + attackTypeMenu.IconWidth(), uiOffset + tagHeight + attackTypeMenu.IconHeight());
 
        for (vector<HeroTag>::size_type i(0), end(heroTags.size()); i < end; ++i) {
-               heroTags[i].Render(screen, tagWidth, tagHeight, tagPosition[i] + offset);
+               heroTags[i].Render(screen, tagWidth, tagHeight, tagPosition[i] + offset, i == activeHero);
        }
 }
 
@@ -123,4 +155,11 @@ void BattleState::RenderAttackTypeMenu(SDL_Surface *screen, const Vector<int> &o
        attackTypeMenu.Render(screen, position + offset);
 }
 
+void BattleState::RenderMoveMenu(SDL_Surface *screen, const Vector<int> &offset) {
+       Point<int> position(
+                       (background->w - moveMenu.Width()) / 2,
+                       (background->h * 3 / 4) - (moveMenu.Height() / 2));
+       moveMenu.Render(screen, position + offset);
+}
+
 }