#pragma once #include "Menu.h" class MenuComponent:IAttributable{ friend class Menu; friend class MenuItemButton; friend class ScrollableWindowComponent; MenuType menuDest; private: float hoverEffect=0; virtual bool GetHoverState(Crawler*game); //CALL THIS FOR A PARENT to check a child's DrawDecal validity! virtual bool PointWithinParent(MenuComponent*child,vi2d drawPos); protected: geom2d::rectrect; std::string label; bool border=true; bool draggable=false; MenuFunc onClick; MenuType parentMenu=MenuType::ENUM_END; MenuComponent*parentComponent=nullptr; bool hovered=false; bool selectable=true; bool disabled=false; //If set to true, this component will not be rendered or updated. bool renderInMain=true; //If set to false, this component is the responsibility of some other windowing system and won't be rendered or updated via the main window loop. virtual void Update(Crawler*game); virtual void Draw(Crawler*game,vf2d parentPos,bool focused); virtual void DrawDecal(Crawler*game,vf2d parentPos,bool focused); virtual bool GetHoverState(Crawler*game,MenuComponent*child); public: MenuComponent(MenuType parent,geom2d::rectrect,std::string label,MenuFunc onClick,bool selectable=true); MenuComponent(MenuType parent,geom2d::rectrect,std::string label,MenuType menuDest,MenuFunc onClick,bool selectable=true); void _Update(Crawler*game); void _Draw(Crawler*game,vf2d parentPos,bool focused); void _DrawDecal(Crawler*game,vf2d parentPos,bool focused); //We picked up a draggable component, we should make a copy and return it here. If a nullptr is returned here, the pickup is not allowed. //WARNING!!! This allocates a brand new component when successful!!! Be prepared to clear it! virtual MenuComponent*PickUpDraggableItem(); //We are attempting to drop draggable onto this item. If it's not allowed, return false. virtual bool DropDraggableItem(MenuComponent*draggable); };