|
|
|
@ -14,8 +14,8 @@ private: |
|
|
|
|
int inventoryIndex=0; |
|
|
|
|
bool valid=false; |
|
|
|
|
public: |
|
|
|
|
inline MenuItemButton(geom2d::rect<float>rect,std::vector<IT>&invRef,int invIndex,MenuFunc onClick) |
|
|
|
|
:MenuIconButton(rect,invRef.size()>invIndex?ITEM_DATA.at(invRef[invIndex]).Decal():nullptr,onClick),invRef(invRef),inventoryIndex(invIndex){ |
|
|
|
|
inline MenuItemButton(MenuType parent,geom2d::rect<float>rect,std::vector<IT>&invRef,int invIndex,MenuFunc onClick) |
|
|
|
|
:MenuIconButton(parent,rect,invRef.size()>invIndex?ITEM_DATA.at(invRef[invIndex]).Decal():nullptr,onClick),invRef(invRef),inventoryIndex(invIndex){ |
|
|
|
|
draggable=true; |
|
|
|
|
valid=invRef.size()>invIndex; |
|
|
|
|
} |
|
|
|
@ -30,18 +30,44 @@ protected: |
|
|
|
|
virtual inline void Update(Crawler*game)override{ |
|
|
|
|
MenuIconButton::Update(game); |
|
|
|
|
valid=invRef.size()>inventoryIndex&&ITEM_DATA.count(invRef[inventoryIndex]); |
|
|
|
|
Menu*menu=Menu::stack.back(); |
|
|
|
|
if(valid){ |
|
|
|
|
icon=ITEM_DATA.at(invRef[inventoryIndex]).Decal(); |
|
|
|
|
if(hovered){ |
|
|
|
|
switch(parentMenu){ |
|
|
|
|
case INVENTORY:{ |
|
|
|
|
//There should be an itemName label to modify.
|
|
|
|
|
menu->components.at("itemName")->label=ITEM_DATA.at(invRef[inventoryIndex]).Name(); |
|
|
|
|
//There should be an itemDescription label to modify.
|
|
|
|
|
menu->components.at("itemDescription")->label=ITEM_DATA.at(invRef[inventoryIndex]).Description(); |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
icon=nullptr; |
|
|
|
|
if(hovered){ |
|
|
|
|
switch(parentMenu){ |
|
|
|
|
case INVENTORY:{ |
|
|
|
|
//There should be an itemName label to modify.
|
|
|
|
|
menu->components.at("itemName")->label=""; |
|
|
|
|
//There should be an itemDescription label to modify.
|
|
|
|
|
menu->components.at("itemDescription")->label=""; |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
virtual inline void Draw(Crawler*game,vf2d parentPos,bool focused)override{ |
|
|
|
|
MenuIconButton::Draw(game,parentPos,focused); |
|
|
|
|
if(valid){ |
|
|
|
|
std::string quantityText="x"+std::to_string(Inventory::GetItemCount(invRef.at(inventoryIndex))); |
|
|
|
|
vf2d textSize=vf2d(game->GetTextSizeProp(quantityText))*0.5; |
|
|
|
|
game->DrawShadowStringDecal(parentPos+rect.pos+rect.size-textSize,quantityText,WHITE,BLACK,{0.5,0.5},0.5); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
virtual inline MenuComponent*PickUpDraggableItem()override{ |
|
|
|
|
if(valid){ |
|
|
|
|
MenuItemButton*pickUp=new MenuItemButton(rect,invRef,inventoryIndex,onClick); |
|
|
|
|
MenuItemButton*pickUp=new MenuItemButton(parentMenu,rect,invRef,inventoryIndex,onClick); |
|
|
|
|
valid=false; |
|
|
|
|
return pickUp; |
|
|
|
|
}else{ |
|
|
|
|