summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2004-12-26 19:44:58 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2004-12-26 19:44:58 +0000
commit800f8e6070f10908c446147b96d5e1424f55c729 (patch)
treec043d03e5a0294174696a3a6d23ecc12a2acdb80 /src/gui
parenta94d3a14dd0d891cf05ea0c7a4d1613560fd96c5 (diff)
downloadmana-800f8e6070f10908c446147b96d5e1424f55c729.tar.gz
mana-800f8e6070f10908c446147b96d5e1424f55c729.tar.bz2
mana-800f8e6070f10908c446147b96d5e1424f55c729.tar.xz
mana-800f8e6070f10908c446147b96d5e1424f55c729.zip
Ported the inventory dialog over to Guichan. For the moment it is not
possible to delete or use items.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/inventory.cpp129
-rw-r--r--src/gui/inventory.h51
-rw-r--r--src/gui/shop.cpp176
-rw-r--r--src/gui/window.h2
4 files changed, 168 insertions, 190 deletions
diff --git a/src/gui/inventory.cpp b/src/gui/inventory.cpp
index 8b1032b8..0b44807c 100644
--- a/src/gui/inventory.cpp
+++ b/src/gui/inventory.cpp
@@ -20,67 +20,64 @@
*/
#include "inventory.h"
+#include <sstream>
-DIALOG inventory_dialog[] = {
- /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
- { tmw_dialog_proc, 300, 252, 322, 60, 0, -1, 0, 0, 0, 0, (char*)"Inventory", NULL, NULL },
- { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
-};
-
-DIALOG_PLAYER *inventory_player;
-
-TmwInventory::TmwInventory()
-{
- show_inventory = false;
-}
-
-TmwInventory::~TmwInventory()
+InventoryDialog::InventoryDialog(gcn::Container *parent):
+ Window(parent, "Inventory")
{
-}
+ setSize(322, 60);
-void TmwInventory::create(int tempxpos, int tempypos) {
itemset = load_datafile("./data/graphic/items.dat");
for (int i = 0; i < INVENTORY_SIZE; i++) {
- items[i].id = -1; // if id is negative there's no item
+ items[i].id = -1;
items[i].quantity = 0;
}
+}
- inventory_player = init_dialog(inventory_dialog, -1);
- position_dialog(inventory_dialog, x, y);
-
- show_inventory = false;
+InventoryDialog::~InventoryDialog()
+{
}
-void TmwInventory::draw(BITMAP *buffer) {
- if (!show_inventory) return;
+void InventoryDialog::draw(gcn::Graphics *graphics)
+{
+ int x, y;
+ getAbsolutePosition(x, y);
+
+ // Draw window graphics
+ Window::draw(graphics);
+
+ gcn::AllegroGraphics *alGraphics = (gcn::AllegroGraphics*)graphics;
+ BITMAP *target = alGraphics->getTarget();
- dialog_message(inventory_dialog, MSG_DRAW, 0, 0);
- update_dialog(inventory_player);
for (int i = 0; i < INVENTORY_SIZE; i++) {
if (items[i].quantity > 0) {
if (items[i].id >= 501 && items[i].id <= 511) {
- draw_rle_sprite(gui_bitmap,
+ draw_rle_sprite(target,
(RLE_SPRITE *)itemset[items[i].id - 501].dat,
- inventory_dialog[0].x + 24 * i,
- inventory_dialog[0].y + 26);
+ x + 24 * i,
+ y + 26);
}
- //else
- //masked_blit((BITMAP *)itemset[0].dat, gui_bitmap, 0, 0, inventory_dialog[0].x+24*i, inventory_dialog[0].y+26, 22, 22);
-
- textprintf_ex(gui_bitmap, font, inventory_dialog[0].x + 24 * i,
- inventory_dialog[0].y + 46, makecol(0, 0, 0), -1,
- "%i", items[i].quantity);
+ //else {
+ // masked_blit((BITMAP *)itemset[0].dat, gui_bitmap, 0, 0,
+ // x + 24 * i, y + 26, 22, 22);
+ //}
+
+ std::stringstream ss;
+ ss << items[i].quantity;
+ graphics->drawText(ss.str(), 24 * i + 10, 44,
+ gcn::Graphics::CENTER);
}
}
+ /*
if (mouse_b & 2) {
for (int i = 0; i < INVENTORY_SIZE; i++) {
if (items[i].quantity > 0 &&
- inventory_dialog[0].x + 24 * i + 24 > mouse_x &&
- inventory_dialog[0].x + 24 * i < mouse_x &&
- inventory_dialog[0].y + 44 + 24 > mouse_y &&
- inventory_dialog[0].y + 44 < mouse_y)
+ x + 24 * i + 24 > mouse_x &&
+ x + 24 * i < mouse_x &&
+ y + 44 + 24 > mouse_y &&
+ y + 44 < mouse_y)
{
itemMeny = 1;
itemMeny_x = 24 * i;
@@ -91,54 +88,44 @@ void TmwInventory::draw(BITMAP *buffer) {
}
if (itemMeny) {
- if (inventory_dialog[0].y + itemMeny_y < mouse_y &&
- inventory_dialog[0].y + itemMeny_y + 10 > mouse_y)
+ if (y + itemMeny_y < mouse_y && y + itemMeny_y + 10 > mouse_y)
{
if (mouse_b & 1) {
- use_item(itemMeny_i,items[itemMeny_i].id);
+ useItem(itemMeny_i,items[itemMeny_i].id);
itemMeny = 0;
}
- textprintf_ex(buffer, font, inventory_dialog[0].x + itemMeny_x,
- inventory_dialog[0].y + itemMeny_y, makecol(255, 237, 33),
- -1, "Use item");
- } else {
- textprintf_ex(buffer, font, inventory_dialog[0].x + itemMeny_x,
- inventory_dialog[0].y + itemMeny_y, MAKECOL_BLACK, -1,
- "Use item");
+ textprintf_ex(buffer, font, x + itemMeny_x,
+ y + itemMeny_y, makecol(255, 237, 33), -1, "Use item");
}
- if (inventory_dialog[0].y + itemMeny_y + 10 < mouse_y &&
- inventory_dialog[0].y + itemMeny_y + 20 > mouse_y) {
+ else {
+ textprintf_ex(buffer, font, x + itemMeny_x,
+ y + itemMeny_y, MAKECOL_BLACK, -1, "Use item");
+ }
+ if (y + itemMeny_y + 10 < mouse_y && y + itemMeny_y + 20 > mouse_y) {
if (mouse_b & 1) {
- drop_item(itemMeny_i, 1);
+ dropItem(itemMeny_i, 1);
itemMeny = 0;
}
- textprintf_ex(buffer, font, inventory_dialog[0].x + itemMeny_x,
- inventory_dialog[0].y + itemMeny_y + 10,
+ textprintf_ex(buffer, font, x + itemMeny_x,
+ y + itemMeny_y + 10,
makecol(255, 237, 33), -1, "Del item");
- } else {
- textprintf_ex(buffer, font, inventory_dialog[0].x + itemMeny_x,
- inventory_dialog[0].y + itemMeny_y + 10, MAKECOL_BLACK, -1,
- "Del item");
+ }
+ else {
+ textprintf_ex(buffer, font, x + itemMeny_x,
+ y + itemMeny_y + 10, MAKECOL_BLACK, -1, "Del item");
}
}
+ */
}
-void TmwInventory::setVisible(bool visible) {
- show_inventory = visible;
-}
-
-bool TmwInventory::isVisible() {
- return show_inventory;
-}
-
-int TmwInventory::add_item(int index, int id, int quantity) {
+int InventoryDialog::addItem(int index, int id, int quantity) {
items[index].id = id;
items[index].quantity += quantity;
return 0;
}
-int TmwInventory::remove_item(int id) {
+int InventoryDialog::removeItem(int id) {
for (int i = 0; i < INVENTORY_SIZE; i++) {
if (items[i].id == id) {
items[i].id = -1;
@@ -148,17 +135,17 @@ int TmwInventory::remove_item(int id) {
return 0;
}
-int TmwInventory::change_quantity(int index, int quantity) {
+int InventoryDialog::changeQuantity(int index, int quantity) {
items[index].quantity = quantity;
return 0;
}
-int TmwInventory::increase_quantity(int index, int quantity) {
+int InventoryDialog::increaseQuantity(int index, int quantity) {
items[index].quantity += quantity;
return 0;
}
-int TmwInventory::use_item(int index, int id) {
+int InventoryDialog::useItem(int index, int id) {
WFIFOW(0) = net_w_value(0x00a7);
WFIFOW(2) = net_w_value(index);
WFIFOL(4) = net_l_value(id);
@@ -168,7 +155,7 @@ int TmwInventory::use_item(int index, int id) {
return 0;
}
-int TmwInventory::drop_item(int index, int amunt) {
+int InventoryDialog::dropItem(int index, int amunt) {
WFIFOW(0) = net_w_value(0x00a7);
WFIFOW(2) = net_w_value(index);
WFIFOL(4) = net_l_value(amunt);
diff --git a/src/gui/inventory.h b/src/gui/inventory.h
index a83a1f80..7c1740a9 100644
--- a/src/gui/inventory.h
+++ b/src/gui/inventory.h
@@ -32,68 +32,59 @@
#include "../log.h"
#include "../net/network.h"
#include "gui.h"
+#include "window.h"
#define INVENTORY_SIZE 100
-struct itemHolder { // the holder of a item
+struct ITEM_HOLDER { // the holder of a item
int id; // the id of the item
int quantity; // number of items
//int index; // item position
};
-class TmwInventory {
- public:
- TmwInventory();
- ~TmwInventory();
-
- /**
- * Initialize inventory and create the window.
- */
- void create(int x, int y);
-
- /**
- * Draw inventory window.
- */
- void draw(BITMAP *);
- /**
- * Sets if inventory is visible.
- */
- void setVisible(bool visible);
+/**
+ * Inventory dialog.
+ *
+ * \ingroup GUI
+ */
+class InventoryDialog : public Window {
+ public:
+ InventoryDialog(gcn::Container *parent);
+ ~InventoryDialog();
/**
- * Returns visibility of inventory.
+ * Draws the inventory window.
*/
- bool isVisible();
+ void draw(gcn::Graphics *graphics);
/**
* Add an item the inventory.
*/
- int add_item(int index, int id, int quantity);
+ int addItem(int index, int id, int quantity);
/**
* Remove a item from the inventory.
*/
- int remove_item(int id);
+ int removeItem(int id);
/**
* Change quantity of an item.
*/
- int change_quantity(int index, int quantity);
+ int changeQuantity(int index, int quantity);
/**
* Increase quantity of an item
*/
- int increase_quantity(int index, int quantity);
+ int increaseQuantity(int index, int quantity);
- int use_item(int index, int id);
- int quantityForIndex(int index) { return items[index].quantity; }
- int drop_item(int index, int amunt);
+ ITEM_HOLDER items[INVENTORY_SIZE]; /**< this is the holder of items */
- itemHolder items[INVENTORY_SIZE]; /**< this is the holder of items */
private:
+ int useItem(int index, int id);
+ int dropItem(int index, int amunt);
+
DATAFILE *itemset;
- bool show_inventory;
int itemMeny, itemMeny_x, itemMeny_y, itemMeny_i;
};
diff --git a/src/gui/shop.cpp b/src/gui/shop.cpp
index acf5eda9..942df5cf 100644
--- a/src/gui/shop.cpp
+++ b/src/gui/shop.cpp
@@ -29,119 +29,119 @@ char* selectedItem = "You got 4";
ITEM_SHOP *shop = NULL;
char *item_db[] = {
- "Cactus Drink", "Cactus potion", "Casino coins", "Decor Candy", "Maggot Slime",
- "Candy Cane", "Scorpion Stinger", "Xmas Cake", "Chocolate", "Candy", "Santa Hat"
+ "Cactus Drink", "Cactus potion", "Casino coins", "Decor Candy", "Maggot Slime",
+ "Candy Cane", "Scorpion Stinger", "Xmas Cake", "Chocolate", "Candy", "Santa Hat"
};
char *shop_list(int index, int *list_size) {
- if(index<0) {
- *list_size = n_items;
- return NULL;
- } else {
- int iterator = 0;
- ITEM_SHOP *item_shop = shop;
- while(iterator<index) {
- item_shop = item_shop->next;
- iterator++;
- }
- return item_shop->name;
- }
+ if(index<0) {
+ *list_size = n_items;
+ return NULL;
+ } else {
+ int iterator = 0;
+ ITEM_SHOP *item_shop = shop;
+ while(iterator<index) {
+ item_shop = item_shop->next;
+ iterator++;
+ }
+ return item_shop->name;
+ }
}
void add_buy_item(short id, int price) {
- ITEM_SHOP *item_shop = (ITEM_SHOP *)malloc(sizeof(ITEM_SHOP));
- if(id-501>=0 && id-501<=11)
- sprintf(item_shop->name, "%s %i gp", item_db[id-501], price);
- else
- sprintf(item_shop->name, "Unknown item %i gp", price);
- item_shop->price = price;
- item_shop->id = id;
- item_shop->next = NULL;
- if(shop==NULL)
- shop = item_shop;
- else {
- ITEM_SHOP *temp = shop;
- while(temp->next)
- temp = temp->next;
- temp->next = item_shop;
- }
+ ITEM_SHOP *item_shop = (ITEM_SHOP *)malloc(sizeof(ITEM_SHOP));
+ if(id-501>=0 && id-501<=11)
+ sprintf(item_shop->name, "%s %i gp", item_db[id-501], price);
+ else
+ sprintf(item_shop->name, "Unknown item %i gp", price);
+ item_shop->price = price;
+ item_shop->id = id;
+ item_shop->next = NULL;
+ if(shop==NULL)
+ shop = item_shop;
+ else {
+ ITEM_SHOP *temp = shop;
+ while(temp->next)
+ temp = temp->next;
+ temp->next = item_shop;
+ }
}
void add_sell_item(short index, int price) {
- int id = inventory.items[index].id;
- ITEM_SHOP *item_shop = (ITEM_SHOP *)malloc(sizeof(ITEM_SHOP));
- if(id>=501 && id<=511)
- sprintf(item_shop->name, "%s %i gp", item_db[id-501], price);
- else
- sprintf(item_shop->name, "Unknown item %i gp", price);
- item_shop->price = price;
- item_shop->index = index;
- item_shop->id = id;
- item_shop->quantity = inventory.items[index].quantity;
- item_shop->next = NULL;
- if(shop==NULL)
- shop = item_shop;
- else {
- ITEM_SHOP *temp = shop;
- while(temp->next)
- temp = temp->next;
- temp->next = item_shop;
- }
+ int id = inventoryDialog->items[index].id;
+ ITEM_SHOP *item_shop = (ITEM_SHOP *)malloc(sizeof(ITEM_SHOP));
+ if (id >= 501 && id <= 511)
+ sprintf(item_shop->name, "%s %i gp", item_db[id-501], price);
+ else
+ sprintf(item_shop->name, "Unknown item %i gp", price);
+ item_shop->price = price;
+ item_shop->index = index;
+ item_shop->id = id;
+ item_shop->quantity = inventoryDialog->items[index].quantity;
+ item_shop->next = NULL;
+ if (shop == NULL)
+ shop = item_shop;
+ else {
+ ITEM_SHOP *temp = shop;
+ while(temp->next)
+ temp = temp->next;
+ temp->next = item_shop;
+ }
}
void close_shop() {
- ITEM_SHOP *temp, *next;
- temp = shop;
- while(temp) {
- next = temp->next;
- free(temp);
- temp = next;
- }
- shop = NULL;
+ ITEM_SHOP *temp, *next;
+ temp = shop;
+ while(temp) {
+ next = temp->next;
+ free(temp);
+ temp = next;
+ }
+ shop = NULL;
}
short get_item_id(int index) {
- int iterator = 0;
- ITEM_SHOP *item_shop = shop;
- while(iterator<index) {
- item_shop = item_shop->next;
- iterator++;
- }
- return item_shop->id;
+ int iterator = 0;
+ ITEM_SHOP *item_shop = shop;
+ while(iterator<index) {
+ item_shop = item_shop->next;
+ iterator++;
+ }
+ return item_shop->id;
}
int get_item_quantity(int index) {
- int iterator = 0;
- ITEM_SHOP *item_shop = shop;
- while(iterator<index) {
- item_shop = item_shop->next;
- iterator++;
- }
- if(item_shop)return item_shop->quantity;
- else return 0;
+ int iterator = 0;
+ ITEM_SHOP *item_shop = shop;
+ while(iterator<index) {
+ item_shop = item_shop->next;
+ iterator++;
+ }
+ if(item_shop)return item_shop->quantity;
+ else return 0;
}
int get_item_index(int index) {
- int iterator = 0;
- ITEM_SHOP *item_shop = shop;
- while(iterator<index) {
- item_shop = item_shop->next;
- iterator++;
- }
- return item_shop->index;
+ int iterator = 0;
+ ITEM_SHOP *item_shop = shop;
+ while(iterator<index) {
+ item_shop = item_shop->next;
+ iterator++;
+ }
+ return item_shop->index;
}
int get_item_price(int index) {
- int iterator = 0;
- ITEM_SHOP *item_shop = shop;
- while(iterator<index) {
- item_shop = item_shop->next;
- iterator++;
- }
- return item_shop->price;
+ int iterator = 0;
+ ITEM_SHOP *item_shop = shop;
+ while(iterator<index) {
+ item_shop = item_shop->next;
+ iterator++;
+ }
+ return item_shop->price;
}
void changeQ(void *dp3, int d2) {
- sprintf(itemCurrenyQ,"%i",d2);
- printf("%s\n",itemCurrenyQ);
+ sprintf(itemCurrenyQ,"%i",d2);
+ printf("%s\n",itemCurrenyQ);
}
diff --git a/src/gui/window.h b/src/gui/window.h
index c7fd6956..7ad1a0d2 100644
--- a/src/gui/window.h
+++ b/src/gui/window.h
@@ -67,7 +67,7 @@ class Window : public gcn::Container, public gcn::MouseListener
/**
* Draws the window.
*/
- void draw(gcn::Graphics* graphics);
+ void draw(gcn::Graphics *graphics);
/**
* Adds a widget to the window.