#pragma once #include "MenuLabel.h" #include "DEFINES.h" #include "Crawler.h" #include "util.h" INCLUDE_game INCLUDE_MONSTER_DATA INCLUDE_ANIMATION_DATA class SpawnEncounterLabel:public MenuLabel{ int monsterID; Animate2D::Animationanim; Animate2D::AnimationState state; public: inline SpawnEncounterLabel(MenuType parent,geom2d::rectrect,std::string label,int monsterID) :MenuLabel(parent,rect,label),monsterID(monsterID){ anim.AddState("IDLE",ANIMATION_DATA.at(MONSTER_DATA.at(monsterID).GetIdleAnimation())); anim.ChangeState(state,"IDLE"); anim.UpdateState(state,util::random(1)); } inline ~SpawnEncounterLabel(){ } protected: virtual void inline Update(Crawler*game)override{ MenuComponent::Update(game); anim.UpdateState(state,game->GetElapsedTime()); } virtual void inline Draw(Crawler*game,vf2d parentPos)override{ } virtual void inline DrawDecal(Crawler*game,vf2d parentPos,bool focused)override{ const geom2d::rect&imgRect=anim.GetFrame(state).GetSourceRect(); vf2d imgSize=vf2d{rect.size.y,rect.size.y}; vf2d imgScale=imgSize/vf2d{imgRect.size}; game->DrawPartialDecal(parentPos+rect.pos,imgSize,anim.GetFrame(state).GetSourceImage()->Decal(),imgRect.pos,imgRect.size); float verticalAlignYOffset=(rect.size.y-8)/2; std::string monsterName=MONSTER_DATA.at(monsterID).GetDisplayName(); vf2d monsterNameTextSize=game->GetTextSizeProp(monsterName); float textXSpaceAvailable=rect.size.x-imgSize.x-4-16/*12 for the scrollbar*/; float textXScaling=textXSpaceAvailable/monsterNameTextSize.x; game->DrawShadowStringPropDecal(parentPos+rect.pos+vf2d{imgSize.x+4,verticalAlignYOffset},monsterName,WHITE,BLACK,{std::min(1.f,textXScaling),1}); } };