diff options
Diffstat (limited to 'src/gui/inventory.cpp')
-rw-r--r-- | src/gui/inventory.cpp | 269 |
1 files changed, 143 insertions, 126 deletions
diff --git a/src/gui/inventory.cpp b/src/gui/inventory.cpp index add7a99d..8fa4b913 100644 --- a/src/gui/inventory.cpp +++ b/src/gui/inventory.cpp @@ -19,13 +19,30 @@ along with The Mana World; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + By SimEdw + */ #include "inventory.h" +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 }, + /*{ tmw_text_proc, 304, 284, 50, 10, 0, 0, 0, 0, 0, 0, (char*)"Name:", NULL, NULL }, + { tmw_text_proc, 304, 304, 50, 10, 0, 0, 0, 0, 0, 0,(char*)"Password:", NULL, NULL }, + { tmw_edit_proc, 360, 280, 130, 18, 0, -1, 0, 0, 24, 0, username, NULL, NULL }, + { tmw_password_proc, 360, 300, 130, 18, 0, -1, 0, 0, 24, 0, password, NULL, NULL }, + { tmw_button_proc, 398, 322, 44, 18, 0, -1, 'o', D_EXIT, -1, 0, (char*)"&Ok", NULL, NULL }, + { tmw_button_proc, 446, 322, 44, 18, 0, -1, 'c', D_EXIT, -1, 0, (char*)"&Cancel", NULL, NULL }, + { tmw_check_proc, 304, 322, 60, 18, 0, 0, '1', 0, 0, 0, (char*)"keep", NULL, NULL }, */ + { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }, +}; + +DIALOG_PLAYER *inventory_player; + void TmwInventory::create(int tempxpos, int tempypos) { - xpos =tempxpos; - ypos =tempypos; + xpos = tempxpos; + ypos = tempypos; itemset = load_datafile("./items/item.dat"); empty = load_bitmap("items/empty.bmp", NULL); selected = load_bitmap("items/selected.bmp", NULL); @@ -35,7 +52,7 @@ void TmwInventory::create(int tempxpos, int tempypos) { items[i][ii].flag = 0; //doesn't hold anything items[i][ii].itemIDNum = -1; //doesn't exist :) items[i][ii].xpos = empty->w*i+1; - items[i][ii].ypos = empty->h*ii; + items[i][ii].ypos = empty->h*ii+20; items[i][ii].num = 0; } } @@ -53,122 +70,130 @@ void TmwInventory::create(int tempxpos, int tempypos) { backgroundSmall = create_bitmap(empty->w*10+10, empty->h+10); backgroundBig = create_bitmap(empty->w*10+10, empty->h*10+10); title = create_bitmap(15, backgroundSmall->h); - floodfill(title,0,0,200); - floodfill(backgroundSmall,0,0,100); - floodfill(backgroundBig,0,0,100); + clear_to_color(title, makecol(0, 0, 200)); + clear_to_color(backgroundSmall, makecol(0,0,100)); + clear_to_color(backgroundBig, makecol(0,0,100)); areDisplaying = 0; dragingWindow = 0; lastSelectedX = -1; lastSelectedY = -1; bigwindow = 0; //false + inventory_player = init_dialog(inventory_dialog, -1); + } void TmwInventory::draw(BITMAP * buffer) { // let's draw the inventory if(areDisplaying) { - int max; - if(!bigwindow) { + position_dialog(inventory_dialog, xpos, ypos); + dialog_message(inventory_dialog,MSG_DRAW,0,0); + update_dialog(inventory_player); + int max = 1; + /*if(!bigwindow) { max = 1; blit(backgroundSmall, buffer, 0, 0, xpos-5, ypos-5, 800, 600); } else { max = 10; blit(backgroundBig, buffer, 0, 0, xpos-5, ypos-5, 800, 600); - } - blit(title, buffer, 0, 0, xpos+backgroundSmall->w-5, ypos+-5, 800, 600); - for(int itemX = 0; itemX< 10; itemX++) { - for(int itemY = 0;itemY<max;itemY++) { + }*/ + //blit(title, buffer, 0, 0, xpos+backgroundSmall->w-5, ypos+-5, 800, 600); + for(int itemX=0;itemX<10;itemX++) { + for(int itemY=0;itemY<max;itemY++) { int draw = 0; - blit(empty, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 800, 600); + //blit(empty, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 800, 600); if(mouse_b&1) { if(xpos+items[itemX][itemY].xpos+empty->w > mouse_x && xpos+items[itemX][itemY].xpos < mouse_x) if(ypos+items[itemX][itemY].ypos+empty->h > mouse_y && ypos+items[itemX][itemY].ypos < mouse_y) { //selected - masked_blit(selected, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 800, 600); - draw = 1; - if(items[itemX][itemY].flag) // have a item - if(!dragingItem) { //not dragging it - dragingItem=1; //begin to drag - ghostOldIDX = itemX; - ghostOldIDY = itemY; - ghostID = items[itemX][itemY].itemIDNum; - ghostX = mouse_x; - ghostY = mouse_y; - } - } - } else { - if(lastSelectedX != -1 && dragingItem) { // have stoped dragging it over a itemholder - //swap place - itemHolder temp; - int txpos1,typos1,txpos2,typos2; - txpos1 = items[lastSelectedX][lastSelectedY].xpos; - typos1 = items[lastSelectedX][lastSelectedY].ypos; - txpos2 = items[ghostOldIDX][ghostOldIDY].xpos; - typos2 = items[ghostOldIDX][ghostOldIDY].ypos; - temp = items[lastSelectedX][lastSelectedY]; - items[lastSelectedX][lastSelectedY] = items[ghostOldIDX][ghostOldIDY]; - items[ghostOldIDX][ghostOldIDY] = temp; - items[lastSelectedX][lastSelectedY].xpos = txpos1; - items[lastSelectedX][lastSelectedY].ypos = typos1; - items[ghostOldIDX][ghostOldIDY].xpos = txpos2; - items[ghostOldIDX][ghostOldIDY].ypos = typos2; - } - dragingItem = 0; // stop dragging - } - if(mouse_b&2 && items[itemX][itemY].flag) { + masked_blit(selected, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 800, 600); + draw = 1; + if(items[itemX][itemY].flag) // have a item + if(!dragingItem) { //not dragging it + dragingItem=1; //begin to drag + ghostOldIDX = itemX; + ghostOldIDY = itemY; + ghostID = items[itemX][itemY].itemIDNum; + ghostX = mouse_x; + ghostY = mouse_y; + } + } + } else { // if !mouse_b&1 + if(lastSelectedX != -1 && dragingItem) { // have stoped dragging it over a itemholder + //swap place + itemHolder temp; + int txpos1,typos1,txpos2,typos2; + txpos1 = items[lastSelectedX][lastSelectedY].xpos; + typos1 = items[lastSelectedX][lastSelectedY].ypos; + txpos2 = items[ghostOldIDX][ghostOldIDY].xpos; + typos2 = items[ghostOldIDX][ghostOldIDY].ypos; + temp = items[lastSelectedX][lastSelectedY]; + items[lastSelectedX][lastSelectedY] = items[ghostOldIDX][ghostOldIDY]; + items[ghostOldIDX][ghostOldIDY] = temp; + items[lastSelectedX][lastSelectedY].xpos = txpos1; + items[lastSelectedX][lastSelectedY].ypos = typos1; + items[ghostOldIDX][ghostOldIDY].xpos = txpos2; + items[ghostOldIDX][ghostOldIDY].ypos = typos2; + } + dragingItem = 0; // stop dragging + } + + if(mouse_b&2 && items[itemX][itemY].flag) { // if roght mouse button over an item if(xpos+items[itemX][itemY].xpos+empty->w > mouse_x && xpos+items[itemX][itemY].xpos < mouse_x) if(ypos+items[itemX][itemY].ypos+empty->h > mouse_y && ypos+items[itemX][itemY].ypos < mouse_y) { //selected - masked_blit(selected, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 800, 600); - draw = 1; - if(itemMeny){ itemMeny=0; } else { itemMeny=1; itemIdn =items[itemX][itemY].itemIDNum ;itemMeny_x = (xpos+items[itemX][itemY].xpos)+selected->w;itemMeny_y = (ypos+items[itemX][itemY].ypos)+selected->h;} + masked_blit(selected, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 800, 600); + draw = 1; + if(itemMeny){ itemMeny=0; } else { itemMeny=1; itemIdn =items[itemX][itemY].itemIDNum ;itemMeny_x = (xpos+items[itemX][itemY].xpos)+selected->w;itemMeny_y = (ypos+items[itemX][itemY].ypos)+selected->h;} } - } - - - if(xpos+items[itemX][itemY].xpos+empty->w > mouse_x && xpos+items[itemX][itemY].xpos < mouse_x && ypos+items[itemX][itemY].ypos+empty->h > mouse_y && ypos+items[itemX][itemY].ypos < mouse_y ) { - // a hoover - lastSelectedX = itemX; - lastSelectedY = itemY; - } - - if(items[itemX][itemY].flag) //draw the item - masked_blit((BITMAP *)itemset[items[itemX][itemY].itemIDNum].dat, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 800, 600); - - //the number of that item - if(!bigwindow) - alfont_textprintf_aa(buffer, gui_font, xpos+items[itemX][itemY].xpos+20, ypos+items[itemX][itemY].ypos+empty->h-15, makecol(0,0,0), "%i",items[itemX][itemY].num); - else - alfont_textprintf_aa(buffer, gui_font, xpos+items[itemX][itemY].xpos+20, ypos+items[itemX][itemY].ypos+empty->h-15, makecol(0,0,0), "%i",items[itemX][itemY].num); } + + if(xpos+items[itemX][itemY].xpos+empty->w > mouse_x && xpos+items[itemX][itemY].xpos < mouse_x && ypos+items[itemX][itemY].ypos+empty->h > mouse_y && ypos+items[itemX][itemY].ypos < mouse_y ) { + // a hoover + lastSelectedX = itemX; + lastSelectedY = itemY; + } + + xpos = inventory_dialog[0].x; + ypos = inventory_dialog[0].y; + + if(items[itemX][itemY].flag) //draw the item + masked_blit((BITMAP *)itemset[items[itemX][itemY].itemIDNum].dat, buffer, 0, 0, (xpos+items[itemX][itemY].xpos), (ypos+items[itemX][itemY].ypos), 32, 32); + + //the number of that item + if(!bigwindow) + alfont_textprintf_aa(buffer, gui_font, xpos+items[itemX][itemY].xpos+20, ypos+items[itemX][itemY].ypos+empty->h-15, makecol(0,0,0), "%i",items[itemX][itemY].num); + else + alfont_textprintf_aa(buffer, gui_font, xpos+items[itemX][itemY].xpos+20, ypos+items[itemX][itemY].ypos+empty->h-15, makecol(0,0,0), "%i",items[itemX][itemY].num); + } - - - if(mouse_b&2) { - if(xpos+title->w+backgroundSmall->w > mouse_x && xpos+backgroundSmall->w < mouse_x) - if(ypos+title->h > mouse_y && ypos < mouse_y) { - if(bigwindow) + } + + if(mouse_b&2) { + if(xpos+title->w+backgroundSmall->w > mouse_x && xpos+backgroundSmall->w < mouse_x) + if(ypos+title->h > mouse_y && ypos < mouse_y) { + if(bigwindow) bigwindow=0; else bigwindow = 1; } - } + } } - if(mouse_b&1) { + /*if(mouse_b&1) { if(xpos+title->w+backgroundSmall->w > mouse_x && xpos+backgroundSmall->w < mouse_x) if(ypos+title->h > mouse_y && ypos < mouse_y) { //begin to move the window xpos = mouse_x-(backgroundSmall->w); ypos = mouse_y; dragingWindow=1; } - } else { dragingWindow=0;} + } else { dragingWindow=0;}*/ - if(dragingWindow) { //moving the window ? + /*if(dragingWindow) { //moving the window ? xpos = mouse_x-(backgroundSmall->w); ypos = mouse_y; - } + }*/ if(dragingItem) { //moving the item masked_blit((BITMAP *)itemset[ghostID].dat, buffer, 0, 0, ghostX, ghostY, 800, 600); @@ -177,28 +202,25 @@ void TmwInventory::draw(BITMAP * buffer) { } if(itemMeny){ - if(itemMeny_y < mouse_y && itemMeny_y+10 > mouse_y) { - if(mouse_b&1) - { - useItem(itemIdn); - itemMeny = 0; + if(itemMeny_y < mouse_y && itemMeny_y+10 > mouse_y) { + if(mouse_b&1) { + useItem(itemIdn); + itemMeny = 0; } - alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y, makecol(255,237,33), "Use item"); - } else { - alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y, MAKECOL_BLACK, "Use item"); + alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y, makecol(255,237,33), "Use item"); + } else { + alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y, MAKECOL_BLACK, "Use item"); } - if(itemMeny_y+10 < mouse_y && itemMeny_y+20 > mouse_y) { - if(mouse_b&1) - { - rmItem(itemIdn); - itemMeny = 0; + if(itemMeny_y+10 < mouse_y && itemMeny_y+20 > mouse_y) { + if(mouse_b&1) { + rmItem(itemIdn); + itemMeny = 0; } - alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y+10, makecol(255,237,33), "Del item"); - } else { - alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y+10, MAKECOL_BLACK, "Del item"); + alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y+10, makecol(255,237,33), "Del item"); + } else { + alfont_textprintf_aa(buffer, gui_font, itemMeny_x, itemMeny_y+10, MAKECOL_BLACK, "Del item"); } } - } @@ -247,44 +269,39 @@ int TmwInventory::addItem(int idnum, int antal) { return -3; } -int TmwInventory::rmItem(int idnum) -{ -int found, tempi; -found = 0; -tempi = -1; -for(int i = 0; i< 10; i++) - { - for(int ii = 0; ii< 10; ii++) - { - if(items[i][ii].itemIDNum == idnum) - { items[i][ii].itemIDNum = -1; - items[i][ii].flag = 0; - items[i][ii].num = 0; - return 1; - } - } +int TmwInventory::rmItem(int idnum) { + int found, tempi; + found = 0; + tempi = -1; + for(int i = 0; i< 10; i++) { + for(int ii = 0; ii< 10; ii++) { + if(items[i][ii].itemIDNum == idnum) { + items[i][ii].itemIDNum = -1; + items[i][ii].flag = 0; + items[i][ii].num = 0; + return 1; + } + } } -return -1; + return -1; } -int TmwInventory::changeNum(int idnum, int antal) -{ -int found, tempi; -found = 0; -tempi = -1; -for(int i = 0; i< 10; i++) - { - for(int ii = 0; ii< 10; ii++) - { - if(items[i][ii].itemIDNum == idnum) - { items[i][ii].num = antal; return 1; } - } - } -return -1; +int TmwInventory::changeNum(int idnum, int antal) { + int found, tempi; + found = 0; + tempi = -1; + for(int i = 0; i< 10; i++) { + for(int ii = 0; ii< 10; ii++) { + if(items[i][ii].itemIDNum == idnum) { + items[i][ii].num = antal; + return 1; + } + } + } + return -1; } -int TmwInventory::useItem(int idnum) -{ +int TmwInventory::useItem(int idnum) { printf("Use item %i\n",idnum); WFIFOW(0) = net_w_value(0x00a7); WFIFOW(2) = net_w_value(idnum); |