|
|
|
@ -15,21 +15,22 @@ LightningBolt::LightningBolt(vf2d pos,vf2d vel,float radius,int damage,bool uppe |
|
|
|
|
|
|
|
|
|
void LightningBolt::Update(float fElapsedTime){ |
|
|
|
|
lastParticleSpawn=std::max(0.f,lastParticleSpawn-fElapsedTime); |
|
|
|
|
uint8_t brightness=uint8_t("Wizard.Ability 2.ParticleColorRange"_FRange); |
|
|
|
|
if(lastParticleSpawn==0){ |
|
|
|
|
lastParticleSpawn=0.01; |
|
|
|
|
uint8_t brightness=uint8_t(util::random(100)+150); |
|
|
|
|
lastParticleSpawn="Wizard.Ability 2.ParticleFrequency"_F; |
|
|
|
|
uint8_t brightness=uint8_t("Wizard.Ability 2.ParticleColorRange"_FRange); |
|
|
|
|
switch(rand()%4){ |
|
|
|
|
case 0:{ |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE1,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE1,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); |
|
|
|
|
}break; |
|
|
|
|
case 1:{ |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE2,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE2,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); |
|
|
|
|
}break; |
|
|
|
|
case 2:{ |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE3,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE3,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); |
|
|
|
|
}break; |
|
|
|
|
case 3:{ |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE4,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE4,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); |
|
|
|
|
}break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -38,25 +39,25 @@ void LightningBolt::Update(float fElapsedTime){ |
|
|
|
|
bool LightningBolt::PlayerHit(Player*player) |
|
|
|
|
{ |
|
|
|
|
deactivated=true; |
|
|
|
|
fadeOutTime=0.2f; |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(player->GetPos(),0.3,AnimationState::LIGHTNING_SPLASH,upperLevel,player->GetSizeMult(),0.25,vf2d{},WHITE,util::random(PI))); |
|
|
|
|
fadeOutTime="Wizard.Ability 2.BulletFadeoutTime"_F; |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(player->GetPos(),"Wizard.Ability 2.SplashLifetime"_F,AnimationState::LIGHTNING_SPLASH,upperLevel,player->GetSizeMult(),"Wizard.Ability 2.SplashFadeoutTime"_F,vf2d{},WHITE,"Wizard.Ability 2.SplashRotationRange"_FRange)); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool LightningBolt::MonsterHit(Monster& monster) |
|
|
|
|
{ |
|
|
|
|
deactivated=true; |
|
|
|
|
fadeOutTime=0.2f; |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(monster.GetPos(),0.3,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),0.25,vf2d{},WHITE,util::random(PI))); |
|
|
|
|
fadeOutTime="Wizard.Ability 2.BulletFadeoutTime"_F; |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(monster.GetPos(),"Wizard.Ability 2.SplashLifetime"_F,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),"Wizard.Ability 2.SplashFadeoutTime"_F,vf2d{},WHITE,"Wizard.Ability 2.SplashRotationRange"_FRange)); |
|
|
|
|
int targetsHit=0; |
|
|
|
|
for(Monster&m:MONSTER_LIST){ |
|
|
|
|
if(&m==&monster||monster.OnUpperLevel()!=m.OnUpperLevel())continue; |
|
|
|
|
geom2d::line<float>lineToTarget=geom2d::line<float>(monster.GetPos(),m.GetPos()); |
|
|
|
|
float dist=lineToTarget.length(); |
|
|
|
|
if(dist<=72){ |
|
|
|
|
if(m.Hurt(game->GetPlayer()->GetAttack()*2,OnUpperLevel())){ |
|
|
|
|
EMITTER_LIST.push_back(std::make_unique<LightningBoltEmitter>(LightningBoltEmitter(monster.GetPos(),m.GetPos(),0.05,0.25,upperLevel))); |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(m.GetPos(),0.5,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),0.25,vf2d{},WHITE,util::random(PI))); |
|
|
|
|
if(dist<="Wizard.Ability 2.LightningChainDistance"_F/100*12){ |
|
|
|
|
if(m.Hurt(game->GetPlayer()->GetAttack()*"Wizard.Ability 2.LightningChainDamageMult"_F,OnUpperLevel())){ |
|
|
|
|
EMITTER_LIST.push_back(std::make_unique<LightningBoltEmitter>(LightningBoltEmitter(monster.GetPos(),m.GetPos(),"Wizard.Ability 2.LightningChainFrequency"_F,"Wizard.Ability 2.LightningChainLifetime"_F,upperLevel))); |
|
|
|
|
game->AddEffect(std::make_unique<Effect>(m.GetPos(),"Wizard.Ability 2.LightningChainSplashLifetime"_F,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),"Wizard.Ability 2.LightningChainSplashFadeoutTime"_F,vf2d{},WHITE,"Wizard.Ability 2.LightningChainSplashRotationRange"_FRange)); |
|
|
|
|
targetsHit++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|