summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/itemcontainer.cpp155
-rw-r--r--src/gui/itemcontainer.h123
2 files changed, 278 insertions, 0 deletions
diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp
new file mode 100644
index 00000000..f6755c9f
--- /dev/null
+++ b/src/gui/itemcontainer.cpp
@@ -0,0 +1,155 @@
+/*
+ * 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
+ *
+ */
+
+#include "itemcontainer.h"
+#include "../graphic/graphic.h"
+#include "../resources/resourcemanager.h"
+
+ItemContainer::ItemContainer()
+{
+ ResourceManager *resman = ResourceManager::getInstance();
+ Image *itemImg = resman->getImage("graphic/items.bmp");
+ if (!itemImg) error("Unable to load items.bmp");
+ itemset = new Spriteset(itemImg, 20, 20);
+
+ selectedItem = -1; /**< No item selected */
+
+ for (int i = 0; i < INVENTORY_SIZE; i++) {
+ items[i].id = -1;
+ items[i].quantity = 0;
+ }
+}
+
+ItemContainer::~ItemContainer()
+{
+}
+
+void ItemContainer::draw(gcn::Graphics* graphics)
+{
+ int x, y, w, h;
+ getAbsolutePosition(x, y);
+ w = getWidth();
+ h = getHeight();
+
+ graphics->drawRectangle(gcn::Rectangle(0, 0, w, h));
+
+ if(items[selectedItem].quantity <= 0)
+ selectedItem = -1;
+
+ for (int i = 0; i < INVENTORY_SIZE; i++) {
+ if (items[i].quantity > 0) {
+ if (items[i].id >= 501 && items[i].id <= 511) {
+ itemset->spriteset[items[i].id - 501]->draw(screen,
+ x + 24 * i, y + 2);
+ }
+
+ std::stringstream ss;
+ ss << items[i].quantity;
+ graphics->drawText(ss.str(), 24 * i + 10, 24 + 2,
+ gcn::Graphics::CENTER);
+ }
+ }
+
+ if (selectedItem >= 0) {
+ graphics->drawRectangle(gcn::Rectangle(24 * selectedItem + 1, 2,
+ 20, 20));
+ }
+}
+
+int ItemContainer::getIndex()
+{
+ return selectedItem;
+}
+
+int ItemContainer::getId()
+{
+ if (selectedItem != -1) {
+ return items[selectedItem].id;
+ }
+ else {
+ return 0;
+ }
+}
+
+int ItemContainer::getId(int index)
+{
+ return items[index].id;
+}
+
+int ItemContainer::getQuantity()
+{
+ if (selectedItem != -1) {
+ return items[selectedItem].quantity;
+ }
+ else {
+ return 0;
+ }
+
+}
+
+int ItemContainer::getQuantity(int index)
+{
+ return items[index].quantity;
+}
+
+void ItemContainer::addItem(int index, int id, int quantity)
+{
+ items[index].id = id;
+ items[index].quantity += quantity;
+}
+
+void ItemContainer::removeItem(int id)
+{
+ for (int i = 0; i < INVENTORY_SIZE; i++) {
+ if (items[i].id == id) {
+ items[i].id = -1;
+ items[i].quantity = 0;
+ }
+ }
+}
+
+void ItemContainer::changeQuantity(int index, int quantity)
+{
+ items[index].quantity = quantity;
+}
+
+void ItemContainer::increaseQuantity(int index, int quantity)
+{
+ items[index].quantity += quantity;
+}
+
+void ItemContainer::mousePress(int mx, int my, int button)
+{
+ if (button == gcn::MouseInput::LEFT)
+ selectedItem = mx / 24;
+ if (selectedItem > INVENTORY_SIZE)
+ selectedItem = INVENTORY_SIZE;
+}
+
+void ItemContainer::_mouseInputMessage(const gcn::MouseInput &mouseInput)
+{
+ if (mouseInput.getButton() == gcn::MouseInput::LEFT) {
+ gcn::Widget::_mouseInputMessage(mouseInput);
+ mousePress(mouseInput.x, mouseInput.y, mouseInput.getButton());
+ }
+}
+
diff --git a/src/gui/itemcontainer.h b/src/gui/itemcontainer.h
new file mode 100644
index 00000000..77877dd0
--- /dev/null
+++ b/src/gui/itemcontainer.h
@@ -0,0 +1,123 @@
+/*
+ * 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
+ *
+ */
+
+#ifndef _TMW_ITEMCONTAINER_H__
+#define _TMW_ITEMCONTAINER_H__
+
+#include <iostream>
+#include <guichan.hpp>
+#include "../resources/image.h"
+#include "../graphic/spriteset.h"
+
+#define INVENTORY_SIZE 100
+
+struct ITEM_HOLDER { // the holder of a item
+ int id; // the id of the item
+ int quantity; // number of items
+};
+
+/**
+ * An item container. Used to show items in inventory.
+ *
+ * \ingroup GUI
+ */
+class ItemContainer : public gcn::Widget
+{
+ private:
+
+ Spriteset *itemset;
+ int selectedItem;
+ int itemNumber;
+ ITEM_HOLDER items[INVENTORY_SIZE]; /**< this is the holder of items */
+
+ public:
+ /**
+ * Constructor. Initializes the graphic.
+ *
+ * @param path The file containing item images.
+ */
+ ItemContainer();
+
+ /**
+ * Destructor.
+ */
+ virtual ~ItemContainer();
+
+ /**
+ * Draws the items.
+ */
+ void draw(gcn::Graphics *graphics);
+
+ /**
+ * Handles mouse click.
+ */
+ void mousePress(int mx, int my, int button);
+
+ /**
+ * Returns index of the selected item.
+ */
+ int getIndex();
+
+ /**
+ * Returns the id of the selected item.
+ */
+ int getId();
+
+ /**
+ * Returns the id of an item.
+ */
+ int getId(int index);
+
+ /**
+ * Returns the quantity of the selected item.
+ */
+ int getQuantity();
+
+ /**
+ * Returns the quantity of an item.
+ */
+ int getQuantity(int index);
+
+ /**
+ * Adds a new item.
+ */
+ void addItem(int index, int id, int quantity);
+
+ /**
+ * Remove a item from the inventory.
+ */
+ void removeItem(int id);
+
+ /**
+ * Change quantity of an item.
+ */
+ void changeQuantity(int index, int quantity);
+
+ /**
+ * Increase quantity of an item.
+ */
+ void increaseQuantity(int index, int quantity);
+
+ void _mouseInputMessage(const gcn::MouseInput &mouseInput);
+};
+
+#endif