X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmenu%2FInventoryMenu.cpp;h=9a4bf13e7ab0efc9db6afa3f6262da0618960bb8;hb=5d1a76ae7725af998c6ee46adfe492c68ee1d34f;hp=2ea7fb328eaf90dcb1ca90eb492cf7ba87626c7a;hpb=f552d26f537af9fa48255bd71cdc1a0a1b860bac;p=l2e.git diff --git a/src/menu/InventoryMenu.cpp b/src/menu/InventoryMenu.cpp index 2ea7fb3..9a4bf13 100644 --- a/src/menu/InventoryMenu.cpp +++ b/src/menu/InventoryMenu.cpp @@ -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" @@ -20,9 +14,10 @@ using app::Input; using common::Inventory; using common::Item; -using geometry::Vector; +using math::Vector; using graphics::Font; using graphics::Frame; +using std::swap; namespace menu { @@ -30,13 +25,18 @@ InventoryMenu::InventoryMenu(PartyMenu *parent) : parent(parent) , menu(*parent->Res().itemMenuProperties) , itemMenu(*parent->Res().inventoryMenuProperties) { - menu.Add(parent->Res().itemMenuUseText, 0); - menu.Add(parent->Res().itemMenuSortText, 1); - menu.Add(parent->Res().itemMenuDropText, 2); + menu.Add(parent->Res().itemMenuUseText, CHOICE_USE); + menu.Add(parent->Res().itemMenuSortText, CHOICE_SORT); + menu.Add(parent->Res().itemMenuDropText, CHOICE_DROP); } void InventoryMenu::OnEnterState(SDL_Surface *) { + menu.SetSelected(); + LoadInventory(); +} + +void InventoryMenu::LoadInventory() { const Inventory &inv(parent->Game().state->inventory); itemMenu.Clear(); itemMenu.Reserve(inv.MaxItems()); @@ -69,22 +69,75 @@ void InventoryMenu::OnResize(int width, int height) { void InventoryMenu::HandleEvents(const Input &input) { - if (input.JustPressed(Input::PAD_LEFT)) { - menu.PreviousItem(); - } - if (input.JustPressed(Input::PAD_RIGHT)) { - menu.NextItem(); + if (menu.IsActive()) { + if (input.JustPressed(Input::PAD_LEFT)) { + menu.PreviousItem(); + } + if (input.JustPressed(Input::PAD_RIGHT)) { + menu.NextItem(); + } + } else { + if (input.JustPressed(Input::PAD_UP)) { + itemMenu.PreviousItem(); + } + if (input.JustPressed(Input::PAD_DOWN)) { + itemMenu.NextItem(); + } } - if (input.JustPressed(Input::PAD_UP)) { - itemMenu.PreviousItem(); + if (input.JustPressed(Input::ACTION_A)) { + if (menu.IsActive()) { + if (menu.Selected() == CHOICE_SORT) { + parent->Game().state->inventory.Sort(); + LoadInventory(); + } else { + 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::PAD_DOWN)) { - itemMenu.NextItem(); + if (input.JustPressed(Input::ACTION_B)) { + if (menu.IsActive()) { + Ctrl().PopState(); + } else if (itemMenu.IsActive()) { + menu.SetActive(); + itemMenu.SetInactive(); + } else { + itemMenu.SetActive(); + } } } -void InventoryMenu::UpdateWorld(float deltaT) { +void InventoryMenu::UpdateWorld(Uint32 deltaT) { }