summaryrefslogtreecommitdiff
path: root/src/gui/itemcontainer.cpp
diff options
context:
space:
mode:
authorEugenio Favalli <elvenprogrammer@gmail.com>2005-02-06 14:44:33 +0000
committerEugenio Favalli <elvenprogrammer@gmail.com>2005-02-06 14:44:33 +0000
commit6ede9757b3001544718a736024da861a0d710cbb (patch)
tree2c40898a59f2466e2c28badf8c70365572cba7d1 /src/gui/itemcontainer.cpp
parent1d6113f5306923c162a5d770ba268103a732e06b (diff)
downloadmana-client-6ede9757b3001544718a736024da861a0d710cbb.tar.gz
mana-client-6ede9757b3001544718a736024da861a0d710cbb.tar.bz2
mana-client-6ede9757b3001544718a736024da861a0d710cbb.tar.xz
mana-client-6ede9757b3001544718a736024da861a0d710cbb.zip
Forgot these ones
Diffstat (limited to 'src/gui/itemcontainer.cpp')
-rw-r--r--src/gui/itemcontainer.cpp155
1 files changed, 155 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());
+ }
+}
+