diff options
author | Jan-Fabian Humann <malastare@gmx.net> | 2005-04-04 22:35:58 +0000 |
---|---|---|
committer | Jan-Fabian Humann <malastare@gmx.net> | 2005-04-04 22:35:58 +0000 |
commit | ca03f5a83dbd379d21c20ed4e69ec6836395b694 (patch) | |
tree | 93b49faa836f53c3b65e9e78b55b9d5d487f5a7e /src/gui | |
parent | acb216cbbd50f68710502068bec83e073128d6fc (diff) | |
download | mana-ca03f5a83dbd379d21c20ed4e69ec6836395b694.tar.gz mana-ca03f5a83dbd379d21c20ed4e69ec6836395b694.tar.bz2 mana-ca03f5a83dbd379d21c20ed4e69ec6836395b694.tar.xz mana-ca03f5a83dbd379d21c20ed4e69ec6836395b694.zip |
starting to do the trade window, i know it's not functionable and contains a lot of bugs but ill continue tomorrow.
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/itemcontainer.cpp | 13 | ||||
-rw-r--r-- | src/gui/itemcontainer.h | 7 | ||||
-rw-r--r-- | src/gui/trade.cpp | 183 | ||||
-rw-r--r-- | src/gui/trade.h | 89 |
4 files changed, 290 insertions, 2 deletions
diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp index d76fc3d9..aa60d322 100644 --- a/src/gui/itemcontainer.cpp +++ b/src/gui/itemcontainer.cpp @@ -54,7 +54,7 @@ void ItemContainer::draw(gcn::Graphics* graphics) getAbsolutePosition(x, y); w = getWidth(); h = getHeight(); - + graphics->setColor(gcn::Color(0, 0, 0)); graphics->drawRectangle(gcn::Rectangle(0, 0, w, h)); if(items[selectedItem].quantity <= 0) @@ -135,6 +135,17 @@ void ItemContainer::addItem(int index, int id, int quantity, bool equipment) items[index].equipment = equipment; } +int ItemContainer::getFreeSlot() +{ + for (int i = 0; i < INVENTORY_SIZE; i++) { + printf("i %d id %d\n", i, items[i].id); + if (items[i].id == -1) { + return i; + } + } + return -1; +} + void ItemContainer::resetItems() { for (int i = 0; i < INVENTORY_SIZE; i++) { diff --git a/src/gui/itemcontainer.h b/src/gui/itemcontainer.h index cbf08cf1..0857ac9f 100644 --- a/src/gui/itemcontainer.h +++ b/src/gui/itemcontainer.h @@ -104,10 +104,15 @@ class ItemContainer : public gcn::Widget int getQuantity(int index); /** + * Returns id of next free slot or -1 i all occupied. + */ + int getFreeSlot(); + + /** * Adds a new item. */ void addItem(int index, int id, int quantity, bool equipment); - + /** * Reset all item slots. */ diff --git a/src/gui/trade.cpp b/src/gui/trade.cpp new file mode 100644 index 00000000..43bbd79d --- /dev/null +++ b/src/gui/trade.cpp @@ -0,0 +1,183 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id $ + */ + +#include "../graphics.h" +#include "trade.h" +#include "../resources/resourcemanager.h" +#include "../resources/image.h" +#include "button.h" +#include "../being.h" +#include "../engine.h" +#include <sstream> + +TradeWindow::TradeWindow(): + Window("Trade: You") +{ + setContentSize(322, 130); + addButton = new Button("Add"); + addButton->setPosition(2, 105); + + addButton->setEventId("add"); + addButton->addActionListener(this); + + add(addButton); + + nameLabel = new gcn::Label("Other one"); + nameLabel->setPosition(2, 45); + + my_items = new ItemContainer(); + trade_items = new ItemContainer(); + + my_items->setSize(318, 40); + trade_items->setSize(318,40); + + my_items->setPosition(2, 2); + trade_items->setPosition(2, 60); + + add(nameLabel); + add(my_items); + add(trade_items); +} + +TradeWindow::~TradeWindow() +{ + delete addButton; + delete nameLabel; +} + +void TradeWindow::draw(gcn::Graphics *graphics) +{ + // Draw window graphics + Window::draw(graphics); +} + + +int TradeWindow::addItem(int index, int id, bool own, int quantity, + bool equipment) { + my_items->addItem(index, id, quantity, equipment); + return 0; +} + +int TradeWindow::removeItem(int id, bool own) { + my_items->removeItem(id); + return 0; +} + +int TradeWindow::changeQuantity(int index, bool own, int quantity) { + //items[index].quantity = quantity; + my_items->changeQuantity(index, quantity); + return 0; +} + +int TradeWindow::increaseQuantity(int index, bool own, int quantity) { + //items[index].quantity += quantity; + my_items->increaseQuantity(index, quantity); + return 0; +} + +/*int TradeWindow::useItem(int index, int id) { + WFIFOW(0) = net_w_value(0x00a7); + WFIFOW(2) = net_w_value(index); + WFIFOL(4) = net_l_value(id); + // 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) { + // TODO: Fix wrong coordinates of drops, serverside? + WFIFOW(0) = net_w_value(0x00a2); + WFIFOW(2) = net_w_value(index); + WFIFOW(4) = net_w_value(quantity); + WFIFOSET(6); + while ((out_size > 0)) flush(); + return 0; +}*/ + +/*void InventoryWindow::equipItem(int index) { + WFIFOW(0) = net_w_value(0x00a9); + WFIFOW(2) = net_w_value(index); + WFIFOW(4) = net_w_value(0); + WFIFOSET(6); + while ((out_size > 0)) flush(); +}*/ + +/*void InventoryWindow::unequipItem(int index) { + WFIFOW(0) = net_w_value(0x00ab); + WFIFOW(2) = net_w_value(index); + WFIFOSET(4); + while ((out_size > 0)) flush(); +}*/ + +void TradeWindow::action(const std::string &eventId) +{ + + if (eventId == "add") { + if (inventoryWindow->items->getIndex() >= 0 && + inventoryWindow->items->getIndex() <= INVENTORY_SIZE) { + if (inventoryWindow->items->isEquipment( + inventoryWindow->items->getIndex())) { + if (inventoryWindow->items->isEquipped( + inventoryWindow->items->getIndex())) { + inventoryWindow->unequipItem( + inventoryWindow->items->getIndex()); + } + } + int i = tradeWindow->my_items->getFreeSlot(); + printf("%d\n", i); + if (i >= 0) { + printf("successfull\n"); + + addItem(i, inventoryWindow->items->getId(), true, inventoryWindow->items->getQuantity(), inventoryWindow->items->isEquipment(inventoryWindow->items->getIndex())); + inventoryWindow->changeQuantity(inventoryWindow->items->getIndex(), 0); + + } else { + printf("not successfull\n"); + } + + + } + } + //if(selectedItem >= 0 && selectedItem <= INVENTORY_SIZE) { + + //if (my_items->getIndex() != -1) { + /* if (eventId == "use") { + if(items->isEquipment(items->getIndex())) { + if(items->isEquipped(items->getIndex())) { + unequipItem(items->getIndex()); + } + else { + equipItem(items->getIndex()); + } + } + else { + useItem(items->getIndex(), items->getId()); + } + } + else*/ /*if (eventId == "drop") { + itemAmountWindow->resetAmount(); + itemAmountWindow->setVisible(true); + } */ + //} +} diff --git a/src/gui/trade.h b/src/gui/trade.h new file mode 100644 index 00000000..3b863e64 --- /dev/null +++ b/src/gui/trade.h @@ -0,0 +1,89 @@ +/* + * The Mana World + * Copyright 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * The Mana World is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana World is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana World; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id $ + */ + +#ifndef _TMW_TRADE_H +#define _TMW_TRADE_H + +#include "../log.h" +#include "../net/network.h" +#include "../graphic/spriteset.h" +#include "itemcontainer.h" +#include "gui.h" +#include "window.h" + +/** + * Trade dialog. + * + * \ingroup GUI + */ +class TradeWindow : public Window, gcn::ActionListener { + public: + /** + * Constructor. + */ + TradeWindow(); + + /** + * Destructor. + */ + ~TradeWindow(); + + /** + * Draws the trade window. + */ + void draw(gcn::Graphics *graphics); + + /** + * Add an item the trade window. + */ + int addItem(int index, int id, bool own, int quantity, bool equipment); + + /** + * Remove a item from the trade window. + */ + int removeItem(int id, bool own); + + /** + * Change quantity of an item. + */ + int changeQuantity(int index, bool own, int quantity); + + /** + * Increase quantity of an item. + */ + int increaseQuantity(int index, bool own, int quantity); + + /** + * Called when receiving actions from the widgets. + */ + void action(const std::string& eventId); + + ItemContainer *my_items; + ItemContainer *trade_items; + + private: + gcn::Label *nameLabel; + gcn::Button *addButton; +}; + +#endif |