Co-authored-by: sigonasr2 <sigonasr2@gmail.com>pull/28/head
parent
50a73a53e7
commit
eb5bb15918
@ -1,20 +1,38 @@ |
|||||||
#include "Effect.h" |
#include "Effect.h" |
||||||
#include "DEFINES.h" |
#include "DEFINES.h" |
||||||
#include "Crawler.h" |
#include "Crawler.h" |
||||||
|
#include "utils.h" |
||||||
|
|
||||||
INCLUDE_game |
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) |
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){ |
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); |
return Effect::Update(fElapsedTime); |
||||||
} |
} |
||||||
|
|
||||||
void Meteor::Draw(){ |
void Meteor::Draw(){ |
||||||
vf2d scale=vf2d{192,64}/3.f; |
if(lifetime>0){ |
||||||
vf2d centerPoint=pos-vf2d{game->GFX_Circle.Sprite()->width*scale.x/2,game->GFX_Circle.Sprite()->height*scale.y/2}; |
vf2d scale=vf2d{192,64}/3.f*(startLifetime+1-lifetime)*0.5; |
||||||
game->view.DrawDecal(centerPoint,game->GFX_Circle.Decal(),scale,BLACK); |
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