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