#pragma once #include "MenuComponent.h" #include "olcPixelGameEngine.h" #include #include "safemap.h" #include "Theme.h" #include "Attributable.h" class Crawler; class Menu:IAttributable{ friend class Crawler; friend class Player; static bool MOUSE_NAVIGATION; static std::mapmenus; float buttonHoldTime=0; std::map>buttons; //Buttons are stored in rows followed by their column order. std::map>newButtonArrangement; //The new setup that the buttons will be at if a drag operation completes. 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 MenuComponent*draggingComponent=nullptr; public: Menu(); Menu(vf2d pos,vf2d size); void AddComponent(std::string key,MenuComponent*button); void Update(Crawler*game); void Draw(Crawler*game); static void InitializeMenus(); static void OpenMenu(MenuType menu); static std::vectorstack; static std::string themeSelection; static safeunorderedmapthemes; static const vf2d CENTERED; private: void HoverMenuSelect(Crawler*game); void MenuSelect(Crawler*game); void CheckClickAndPerformMenuSelect(Crawler*game); static const Menu InitializeTestMenu(); static const Menu InitializeTestSubMenu(); static const Menu InitializeInventoryWindow(); //X (0-3), Y (0-2) for specific 9-patch tile (tiled version). static Renderable&GetPatchPart(int x,int y); static Theme&GetCurrentTheme(); void KeyboardButtonNavigation(Crawler*game,vf2d menuPos); void DrawScaledWindow(Crawler*game,vf2d menuPos); void DrawTiledWindow(Crawler*game,vf2d menuPos); Pixel GetRenderColor(); };