/ Published in: C++
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
void InventoryGui::setGui() { if(inv) { // set item list { // here we have to hide the items which are assigned to slots // create a 'is' array which determines visibility of an element (1=visible, 0=hidden) Bool *is=Alloc<Bool>(inv->items.elms()); // allocate bytes for all items in container SetMem(is,1,inv->items.elms()); // set memory to '1' (make all items visible by default) REPA(inv->slot) // iterate through all slots { if(inv->slot[i].valid()) // if the slot is valid { Int index=inv->items.validIndex(&inv->slot[i]()); // get index of a slot item in items container if(InRange(index,inv->items)) // if its valid is[index]=0; // set visibility for item assigned to a slot to 0, to be hidden on the list } } list.setData(inv->items,is); // set list data from items container and visibility list Free(is); // free allocated memory } // set slot images REP(SLOT_NUM) // for all slots if(i!=SLOT_TEMP) // skip temporary slot because it's not drawn using 'Image' class { GuiImage &img_back= slot_img[i][0], // background image, we use it for accessing its rectangle &img_item= slot_img[i][1]; // item image Reference<Item> & item=inv->slot [i] ; // item at slot if(!item.valid())img_item.set(NULL);else // if there is no item then clear the item image slot { Image *icon=item().icon; // access item's icon img_item.set(icon); // set slot image as the item's icon if(icon) // set proper scaling { Vec2 size(icon->x(),icon->y()); size*=PIXEL_SIZE; // set default size if(size.x>img_back.rect.w())size*=img_back.rect.w()/size.x; // clamp item size to background slot width if(size.y>img_back.rect.h())size*=img_back.rect.h()/size.y; // clamp item size to background slot height Rect rect(img_back.rect.center()); rect.extend(size/2); img_item.setRect(rect); } } } }else { list.clear(); REP(SLOT_NUM)slot_img[i][1].set(NULL); } }