diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 49394a46..d712e488 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -176,7 +176,7 @@ bool Crawler::OnUserCreate(){ Inventory::AddItem("Blue Slime Remains",22); LoadLevel(LEVEL_NAMES["starting_map"_S]); - Inventory::AddItem("Blue Slime Remains",10); + Inventory::AddItem("Blue Slime Remains",10,true); ChangePlayerClass(WARRIOR); GameState::Initialize(); diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj index b707914c..051cd64b 100644 --- a/Crawler/Crawler.vcxproj +++ b/Crawler/Crawler.vcxproj @@ -307,6 +307,10 @@ + + + + diff --git a/Crawler/Crawler.vcxproj.filters b/Crawler/Crawler.vcxproj.filters index 99f3878e..9ac70e6c 100644 --- a/Crawler/Crawler.vcxproj.filters +++ b/Crawler/Crawler.vcxproj.filters @@ -255,6 +255,9 @@ Header Files\State + + Header Files\Interface + diff --git a/Crawler/InventoryScrollableWindowComponent.h b/Crawler/InventoryScrollableWindowComponent.h index 9c77ba5d..f0663d4b 100644 --- a/Crawler/InventoryScrollableWindowComponent.h +++ b/Crawler/InventoryScrollableWindowComponent.h @@ -41,11 +41,14 @@ SUCH DAMAGE. typedef Attribute A; class InventoryScrollableWindowComponent:public ScrollableWindowComponent{ +private: + std::string itemNameLabelName; + std::string itemDescriptionLabelName; protected: ITCategory inventoryType; public: - inline InventoryScrollableWindowComponent(MenuType parent,geom2d::rectrect,ITCategory invType,ComponentAttr attributes=ComponentAttr::BACKGROUND|ComponentAttr::OUTLINE) - :ScrollableWindowComponent(parent,rect,attributes),inventoryType(invType){ + inline InventoryScrollableWindowComponent(MenuType parent,geom2d::rectrect,ITCategory invType,std::string itemNameLabelName,std::string itemDescriptionLabelName,ComponentAttr attributes=ComponentAttr::BACKGROUND|ComponentAttr::OUTLINE) + :ScrollableWindowComponent(parent,rect,attributes),inventoryType(invType),itemNameLabelName(itemNameLabelName),itemDescriptionLabelName(itemDescriptionLabelName){ Menu::AddInventoryListener(this,invType); } protected: diff --git a/Crawler/MenuLabel.h b/Crawler/MenuLabel.h index 07a15f28..7385745b 100644 --- a/Crawler/MenuLabel.h +++ b/Crawler/MenuLabel.h @@ -40,9 +40,11 @@ SUCH DAMAGE. INCLUDE_game class MenuLabel:public MenuComponent{ +private: + int scale=1; +protected: bool shadow=false; bool centered=true; - int scale=1; public: inline MenuLabel(MenuType parent,geom2d::rectrect,std::string label,int scale=1,ComponentAttr attributes=ComponentAttr::NONE) :MenuComponent(parent,rect,label,MenuFunc{},ButtonAttr::UNSELECTABLE|ButtonAttr::UNSELECTABLE_VIA_KEYBOARD),scale(scale),centered(!(attributes&ComponentAttr::LEFT_ALIGN)),shadow(attributes&ComponentAttr::SHADOW){ diff --git a/Crawler/PopupMenuLabel.h b/Crawler/PopupMenuLabel.h new file mode 100644 index 00000000..422d91f0 --- /dev/null +++ b/Crawler/PopupMenuLabel.h @@ -0,0 +1,78 @@ +#pragma region License +/* +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 endregion +#pragma once +#include "MenuLabel.h" +#include "DEFINES.h" +#include "Crawler.h" +#include "util.h" + +INCLUDE_game + +class PopupMenuLabel:public MenuLabel{ +private: + float scale; +public: + inline PopupMenuLabel(MenuType parent,geom2d::rectrect,std::string label,float scale=1,ComponentAttr attributes=ComponentAttr::NONE) + :MenuLabel(parent,rect,label,scale,attributes),scale(scale){ + } +protected: + virtual void inline Update(Crawler*game)override{ + MenuLabel::Update(game); + } + virtual void inline Draw(Crawler*game,vf2d parentPos)override{} + virtual void inline DrawDecal(Crawler*game,vf2d parentPos,bool focused)override{ + if(label.length()>0){ + MenuLabel::DrawDecal(game,parentPos,focused); + std::string wrappedText=util::WrapText(game,label,rect.size.x,true,{scale,scale}); + vf2d drawPos=parentPos+rect.middle()-vf2d{game->GetTextSizeProp(wrappedText)}*float(scale)/2; //Assume centered. + if(!centered){ + drawPos=vf2d{rect.pos.x+2,rect.middle().y-game->GetTextSizeProp(wrappedText).y/2}+parentPos; //We should at least vertically align here. + } + if(shadow){ + game->DrawShadowStringPropDecal(drawPos,wrappedText,WHITE,BLACK,{scale,scale}); + }else{ + game->DrawStringPropDecal(drawPos,wrappedText,WHITE,{scale,scale}); + } + if(background){ + game->FillRectDecal(rect.pos+parentPos,rect.size,PixelLerp(Menu::themes[Menu::themeSelection].GetButtonCol(),Menu::themes[Menu::themeSelection].GetHighlightCol(),hoverEffect/"ThemeGlobal.HighlightTime"_F)); + } + if(border){ + game->DrawRectDecal(rect.pos+parentPos,rect.size); + } + if(showDefaultLabel){ + game->DrawStringPropDecal(rect.pos+parentPos+rect.size/2-game->GetTextSizeProp(label)/2,label); + } + } + } +}; \ No newline at end of file diff --git a/Crawler/Version.h b/Crawler/Version.h index 87a2d3ff..92329897 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -35,7 +35,7 @@ SUCH DAMAGE. #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 1 -#define VERSION_BUILD 2961 +#define VERSION_BUILD 2962 #define stringify(a) stringify_(a) #define stringify_(a) #a