|
|
|
@ -14,18 +14,18 @@ Meteor::Meteor(vf2d pos, float lifetime, AnimationState animation, bool upperLev |
|
|
|
|
bool Meteor::Update(float fElapsedTime){ |
|
|
|
|
if(lifetime<=0&&!shakeField){ |
|
|
|
|
shakeField=true; |
|
|
|
|
game->SetupWorldShake(2); |
|
|
|
|
vf2d meteorOffset=pos+vf2d{lifetime,-lifetime}*320-vf2d{0,GetFrame().GetSourceRect().size.y/4.f}; |
|
|
|
|
for(int i=0;i<650;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->SetupWorldShake("Wizard.Ability 3.WorldShakeTime"_F); |
|
|
|
|
vf2d meteorOffset=pos+vf2d{lifetime*"Wizard.Ability 3.MeteorXMovementMult"_I,lifetime*"Wizard.Ability 3.MeteorYMovementMult"_I}*"Wizard.Ability 3.MeteorStartingDist"_F-vf2d{0,"Wizard.Ability 3.MeteorRadius"_F/100*12}; |
|
|
|
|
for(int i=0;i<"Wizard.Ability 3.MeteorImpactParticles"_I;i++){ |
|
|
|
|
float randomAngle="Wizard.Ability 3.MeteorImpactParticleAngleRange"_FRange; |
|
|
|
|
float randomRange=100*size.x*(1-util::random("Wizard.Ability 3.MeteorImpactParticleRandomVariance"_F))*(1-util::random("Wizard.Ability 3.MeteorImpactParticleRandomVariance"_F)); |
|
|
|
|
float randomColorTintG=256*(1-util::random("Wizard.Ability 3.MeteorImpactParticleColorGVariance"_F))*(1-util::random("Wizard.Ability 3.MeteorImpactParticleColorGVariance"_F)); |
|
|
|
|
float randomColorTintB="Wizard.Ability 3.MeteorImpactParticleColorBlueRange"_FRange; |
|
|
|
|
vf2d effectPos=vf2d{cos(randomAngle),sin(randomAngle)}*randomRange+meteorOffset; |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(effectPos,0,AnimationState::DOT_PARTICLE,OnUpperLevel(),vf2d{util::random(2)+1,util::random(3)+1},util::random(3)+1,vf2d{util::random(10)-5,-util::random(20)-5},Pixel{255,uint8_t(randomColorTintG),uint8_t(randomColorTint),uint8_t(util::random(128)+128)},0,0,true),effectPos.y<meteorOffset.y); |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(effectPos,0,AnimationState::DOT_PARTICLE,OnUpperLevel(),vf2d{util::random(2)+1,util::random(3)+1},util::random(3)+1,vf2d{util::random(10)-5,-util::random(20)-5},Pixel{255,uint8_t(randomColorTintG),uint8_t(randomColorTintB),uint8_t("Wizard.Ability 3.MeteorImpactParticleAlphaRange"_FRange)},0,0,true),effectPos.y<meteorOffset.y); |
|
|
|
|
} |
|
|
|
|
game->HurtEnemies(pos,4*24,game->GetPlayer()->GetAttack()*9,OnUpperLevel()); |
|
|
|
|
game->AddEffect(std::make_unique<PulsatingFire>(pos,3,AnimationState::FIRE_RING1,OnUpperLevel(),vf2d{8,8},1),true); |
|
|
|
|
game->HurtEnemies(pos,"Wizard.Ability 3.MeteorRadius"_F/100*24,game->GetPlayer()->GetAttack()*"Wizard.Ability 3.MeteorDamageMult"_F,OnUpperLevel()); |
|
|
|
|
game->AddEffect(std::make_unique<PulsatingFire>(pos,"Wizard.Ability 3.FireRingLifetime"_F,AnimationState::FIRE_RING1,OnUpperLevel(),vf2d{"Wizard.Ability 3.MeteorRadius"_F/100*2,"Wizard.Ability 3.MeteorRadius"_F/100*2},"Wizard.Ability 3.FireRingFadeoutTime"_F),true); |
|
|
|
|
} |
|
|
|
|
return Effect::Update(fElapsedTime); |
|
|
|
|
} |
|
|
|
@ -33,11 +33,11 @@ bool Meteor::Update(float fElapsedTime){ |
|
|
|
|
void Meteor::Draw(){ |
|
|
|
|
if(lifetime>0){ |
|
|
|
|
vf2d scale=vf2d{192,64}/3.f*(startLifetime+1-lifetime)*0.25*size; |
|
|
|
|
vf2d meteorOffset=vf2d{lifetime,0}*120; |
|
|
|
|
vf2d meteorOffset=vf2d{lifetime*"Wizard.Ability 3.MeteorXMovementMult"_I,0}*"Wizard.Ability 3.MeteorShadowStartingDist"_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+meteorOffset,game->GFX_Circle.Decal(),scale,{0,0,0,192}); |
|
|
|
|
} |
|
|
|
|
vf2d meteorOffset=pos+vf2d{lifetime,-lifetime}*320-vf2d{0,GetFrame().GetSourceRect().size.y/4.f}*size; |
|
|
|
|
vf2d meteorOffset=pos+vf2d{lifetime*"Wizard.Ability 3.MeteorXMovementMult"_I,lifetime*"Wizard.Ability 3.MeteorYMovementMult"_I}*"Wizard.Ability 3.MeteorStartingDist"_F-vf2d{0,GetFrame().GetSourceRect().size.y/4.f}*size; |
|
|
|
|
if(lifetime<=0){ |
|
|
|
|
meteorOffset=pos-vf2d{0,GetFrame().GetSourceRect().size.y/4.f}*size; |
|
|
|
|
} |
|
|
|
|