]> git.localhorst.tv Git - l2e.git/blobdiff - src/menu/InventoryMenu.cpp
added capsule attack/animation handling
[l2e.git] / src / menu / InventoryMenu.cpp
index 429fefe59da30888f73b0037c6ae493ec8495daf..c980f9719a3c120e0097f5a8c19bcb63cbdced90 100644 (file)
@@ -1,14 +1,8 @@
-/*
- * InventoryMenu.cpp
- *
- *  Created on: Nov 4, 2012
- *      Author: holy
- */
-
 #include "InventoryMenu.h"
 
 #include "PartyMenu.h"
 #include "Resources.h"
+#include "../app/Application.h"
 #include "../app/Input.h"
 #include "../common/GameConfig.h"
 #include "../common/GameState.h"
@@ -23,6 +17,7 @@ using common::Item;
 using geometry::Vector;
 using graphics::Font;
 using graphics::Frame;
+using std::swap;
 
 namespace menu {
 
@@ -99,14 +94,45 @@ void InventoryMenu::HandleEvents(const Input &input) {
                                menu.SetSelected();
                                itemMenu.SetActive();
                        }
+               } else if (itemMenu.IsActive()) {
+                       itemMenu.SetDualSelection();
+               } else if (itemMenu.SelectedIndex() == itemMenu.SecondaryIndex()) {
+                       switch (menu.Selected()) {
+                               case CHOICE_USE:
+                                       if (itemMenu.Selected()->CanUseOnStatusScreen()) {
+                                               // TODO: implement item use
+                                       }
+                                       itemMenu.SetActive();
+                                       break;
+                               case CHOICE_SORT:
+                                       // invalid state, recover
+                                       menu.SetActive();
+                                       itemMenu.SetInactive();
+                                       break;
+                               case CHOICE_DROP:
+                                       if (itemMenu.Selected()->CanDrop()) {
+                                               parent->Game().state->inventory.RemoveAll(itemMenu.Selected());
+                                               itemMenu.ClearEntry(itemMenu.SelectedIndex());
+                                       }
+                                       itemMenu.SetActive();
+                                       break;
+                       }
+               } else {
+                       parent->Game().state->inventory.SwapEntriesAt(
+                                       itemMenu.SelectedIndex(),
+                                       itemMenu.SecondaryIndex());
+                       itemMenu.SwapSelected();
+                       itemMenu.SetActive();
                }
        }
        if (input.JustPressed(Input::ACTION_B)) {
                if (menu.IsActive()) {
                        Ctrl().PopState();
-               } else {
+               } else if (itemMenu.IsActive()) {
                        menu.SetActive();
                        itemMenu.SetInactive();
+               } else {
+                       itemMenu.SetActive();
                }
        }
 }