Implemented Loadout selection item buttons, corrected inventory window missing category variables, corrected loadout item selection logic, updated inventory window layout.
parent
0c9a341e89
commit
f427928ca6
@ -0,0 +1,73 @@ |
|||||||
|
/*
|
||||||
|
License (OLC-3) |
||||||
|
~~~~~~~~~~~~~~~ |
||||||
|
|
||||||
|
Copyright 2018 - 2023 OneLoneCoder.com |
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, |
||||||
|
are permitted provided that the following conditions are met: |
||||||
|
|
||||||
|
1. Redistributions or derivations of source code must retain the above copyright |
||||||
|
notice, this list of conditions and the following disclaimer. |
||||||
|
|
||||||
|
2. Redistributions or derivative works in binary form must reproduce the above |
||||||
|
copyright notice. This list of conditions and the following disclaimer must be |
||||||
|
reproduced in the documentation and/or other materials provided with the distribution. |
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors may |
||||||
|
be used to endorse or promote products derived from this software without specific |
||||||
|
prior written permission. |
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY |
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||||
|
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||||||
|
SUCH DAMAGE. |
||||||
|
*/ |
||||||
|
#pragma once |
||||||
|
#include "Crawler.h" |
||||||
|
#include "DEFINES.h" |
||||||
|
#include "Menu.h" |
||||||
|
#include "MenuLabel.h" |
||||||
|
#include "MenuItemItemButton.h" |
||||||
|
#include "State_OverworldMap.h" |
||||||
|
|
||||||
|
INCLUDE_game |
||||||
|
typedef Attribute A; |
||||||
|
|
||||||
|
void Menu::InitializeItemLoadoutWindow(){ |
||||||
|
Menu*itemLoadoutWindow=CreateMenu(ITEM_LOADOUT,CENTERED,game->GetScreenSize()-vi2d{4,4}); |
||||||
|
|
||||||
|
float itemLoadoutWindowWidth=(game->GetScreenSize().x-5.f); |
||||||
|
|
||||||
|
|
||||||
|
MenuLabel*loadoutLabel=NEW MenuLabel(ITEM_LOADOUT,{{0,24},{itemLoadoutWindowWidth,24}},"Loadout",2,ComponentAttr::SHADOW|ComponentAttr::BACKGROUND|ComponentAttr::OUTLINE); |
||||||
|
|
||||||
|
itemLoadoutWindow->AddComponent("Loadout Label",loadoutLabel); |
||||||
|
|
||||||
|
float buttonBorderPadding=64; |
||||||
|
|
||||||
|
MenuItemItemButton*loadoutItem1=NEW MenuItemItemButton(ITEM_LOADOUT,{{64,120},{48,48}},game->GetLoadoutItem(0),INVENTORY,[](MenuFuncData data){Menu::menus.at(INVENTORY)->I(A::LOADOUT_SLOT)=0; return true;}); |
||||||
|
MenuItemItemButton*loadoutItem2=NEW MenuItemItemButton(ITEM_LOADOUT,{{itemLoadoutWindowWidth/2-24,120},{48,48}},game->GetLoadoutItem(1),INVENTORY,[](MenuFuncData data){Menu::menus.at(INVENTORY)->I(A::LOADOUT_SLOT)=1;return true;}); |
||||||
|
MenuItemItemButton*loadoutItem3=NEW MenuItemItemButton(ITEM_LOADOUT,{{itemLoadoutWindowWidth-48-64,120},{48,48}},game->GetLoadoutItem(2),INVENTORY,[](MenuFuncData data){Menu::menus.at(INVENTORY)->I(A::LOADOUT_SLOT)=2;return true;}); |
||||||
|
|
||||||
|
//TODO: Make these two do something.
|
||||||
|
MenuLabel*itemNameLabel=NEW MenuLabel(ITEM_LOADOUT,{{0,182},{itemLoadoutWindowWidth,12}},"",1,ComponentAttr::SHADOW); |
||||||
|
MenuLabel*itemDescription=NEW MenuLabel(ITEM_LOADOUT,{{0,194},{itemLoadoutWindowWidth,24}},"",1,ComponentAttr::SHADOW); |
||||||
|
|
||||||
|
itemLoadoutWindow->AddComponent("Loadout Item 1",loadoutItem1); |
||||||
|
itemLoadoutWindow->AddComponent("Loadout Item 2",loadoutItem2); |
||||||
|
itemLoadoutWindow->AddComponent("Loadout Item 3",loadoutItem3); |
||||||
|
|
||||||
|
itemLoadoutWindow->AddComponent("Item Name Label",itemNameLabel); |
||||||
|
itemLoadoutWindow->AddComponent("Item Description",itemDescription); |
||||||
|
|
||||||
|
MenuComponent*startLevelButton=NEW MenuComponent(ITEM_LOADOUT,{{itemLoadoutWindowWidth/2-32,214},{64,16}},"Start",[](MenuFuncData data){State_OverworldMap::StartLevel();return true;}); |
||||||
|
|
||||||
|
itemLoadoutWindow->AddComponent("Start Level Button",startLevelButton); |
||||||
|
} |
@ -0,0 +1,99 @@ |
|||||||
|
/*
|
||||||
|
License (OLC-3) |
||||||
|
~~~~~~~~~~~~~~~ |
||||||
|
|
||||||
|
Copyright 2018 - 2023 OneLoneCoder.com |
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, |
||||||
|
are permitted provided that the following conditions are met: |
||||||
|
|
||||||
|
1. Redistributions or derivations of source code must retain the above copyright |
||||||
|
notice, this list of conditions and the following disclaimer. |
||||||
|
|
||||||
|
2. Redistributions or derivative works in binary form must reproduce the above |
||||||
|
copyright notice. This list of conditions and the following disclaimer must be |
||||||
|
reproduced in the documentation and/or other materials provided with the distribution. |
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors may |
||||||
|
be used to endorse or promote products derived from this software without specific |
||||||
|
prior written permission. |
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY |
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||||
|
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||||||
|
SUCH DAMAGE. |
||||||
|
*/ |
||||||
|
#pragma once |
||||||
|
#include "Menu.h" |
||||||
|
#include "MenuLabel.h" |
||||||
|
#include "MenuItemButton.h" |
||||||
|
#include "DEFINES.h" |
||||||
|
#include "Crawler.h" |
||||||
|
#include "Item.h" |
||||||
|
#include "safemap.h" |
||||||
|
#include "olcPGEX_Graphics2D.h" |
||||||
|
#include "drawutil.h" |
||||||
|
|
||||||
|
INCLUDE_game |
||||||
|
INCLUDE_ITEM_DATA |
||||||
|
|
||||||
|
class MenuItemItemButton:public MenuIconButton{ |
||||||
|
private: |
||||||
|
Item&itemRef; |
||||||
|
public: |
||||||
|
inline MenuItemItemButton(MenuType parent,geom2d::rect<float>rect,Item&itemRef,MenuType menuDest,MenuFunc onClick) |
||||||
|
:MenuIconButton(parent,rect,(!itemRef.IsBlank())?itemRef.Decal():nullptr,menuDest,onClick),itemRef(itemRef){ |
||||||
|
draggable=false; |
||||||
|
valid=!itemRef.IsBlank(); |
||||||
|
} |
||||||
|
protected: |
||||||
|
virtual inline void Update(Crawler*game)override{ |
||||||
|
MenuIconButton::Update(game); |
||||||
|
valid=!itemRef.IsBlank(); |
||||||
|
if(valid){ |
||||||
|
icon=itemRef.Decal(); |
||||||
|
if(hovered){ |
||||||
|
switch(parentMenu){ |
||||||
|
case INVENTORY:{ |
||||||
|
//There should be an itemName label to modify.
|
||||||
|
Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->label=itemRef.Name(); |
||||||
|
//There should be an itemDescription label to modify.
|
||||||
|
Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->label=itemRef.Description(); |
||||||
|
}break; |
||||||
|
} |
||||||
|
} |
||||||
|
}else{ |
||||||
|
icon=nullptr; |
||||||
|
if(hovered){ |
||||||
|
switch(parentMenu){ |
||||||
|
case INVENTORY:{ |
||||||
|
//There should be an itemName label to modify.
|
||||||
|
Component<MenuLabel>(ITEM_LOADOUT,"Item Name Label")->label=""; |
||||||
|
//There should be an itemDescription label to modify.
|
||||||
|
Component<MenuLabel>(ITEM_LOADOUT,"Item Description")->label=""; |
||||||
|
}break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
virtual inline void Draw(Crawler*game,vf2d parentPos)override{ |
||||||
|
MenuIconButton::Draw(game,parentPos); |
||||||
|
} |
||||||
|
virtual inline void DrawDecal(Crawler*game,vf2d parentPos,bool focused)override{ |
||||||
|
MenuIconButton::DrawDecal(game,parentPos,focused); |
||||||
|
if(valid){ |
||||||
|
std::string quantityText="x"+std::to_string(itemRef.Amt()); |
||||||
|
vf2d textSize=vf2d(game->GetTextSizeProp(quantityText))*0.5; |
||||||
|
vf2d drawPos=parentPos+rect.pos+rect.size-textSize; |
||||||
|
if(PointWithinParent(this,drawPos)){ |
||||||
|
game->DrawShadowStringDecal(drawPos,quantityText,WHITE,BLACK,{0.5,0.5},0.5); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
Binary file not shown.
Loading…
Reference in new issue