#include "DEFINES.h" #include "Effect.h" #include "Crawler.h" #include "safemap.h" INCLUDE_ANIMATION_DATA INCLUDE_game Effect::Effect(vf2d pos,float lifetime,std::string animation,bool upperLevel,float size,float fadeout,vf2d spd,Pixel col,float rotation,float rotationSpd,bool additiveBlending) :Effect::Effect(pos,lifetime,animation,upperLevel,vf2d{size,size},fadeout,spd,col,rotation,rotationSpd,additiveBlending){ this->animation.AddState(animation,ANIMATION_DATA[animation]); } Effect::Effect(vf2d pos,float lifetime,std::string animation,bool upperLevel,vf2d size,float fadeout,vf2d spd,Pixel col,float rotation,float rotationSpd,bool additiveBlending) :pos(pos),lifetime(lifetime),upperLevel(upperLevel),size(size),fadeout(fadeout),original_fadeoutTime(fadeout),spd(spd),col(col),rotation(rotation),rotationSpd(rotationSpd),additiveBlending(additiveBlending){ this->animation.AddState(animation,ANIMATION_DATA[animation]); } bool Effect::Update(float fElapsedTime){ lifetime-=fElapsedTime; if(lifetime<=0){ fadeout-=fElapsedTime; if(fadeout<=0){ return false; } } rotation+=rotationSpd*fElapsedTime; pos+=spd*fElapsedTime; animation.UpdateState(internal_animState,fElapsedTime); return true; } void Effect::Draw(){ if(additiveBlending)game->SetDecalMode(DecalMode::ADDITIVE); if(fadeout==0){ game->view.DrawPartialRotatedDecal(pos,GetFrame().GetSourceImage()->Decal(),rotation,GetFrame().GetSourceRect().size/2,GetFrame().GetSourceRect().pos,GetFrame().GetSourceRect().size,size,col); } else { game->view.DrawPartialRotatedDecal(pos,GetFrame().GetSourceImage()->Decal(),rotation,GetFrame().GetSourceRect().size/2,GetFrame().GetSourceRect().pos,GetFrame().GetSourceRect().size,size,{col.r,col.g,col.b,uint8_t(fadeout/original_fadeoutTime*255)}); } game->SetDecalMode(DecalMode::NORMAL); } Animate2D::Frame Effect::GetFrame(){ return animation.GetFrame(internal_animState); } bool Effect::OnUpperLevel(){ return upperLevel; }