Co-authored-by: sigonasr2 <sigonasr2@gmail.com>pull/28/head
parent
50a73a53e7
commit
eb5bb15918
@ -1,20 +1,38 @@ |
||||
#include "Effect.h" |
||||
#include "DEFINES.h" |
||||
#include "Crawler.h" |
||||
#include "utils.h" |
||||
|
||||
INCLUDE_game |
||||
|
||||
Meteor::Meteor(vf2d pos, float lifetime, AnimationState animation, bool upperLevel, vf2d size, float fadeout, vf2d spd, Pixel col, float rotation, float rotationSpd, bool additiveBlending) |
||||
:Effect(pos,lifetime,animation,upperLevel,size,fadeout,spd,col,rotation,rotationSpd,additiveBlending){ |
||||
:Effect(pos,lifetime,animation,upperLevel,size,fadeout,spd,col,rotation,rotationSpd,additiveBlending),startLifetime(lifetime){ |
||||
|
||||
} |
||||
|
||||
bool Meteor::Update(float fElapsedTime){ |
||||
if(lifetime<=0&&!shakeField){ |
||||
shakeField=true; |
||||
game->SetupWorldShake(2); |
||||
for(int i=0;i<360;i++){ |
||||
float randomAngle=2*PI; |
||||
float randomRange=192*size.x*(1-util::random(0.25))*(1-util::random(0.25)); |
||||
float randomColorTint=util::random(128); |
||||
game->AddEffect(std::make_unique<Effect>(pos+vf2d{cos(randomAngle),sin(randomAngle)}*randomRange,0,AnimationState::DOT_PARTICLE,OnUpperLevel(),vf2d{util::random(2),util::random(3)},util::random(3)+1,vf2d{util::random(4)-2,-util::random(4)},Pixel{255,uint8_t(randomColorTint),uint8_t(randomColorTint),uint8_t(util::random(128)+128)},0,0,true)); |
||||
} |
||||
} |
||||
return Effect::Update(fElapsedTime); |
||||
} |
||||
|
||||
void Meteor::Draw(){ |
||||
vf2d scale=vf2d{192,64}/3.f; |
||||
vf2d centerPoint=pos-vf2d{game->GFX_Circle.Sprite()->width*scale.x/2,game->GFX_Circle.Sprite()->height*scale.y/2}; |
||||
game->view.DrawDecal(centerPoint,game->GFX_Circle.Decal(),scale,BLACK); |
||||
if(lifetime>0){ |
||||
vf2d scale=vf2d{192,64}/3.f*(startLifetime+1-lifetime)*0.5; |
||||
vf2d centerPoint=pos-vf2d{game->GFX_Circle.Sprite()->width*scale.x/2,game->GFX_Circle.Sprite()->height*scale.y/2}; |
||||
game->view.DrawDecal(centerPoint,game->GFX_Circle.Decal(),scale,{0,0,0,192}); |
||||
} |
||||
vf2d meteorOffset=pos+vf2d{lifetime,-lifetime}*320-vf2d{0,GetFrame().GetSourceRect().size.y/2.f}; |
||||
if(lifetime<=0){ |
||||
meteorOffset=pos-vf2d{0,GetFrame().GetSourceRect().size.y/2.f}; |
||||
} |
||||
game->view.DrawPartialRotatedDecal(meteorOffset,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)}); |
||||
} |
Loading…
Reference in new issue