parent
88df322042
commit
73d29a2ab5
@ -0,0 +1,57 @@ |
||||
#include "Effect.h" |
||||
#include "DEFINES.h" |
||||
#include "Crawler.h" |
||||
#include "utils.h" |
||||
|
||||
INCLUDE_game |
||||
INCLUDE_ANIMATION_DATA |
||||
|
||||
PulsatingFire::PulsatingFire(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),lastParticleTimer(lifetime){ |
||||
for(int i=0;i<8;i++){ |
||||
pulsatingFireValues.push_back(util::random(1)); |
||||
} |
||||
} |
||||
|
||||
bool PulsatingFire::Update(float fElapsedTime){ |
||||
lastParticleTimer-=fElapsedTime; |
||||
if(lastParticleTimer<=0){ |
||||
int particleCount=rand()%10+1; |
||||
for(int i=0;i<particleCount;i++){ |
||||
float randomAngle=util::random(2*PI); |
||||
float randomRange=100*size.x*(1-util::random(0.25))*(1-util::random(0.25)); |
||||
float randomColorTintG=256-(util::random(128)+util::random(128)); |
||||
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)+1,1},util::random(4)+2,vf2d{util::random(20)-5,-util::random(30)-10},Pixel{255,uint8_t(randomColorTintG),uint8_t(randomColorTint),uint8_t(util::random(128)+128)},0,0,true)); |
||||
} |
||||
lastParticleTimer=util::random(0.2)+0.025; |
||||
} |
||||
return Effect::Update(fElapsedTime); |
||||
} |
||||
|
||||
void PulsatingFire::Draw(){ |
||||
for(int i=0;i<8;i++){ |
||||
Animate2D::FrameSequence*effectSpr=nullptr; |
||||
switch(int(pulsatingFireValues[i]*5)){ |
||||
case 0:{ |
||||
effectSpr=&ANIMATION_DATA[AnimationState::FIRE_RING1]; |
||||
}break; |
||||
case 1:{ |
||||
effectSpr=&ANIMATION_DATA[AnimationState::FIRE_RING2]; |
||||
}break; |
||||
case 2:{ |
||||
effectSpr=&ANIMATION_DATA[AnimationState::FIRE_RING3]; |
||||
}break; |
||||
case 3:{ |
||||
effectSpr=&ANIMATION_DATA[AnimationState::FIRE_RING4]; |
||||
}break; |
||||
case 4:{ |
||||
effectSpr=&ANIMATION_DATA[AnimationState::FIRE_RING5]; |
||||
}break; |
||||
default: |
||||
effectSpr=&ANIMATION_DATA[AnimationState::FIRE_RING1]; |
||||
} |
||||
const Renderable*img=effectSpr->GetFrame(0).GetSourceImage(); |
||||
game->view.DrawPartialDecal(pos-effectSpr->GetFrame(0).GetSourceRect().size/2*size,img->Decal(),effectSpr->GetFrame(0).GetSourceRect().pos,effectSpr->GetFrame(0).GetSourceRect().size,size,{255,uint8_t(pulsatingFireValues[i]*256),0,uint8_t(63*(sin(3*lifetime+PI*pulsatingFireValues[i]))+64)}); |
||||
} |
||||
} |
Loading…
Reference in new issue