|
|
@ -3,15 +3,16 @@ |
|
|
|
#include "MenuComponent.h" |
|
|
|
#include "MenuComponent.h" |
|
|
|
#include "Crawler.h" |
|
|
|
#include "Crawler.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef Attribute A; |
|
|
|
|
|
|
|
|
|
|
|
class ScrollableWindowComponent:public MenuComponent{ |
|
|
|
class ScrollableWindowComponent:public MenuComponent{ |
|
|
|
protected: |
|
|
|
protected: |
|
|
|
Renderable r; |
|
|
|
Renderable r; |
|
|
|
std::vector<MenuComponent*>components; |
|
|
|
std::vector<MenuComponent*>components; |
|
|
|
vf2d scrollOffset{}; |
|
|
|
|
|
|
|
geom2d::rect<float>bounds; //It's for the scrollbar.
|
|
|
|
geom2d::rect<float>bounds; //It's for the scrollbar.
|
|
|
|
private: |
|
|
|
private: |
|
|
|
inline bool OnScreen(MenuComponent*component){ |
|
|
|
inline bool OnScreen(MenuComponent*component){ |
|
|
|
return geom2d::overlaps(rect,geom2d::rect<float>{component->rect.pos+scrollOffset,component->rect.size}); |
|
|
|
return geom2d::overlaps(rect,geom2d::rect<float>{component->rect.pos+V(A::SCROLL_OFFSET),component->rect.size}); |
|
|
|
} |
|
|
|
} |
|
|
|
public: |
|
|
|
public: |
|
|
|
inline ScrollableWindowComponent(MenuType parent,geom2d::rect<float>rect,Decal*icon,MenuFunc onClick) |
|
|
|
inline ScrollableWindowComponent(MenuType parent,geom2d::rect<float>rect,Decal*icon,MenuFunc onClick) |
|
|
@ -24,9 +25,9 @@ protected: |
|
|
|
|
|
|
|
|
|
|
|
if(game->GetMouseWheel()!=0){ |
|
|
|
if(game->GetMouseWheel()!=0){ |
|
|
|
if(game->GetMouseWheel()>0){ |
|
|
|
if(game->GetMouseWheel()>0){ |
|
|
|
scrollOffset.y+="ThemeGlobal.MenuScrollWheelSpeed"_I; |
|
|
|
V(A::SCROLL_OFFSET).y+="ThemeGlobal.MenuScrollWheelSpeed"_I; |
|
|
|
}else{ |
|
|
|
}else{ |
|
|
|
scrollOffset.y-="ThemeGlobal.MenuScrollWheelSpeed"_I; |
|
|
|
V(A::SCROLL_OFFSET).y-="ThemeGlobal.MenuScrollWheelSpeed"_I; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -41,7 +42,7 @@ protected: |
|
|
|
game->SetDrawTarget(r.Sprite()); |
|
|
|
game->SetDrawTarget(r.Sprite()); |
|
|
|
game->Clear(BLANK); |
|
|
|
game->Clear(BLANK); |
|
|
|
for(MenuComponent*component:components){ |
|
|
|
for(MenuComponent*component:components){ |
|
|
|
component->_Draw(game,scrollOffset,focused); |
|
|
|
component->_Draw(game,V(A::SCROLL_OFFSET),focused); |
|
|
|
} |
|
|
|
} |
|
|
|
game->SetDrawTarget(prevDrawTarget); |
|
|
|
game->SetDrawTarget(prevDrawTarget); |
|
|
|
game->DrawSprite(parentPos,r.Sprite()); |
|
|
|
game->DrawSprite(parentPos,r.Sprite()); |
|
|
@ -50,11 +51,11 @@ protected: |
|
|
|
MenuComponent::DrawDecal(game,parentPos,focused); |
|
|
|
MenuComponent::DrawDecal(game,parentPos,focused); |
|
|
|
game->DrawRectDecal(parentPos,rect.size); |
|
|
|
game->DrawRectDecal(parentPos,rect.size); |
|
|
|
for(MenuComponent*component:components){ |
|
|
|
for(MenuComponent*component:components){ |
|
|
|
component->_DrawDecal(game,parentPos+scrollOffset,focused); |
|
|
|
component->_DrawDecal(game,parentPos+V(A::SCROLL_OFFSET),focused); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
virtual bool GetHoverState(Crawler*game,MenuComponent*child)override{ |
|
|
|
virtual bool GetHoverState(Crawler*game,MenuComponent*child)override{ |
|
|
|
return geom2d::overlaps(geom2d::rect<float>{Menu::menus[parentMenu]->pos+child->rect.pos+scrollOffset,child->rect.size},game->GetMousePos()); |
|
|
|
return geom2d::overlaps(geom2d::rect<float>{Menu::menus[parentMenu]->pos+child->rect.pos+V(A::SCROLL_OFFSET),child->rect.size},game->GetMousePos()); |
|
|
|
} |
|
|
|
} |
|
|
|
public: |
|
|
|
public: |
|
|
|
void inline AddComponent(Menu*parentMenu,std::string key,MenuComponent*button){ |
|
|
|
void inline AddComponent(Menu*parentMenu,std::string key,MenuComponent*button){ |
|
|
|