# pragma once
# include "Menu.h"
class MenuComponent {
friend class Menu ;
friend class MenuItemButton ;
friend class ScrollableWindowComponent ;
MenuType menuDest ;
private :
float hoverEffect = 0 ;
virtual bool GetHoverState ( Crawler * game ) ;
protected :
geom2d : : rect < float > rect ;
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 : : rect < float > rect , std : : string label , MenuFunc onClick , bool selectable = true ) ;
MenuComponent ( MenuType parent , geom2d : : rect < float > rect , 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 ) ;
} ;