#pragma once #include "MenuIconButton.h" #include "DEFINES.h" INCLUDE_game INCLUDE_ANIMATION_DATA class MenuAnimatedIconButton:public MenuIconButton{ protected: std::string animation; private: float animationTime=0; public: inline MenuAnimatedIconButton(MenuType parent,geom2d::rectrect,std::string animation,MenuFunc onClick,IconButtonAttr attributes=IconButtonAttr::SELECTABLE) :MenuIconButton(parent,rect,nullptr,onClick,attributes),animation(animation){} protected: virtual inline void Update(Crawler*game)override{ MenuIconButton::Update(game); animationTime+=game->GetElapsedTime(); } virtual inline void Draw(Crawler*game,vf2d parentPos)override{ MenuComponent::Draw(game,parentPos); //INTENTIONAL! The way we draw animations is different from static images, we skip over MenuIconButton's draw! Sprite*spr=ANIMATION_DATA[animation].GetFrame(animationTime).GetSourceImage()->Sprite(); geom2d::rectsprRect=ANIMATION_DATA[animation].GetFrame(animationTime).GetSourceRect(); game->DrawPartialSprite(parentPos+rect.middle()-sprRect.size/2,spr,sprRect.pos,sprRect.size,1,Sprite::Flip::NONE); } };