diff options
Diffstat (limited to 'src/gui/inventory.cpp')
-rw-r--r-- | src/gui/inventory.cpp | 122 |
1 files changed, 49 insertions, 73 deletions
diff --git a/src/gui/inventory.cpp b/src/gui/inventory.cpp index 73bf67f5..98f17134 100644 --- a/src/gui/inventory.cpp +++ b/src/gui/inventory.cpp @@ -23,12 +23,11 @@ #include "../playerinfo.h" #include "inventory.h" -#include "equipment.h" +#include "../equipment.h" #include "button.h" #include "scrollarea.h" #include "../net/network.h" #include "item_amount.h" -#include "../resources/itemmanager.h" #include <string> InventoryWindow::InventoryWindow(): @@ -97,119 +96,94 @@ void InventoryWindow::logic() weightLabel->adjustSize(); } -int InventoryWindow::addItem(int index, int id, int quantity, bool equipment) -{ - items->addItem(index, id, quantity, equipment); - return 0; -} - -int InventoryWindow::removeItem(int id) -{ - items->removeItem(id); - return 0; -} - -int InventoryWindow::changeQuantity(int index, int quantity) -{ - items->changeQuantity(index, quantity); - return 0; -} - -int InventoryWindow::increaseQuantity(int index, int quantity) -{ - items->increaseQuantity(index, quantity); - return 0; -} - -int InventoryWindow::useItem(int index, int id) +int InventoryWindow::useItem(Item *item) { WFIFOW(0) = net_w_value(0x00a7); - WFIFOW(2) = net_w_value(index); - WFIFOL(4) = net_l_value(id); + WFIFOW(2) = net_w_value(item->getInvIndex()); + WFIFOL(4) = net_l_value(item->getId()); // Note: id is dest of item, usually player_node->account_ID ?? WFIFOSET(8); while ((out_size > 0)) flush(); return 0; } -int InventoryWindow::dropItem(int index, int quantity) +int InventoryWindow::dropItem(Item *item, int quantity) { // TODO: Fix wrong coordinates of drops, serverside? WFIFOW(0) = net_w_value(0x00a2); - WFIFOW(2) = net_w_value(index); + WFIFOW(2) = net_w_value(item->getInvIndex()); WFIFOW(4) = net_w_value(quantity); WFIFOSET(6); while ((out_size > 0)) flush(); return 0; } -void InventoryWindow::equipItem(int index) +void InventoryWindow::equipItem(Item *item) { WFIFOW(0) = net_w_value(0x00a9); - WFIFOW(2) = net_w_value(index); + WFIFOW(2) = net_w_value(item->getInvIndex()); WFIFOW(4) = net_w_value(0); WFIFOSET(6); while ((out_size > 0)) flush(); } -void InventoryWindow::unequipItem(int index) +void InventoryWindow::unequipItem(Item *item) { WFIFOW(0) = net_w_value(0x00ab); - WFIFOW(2) = net_w_value(index); + WFIFOW(2) = net_w_value(item->getInvIndex()); WFIFOSET(4); while ((out_size > 0)) flush(); - + // Tidy equipment directly to avoid weapon still shown bug, by instance - for (int i = 0; i < 8; i++) - { - if ( equipmentWindow->getInventoryIndex(i) == index ) - { - equipmentWindow->removeEquipment(i); - } - } + Equipment::getInstance()->removeEquipment(item); } void InventoryWindow::action(const std::string &eventId) { - int selectedItem = items->getIndex(); - - if (selectedItem != -1) { - if (eventId == "use") { - if (items->isEquipment(selectedItem)) { - if (items->isEquipped(selectedItem)) { - unequipItem(selectedItem); - } - else { - equipItem(selectedItem); - } + Item *item = items->getItem(); + + if (!item) { + return; + } + + if (eventId == "use") { + if (item->isEquipment()) { + if (item->isEquipped()) { + unequipItem(item); } else { - useItem(selectedItem, items->getId()); + equipItem(item); } } - else if (eventId == "drop") - { - // Choose amount of items to drop - new ItemAmountWindow(AMOUNT_ITEM_DROP, this); + else { + useItem(item); } } + else if (eventId == "drop") + { + // Choose amount of items to drop + new ItemAmountWindow(AMOUNT_ITEM_DROP, this); + } } void InventoryWindow::mouseClick(int x, int y, int button, int count) { Window::mouseClick(x, y, button, count); - if (items->getIndex() != -1) - { - // Show Name and Description - std::string SomeText; - SomeText = "Name: " + itemDb->getItemInfo(items->getId())->getName(); - itemNameLabel->setCaption(SomeText); - itemNameLabel->adjustSize(); - SomeText = "Description: " + itemDb->getItemInfo(items->getId())->getDescription(); - itemDescriptionLabel->setCaption(SomeText); - itemDescriptionLabel->adjustSize(); + Item *item = items->getItem(); + + if (!item) { + return; } + + // Show Name and Description + std::string SomeText; + SomeText = "Name: " + item->getInfo()->getName(); + itemNameLabel->setCaption(SomeText); + itemNameLabel->adjustSize(); + SomeText = "Description: " + item->getInfo()->getDescription(); + itemDescriptionLabel->setCaption(SomeText); + itemDescriptionLabel->adjustSize(); } void InventoryWindow::mouseMotion(int mx, int my) @@ -245,9 +219,11 @@ void InventoryWindow::updateWidgets() void InventoryWindow::updateButtons() { - if (items->getIndex() != -1 && items->isEquipment(items->getIndex())) + Item *item; + + if ((item = items->getItem()) && item->isEquipment()) { - if (items->isEquipped(items->getIndex())) { + if (item->isEquipped()) { useButton->setCaption("Unequip"); } else { @@ -258,6 +234,6 @@ void InventoryWindow::updateButtons() useButton ->setCaption("Use"); } - useButton->setEnabled(items->getIndex() != -1); - dropButton->setEnabled(items->getIndex() != -1); + useButton->setEnabled(!!item); + dropButton->setEnabled(!!item); } |