@ -38,11 +38,14 @@ All rights reserved.
# include "BulletTypes.h"
# include "AdventuresInLestoria.h"
# include "FallingDebris.h"
# include "util.h"
INCLUDE_game
INCLUDE_MONSTER_LIST
LargeStone : : LargeStone ( vf2d pos , const float stoneThrowTime , const vf2d landingPos , float moveVelWaitTimer , float radius , float z , float gravity , int damage , bool upperLevel , bool hitsMultiple , float lifetime , bool friendly , Pixel col , vf2d scale , float image_angle )
: stoneThrowTime ( stoneThrowTime ) , startingPos ( pos ) , landingPos ( landingPos ) , gravity ( gravity ) , initialMoveWaitTime ( moveVelWaitTimer ) , moveTimer ( moveVelWaitTimer ) , Bullet ( pos , { } , radius , damage , " large_rock.png " , upperLevel , false , INFINITE , false , friendly , col , scale , image_angle ) {
LargeStone : : LargeStone ( vf2d pos , const float stoneThrowTime , const vf2d landingPos , float moveVelWaitTimer , float radius , float z , float gravity , int damage , const float knockbackAmt , bool upperLevel , bool hitsMultiple , float lifetime , bool friendly , Pixel col , vf2d scale , float image_angle )
: knockbackAmt ( knockbackAmt ) , stoneThrowTime ( stoneThrowTime ) , startingPos ( pos ) , landingPos ( landingPos ) , gravity ( gravity ) , initialMoveWaitTime ( moveVelWaitTimer ) , moveTimer ( moveVelWaitTimer ) , Bullet ( pos , { } , radius , damage , " large_rock.png " , upperLevel , false , INFINITE , false , friendly , col , scale , image_angle ) {
this - > z = z ;
Deactivate ( ) ;
}
@ -55,7 +58,29 @@ void LargeStone::Update(float fElapsedTime){
if ( moveTimer > 0.f ) moveTimer - = fixedTimeStep ;
if ( moveTimer < = 0.f ) {
if ( z < = 0.f & & fadeOutTime = = 0.f ) {
game - > Hurt ( pos , radius , damage , OnUpperLevel ( ) , 0.f , friendly ? HurtType : : MONSTER : HurtType : : PLAYER ) ;
const HurtList list { game - > Hurt ( pos , radius , damage , OnUpperLevel ( ) , 0.f , friendly ? HurtType : : MONSTER : HurtType : : PLAYER ) } ;
for ( int i = 0 ; i < 100 ; i + + ) {
const float randomDir { util : : random ( 2 * PI ) } ;
game - > AddEffect ( std : : make_unique < FallingDebris > ( pos + vf2d { radius , randomDir } . cart ( ) , 0.f , " circle.png " , OnUpperLevel ( ) , vf2d { 1.5f , 1.5f } * util : : random ( 2.f ) , util : : random ( 1.f ) , vf2d { vf2d { radius , randomDir } . cart ( ) . x , - util : : random ( 30.f ) - 20.f } , BLACK ) ) ;
}
# pragma region Knockback Effect
# pragma region Check for player knockback
float distToPlayer = geom2d : : line < float > ( pos , game - > GetPlayer ( ) - > GetPos ( ) ) . length ( ) ;
if ( distToPlayer < = radius ) {
game - > GetPlayer ( ) - > ProximityKnockback ( pos , knockbackAmt ) ;
}
# pragma endregion
# pragma region Check for monster knockback
for ( auto & monsterPtr : MONSTER_LIST ) {
float distToMonster = geom2d : : line < float > ( pos , monsterPtr - > GetPos ( ) ) . length ( ) ;
if ( distToMonster < = radius ) {
monsterPtr - > ProximityKnockback ( pos , knockbackAmt ) ;
}
}
# pragma endregion
# pragma endregion
fadeOutTime = 0.5f ;
} else
if ( z > 0.f & & fadeOutTime > = 0.f ) {