Return to Snippet

Revision: 26736
at May 8, 2010 20:16 by spire8989


Initial Code
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);
   }
}

Initial URL


Initial Description


Initial Title
Stranded - Snippet 1

Initial Tags


Initial Language
C++