|
|
|
@ -45,9 +45,9 @@ All rights reserved. |
|
|
|
|
|
|
|
|
|
INCLUDE_game |
|
|
|
|
|
|
|
|
|
FallingBullet::FallingBullet(const std::string&imgName,vf2d targetPos,vf2d vel,float zVel,float indicatorDisplayTime,float radius,int damage,bool upperLevel,bool hitsMultiple,float knockbackAmt,float lifetime,bool friendly,Pixel col,vf2d scale,float image_angle,float spellCircleRotation,float spellCircleRotationSpd,Pixel insigniaCol,float insigniaRotation,float insigniaRotationSpd) |
|
|
|
|
:Bullet(targetPos,vel,radius,damage,imgName,upperLevel,false,lifetime+0.1f,false,friendly,col,scale,image_angle),targetPos(targetPos),zVel(zVel),indicatorDisplayTime(indicatorDisplayTime),knockbackAmt(knockbackAmt), |
|
|
|
|
indicator(targetPos,lifetime+0.1f,"range_indicator.png","spell_insignia.png",upperLevel,radius/12.f,0.5f,{},col,spellCircleRotation,spellCircleRotationSpd,false,radius/12.f,0.f,{},insigniaCol,insigniaRotation,insigniaRotationSpd,false){ |
|
|
|
|
FallingBullet::FallingBullet(const std::string&imgName,vf2d targetPos,vf2d vel,float zVel,float indicatorDisplayTime,float radius,int damage,bool upperLevel,bool hitsMultiple,float knockbackAmt,float lifetime,bool friendly,Pixel spellCircleCol,vf2d scale,float image_angle,float spellCircleRotation,float spellCircleRotationSpd,Pixel insigniaCol,float insigniaRotation,float insigniaRotationSpd) |
|
|
|
|
:Bullet(targetPos,vel,radius,damage,imgName,upperLevel,false,lifetime+0.1f,false,friendly,WHITE,scale,image_angle),targetPos(targetPos),zVel(zVel),indicatorDisplayTime(indicatorDisplayTime),knockbackAmt(knockbackAmt), |
|
|
|
|
indicator(targetPos,lifetime+0.1f,"range_indicator.png","spell_insignia.png",upperLevel,radius/12.f,0.5f,{},spellCircleCol,spellCircleRotation,spellCircleRotationSpd,false,radius/12.f,0.f,{},insigniaCol,insigniaRotation,insigniaRotationSpd,false){ |
|
|
|
|
pos+=-vel*lifetime; |
|
|
|
|
z=-zVel*lifetime; |
|
|
|
|
} |
|
|
|
@ -62,16 +62,16 @@ void FallingBullet::Update(float fElapsedTime){ |
|
|
|
|
fadeOutTime=0.5f; |
|
|
|
|
SoundEffect::PlaySFX("Stone Land",pos); |
|
|
|
|
if(friendly){ |
|
|
|
|
for(auto&[monsterPtr,hurt]:game->Hurt(targetPos,radius,damage,OnUpperLevel(),z,HurtType::MONSTER)){ |
|
|
|
|
for(auto&[monsterPtr,hurt]:game->Hurt(pos,radius,damage,OnUpperLevel(),z,HurtType::MONSTER)){ |
|
|
|
|
if(hurt)std::get<Monster*>(monsterPtr)->ApplyIframes(0.1f); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else{ |
|
|
|
|
for(auto&[playerPtr,hurt]:game->Hurt(targetPos,radius,damage,OnUpperLevel(),z,HurtType::PLAYER)){ |
|
|
|
|
for(auto&[playerPtr,hurt]:game->Hurt(pos,radius,damage,OnUpperLevel(),z,HurtType::PLAYER)){ |
|
|
|
|
if(hurt)std::get<Player*>(playerPtr)->ApplyIframes(0.1f); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
game->ProximityKnockback(targetPos,radius,knockbackAmt,HurtType::PLAYER|HurtType::MONSTER); |
|
|
|
|
game->ProximityKnockback(pos,radius,knockbackAmt,HurtType::PLAYER|HurtType::MONSTER); |
|
|
|
|
for(int i:std::ranges::iota_view(0,30))game->AddEffect(std::make_unique<Effect>(pos-vf2d{0.f,GetZ()},util::random_range(0.05f,0.2f),"circle_outline.png",OnUpperLevel(),util::random_range(0.5f,1.f),0.2f,vf2d{util::random_range(-10.f,10.f),util::random_range(-3.f,0.f)},PixelLerp(BLACK,col,util::random(1.f)),0.f,0.f,true)); |
|
|
|
|
Deactivate(); |
|
|
|
|
} |
|
|
|
|