From c1d64e7bd1c7fba07a1d6f0b56f498aa722d214f Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Fri, 6 Oct 2023 15:00:27 -0500 Subject: [PATCH] Window centering and positioning added. --- Crawler/Menu.cpp | 20 ++++++++++---------- Crawler/Menu.h | 4 +++- Crawler/MenuComponent.h | 1 + Crawler/State_GameRun.cpp | 1 + Crawler/TestMenu.cpp | 2 +- Crawler/TestSubMenu.cpp | 2 +- Crawler/Version.h | 2 +- 7 files changed, 18 insertions(+), 14 deletions(-) diff --git a/Crawler/Menu.cpp b/Crawler/Menu.cpp index c6d7475e..8491b677 100644 --- a/Crawler/Menu.cpp +++ b/Crawler/Menu.cpp @@ -8,13 +8,15 @@ std::vectorMenu::stack; std::mapMenu::menus; std::string Menu::themeSelection="BlueDefault"; safeunorderedmapMenu::themes; +const vf2d Menu::CENTERED = {-456,-456}; INCLUDE_GFX +extern vi2d WINDOW_SIZE; Menu::Menu(){} -Menu::Menu(vf2d size) - :size(size){} +Menu::Menu(vf2d pos,vf2d size) + :pos(pos==CENTERED?WINDOW_SIZE/2-size/2:vi2d{pos}),size(size){} void Menu::InitializeMenus(){ stack.reserve(32); @@ -57,7 +59,6 @@ void Menu::MenuSelect(Crawler*game){ } void Menu::Update(Crawler*game){ - vf2d upperLeftPos=game->GetScreenSize()/2-size/2; for(auto&key:buttons){ for(auto&button:key.second){ @@ -69,14 +70,14 @@ void Menu::Update(Crawler*game){ }else{ for(auto&key:buttons){ for(auto&button:key.second){ - if(geom2d::overlaps(geom2d::rect{button->rect.pos+upperLeftPos,button->rect.size},game->GetMousePos())){ + if(geom2d::overlaps(geom2d::rect{button->rect.pos+pos,button->rect.size},game->GetMousePos())){ button->hovered=true; } } } } - KeyboardButtonNavigation(game,upperLeftPos); + KeyboardButtonNavigation(game,pos); for(auto&key:buttons){ for(auto&button:key.second){ button->Update(game); @@ -88,21 +89,20 @@ void Menu::Update(Crawler*game){ }; void Menu::Draw(Crawler*game){ - vf2d upperLeftPos=game->GetScreenSize()/2-size/2; if(GetCurrentTheme().IsScaled()){ - DrawScaledWindow(game,upperLeftPos); + DrawScaledWindow(game,pos); }else{ - DrawTiledWindow(game,upperLeftPos); + DrawTiledWindow(game,pos); } for(auto&key:buttons){ for(auto&button:key.second){ - button->Draw(game,upperLeftPos,this==Menu::stack.back()); + button->Draw(game,pos,this==Menu::stack.back()); } } for(auto&component:displayComponents){ - component->Draw(game,upperLeftPos,this==Menu::stack.back()); + component->Draw(game,pos,this==Menu::stack.back()); } }; diff --git a/Crawler/Menu.h b/Crawler/Menu.h index edf680d7..164ab4e0 100644 --- a/Crawler/Menu.h +++ b/Crawler/Menu.h @@ -18,10 +18,11 @@ class Menu:IAttributable{ std::vectordisplayComponents; //Components that are only for displaying purposes. safemapcomponents; //A friendly way to interrogate any component we are interested in. vi2d selection={-1,-1}; + vf2d pos; //Specify the upper-left corner of the window. Using CENTERED will always put this where the upper-left corner would center the window. vf2d size; //Size in tiles (24x24), every menu will be tile-based public: Menu(); - Menu(vf2d size); + Menu(vf2d pos,vf2d size); void AddComponent(std::string key,MenuComponent*button); void Update(Crawler*game); void Draw(Crawler*game); @@ -30,6 +31,7 @@ public: static std::vectorstack; static std::string themeSelection; static safeunorderedmapthemes; + static const vf2d CENTERED; private: void MenuSelect(Crawler*game); static const Menu InitializeTestMenu(); diff --git a/Crawler/MenuComponent.h b/Crawler/MenuComponent.h index b64668f5..b3f2b842 100644 --- a/Crawler/MenuComponent.h +++ b/Crawler/MenuComponent.h @@ -12,6 +12,7 @@ class MenuComponent{ MenuFunc onClick; bool hovered=false; bool selectable=true; + bool draggable=false; private: float hoverEffect=0; protected: diff --git a/Crawler/State_GameRun.cpp b/Crawler/State_GameRun.cpp index 7bdabca0..2fddab9c 100644 --- a/Crawler/State_GameRun.cpp +++ b/Crawler/State_GameRun.cpp @@ -33,4 +33,5 @@ void State_GameRun::OnUserUpdate(Crawler*game){ game->UpdateCamera(game->GetElapsedTime()); }; void State_GameRun::Draw(Crawler*game){ + }; \ No newline at end of file diff --git a/Crawler/TestMenu.cpp b/Crawler/TestMenu.cpp index 89915c51..4c035619 100644 --- a/Crawler/TestMenu.cpp +++ b/Crawler/TestMenu.cpp @@ -2,7 +2,7 @@ #include "Menu.h" const Menu Menu::InitializeTestMenu(){ - Menu testMenu({24*8,24*6}); + Menu testMenu(CENTERED,{24*8,24*6}); MenuFunc quitWindow=[](Menu&menu,Crawler*game){ menu.stack.clear(); diff --git a/Crawler/TestSubMenu.cpp b/Crawler/TestSubMenu.cpp index 6e404179..4bfb28dc 100644 --- a/Crawler/TestSubMenu.cpp +++ b/Crawler/TestSubMenu.cpp @@ -10,7 +10,7 @@ INCLUDE_GFX typedef Attribute A; const Menu Menu::InitializeTestSubMenu(){ - Menu testSubMenu({24*4,24*5}); + Menu testSubMenu({30,30},{24*4,24*5}); MenuFunc goBack=[](Menu&menu,Crawler*game){ menu.stack.pop_back(); diff --git a/Crawler/Version.h b/Crawler/Version.h index 73548f31..c9730cb2 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -2,7 +2,7 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 0 -#define VERSION_BUILD 1777 +#define VERSION_BUILD 1782 #define stringify(a) stringify_(a) #define stringify_(a) #a