@ -68,7 +68,7 @@ void Monster::STRATEGY::GHOST_OF_PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std
const auto AdvanceCannonPhase { [ & m , & strategy ] ( ) {
m . GetFloat ( A : : CANNON_TIMER ) = 0.f ;
//if(m.GetInt(A::CANNON_PHASE)+1>=PHASE_COUNT)m.GetInt(A::CANNON_SHOT_TYPE)=util::random()%5;
if ( m . GetInt ( A : : CANNON_PHASE ) + 1 > = PHASE_COUNT ) m . GetInt ( A : : CANNON_SHOT_TYPE ) = util : : random ( ) % 5 ;
const int prevCannonPhase { m . I ( A : : CANNON_PHASE ) } ;
m . I ( A : : CANNON_PHASE ) = ( m . I ( A : : CANNON_PHASE ) + 1 ) % PHASE_COUNT ;
if ( prevCannonPhase > m . I ( A : : CANNON_PHASE ) ) { //Phase has wrapped around, reset cannon shot count.
@ -84,7 +84,7 @@ void Monster::STRATEGY::GHOST_OF_PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std
}
}
} } ;
if ( m . F ( A : : SHRAPNEL_SHOT_FALL_TIMER ) > 0.f ) {
m . F ( A : : SHRAPNEL_SHOT_FALL_TIMER ) - = fElapsedTime ;
while ( m . I ( A : : SHRAPNEL_SHOT_COUNT ) & & m . F ( A : : SHRAPNEL_SHOT_FALL_TIMER ) < = 0.f ) {
@ -101,10 +101,11 @@ void Monster::STRATEGY::GHOST_OF_PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std
if ( m . B ( A : : FIRST_WAVE_COMPLETE ) ) {
m . SetVelocity ( util : : pointTo ( m . GetPos ( ) , game - > GetPlayer ( ) - > GetPos ( ) ) ) ;
if ( m . F ( A : : GHOST_SABER_TIMER ) < = 0.f ) {
const float distToPlayer { util : : distance ( m . GetPos ( ) , game - > GetPlayer ( ) - > GetPos ( ) ) } ;
if ( m . F ( A : : GHOST_SABER_TIMER ) < = 0.f & & distToPlayer < = ConfigPixels ( " Ghost Saber Activation Range " ) ) {
m . F ( A : : GHOST_SABER_TIMER ) = ConfigFloat ( " Ghost Saber Cooldown " ) ;
const float playerToMonsterAngle { util : : pointTo ( game - > GetPlayer ( ) - > GetPos ( ) , m . GetPos ( ) ) . polar ( ) . y } ;
CreateBullet ( GhostSaber ) ( m . GetPos ( ) , m . GetWeakPointer ( ) , ConfigFloat ( " Ghost Saber Lifetime " ) , ConfigFloat ( " Ghost Saber Distance " ) , ConfigFloat ( " Ghost Saber Knockback Amt " ) , playerToMonsterAngle , ConfigFloat ( " Ghost Saber Radius " ) , ConfigInt ( " Ghost Saber Damage " ) , m . OnUpperLevel ( ) , util : : degToRad ( ConfigFloat ( " Ghost Saber Rotation Spd " ) ) ) EndBullet ;
CreateBullet ( GhostSaber ) ( m . GetPos ( ) , m . GetWeakPointer ( ) , ConfigFloat ( " Ghost Saber Lifetime " ) , ConfigFloat ( " Ghost Saber Distance " ) , ConfigFloat ( " Ghost Saber Knockback Amt " ) , playerToMonsterAngle , ConfigFloat ( " Ghost Saber Radius " ) , ConfigFloat ( " Ghost Saber Expand Spd " ) , Config Int ( " Ghost Saber Damage " ) , m . OnUpperLevel ( ) , util : : degToRad ( ConfigFloat ( " Ghost Saber Rotation Spd " ) ) ) EndBullet ;
}
}
@ -121,7 +122,7 @@ void Monster::STRATEGY::GHOST_OF_PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std
if ( cannonCycle = = CANNON_SHOT ) TOTAL_CANNON_SHOTS + + ;
}
m . B ( A : : FIRST_WAVE_COMPLETE ) = false ;
m . I ( A : : CANNON_SHOT_TYPE ) = PREDICTION ;
m . I ( A : : CANNON_SHOT_TYPE ) = BOMBARDMENT ;
m . ForceSetPos ( { - 400.f , - 400.f } ) ;
SETPHASE ( NORMAL ) ;
} break ;
@ -157,6 +158,7 @@ void Monster::STRATEGY::GHOST_OF_PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std
LOG ( std : : format ( " Previous Pos: {} Current: {} " , game - > GetPlayer ( ) - > GetPreviousPos ( ) . str ( ) , game - > GetPlayer ( ) - > GetPos ( ) . str ( ) ) ) ;
const float angle { util : : angleTo ( game - > GetPlayer ( ) - > GetPreviousPos ( ) , game - > GetPlayer ( ) - > GetPos ( ) ) } ;
const float range { util : : random_range ( 0 , 100.f * game - > GetPlayer ( ) - > GetMoveSpdMult ( ) ) * ConfigFloat ( " Cannon Shot Impact Time " ) } ;
LOG ( std : : format ( " Range/Angle: {} " , vf2d { range , angle } . str ( ) ) ) ;
const vf2d targetPos { game - > GetPlayer ( ) - > GetPos ( ) + vf2d { range , angle } . cart ( ) } ;
CreateBullet ( FallingBullet ) ( " cannonball.png " , targetPos , ConfigVec ( " Cannon Vel " ) , ConfigFloatArr ( " Cannon Vel " , 2 ) , ConfigFloat ( " Indicator Time " ) , ConfigPixels ( " Cannon Radius " ) , ConfigInt ( " Cannon Damage " ) , m . OnUpperLevel ( ) , false , ConfigFloat ( " Cannon Knockback Amt " ) , ConfigFloat ( " Cannon Shot Impact Time " ) , false , ConfigPixel ( " Cannon Spell Circle Color " ) , vf2d { ConfigFloat ( " Cannon Radius " ) / 100.f * 1.75f , ConfigFloat ( " Cannon Radius " ) / 100.f * 1.75f } , util : : random ( 2 * PI ) , util : : random ( 2 * PI ) , util : : degToRad ( ConfigFloat ( " Cannon Spell Circle Rotation Spd " ) ) , ConfigPixel ( " Cannon Spell Insignia Color " ) , util : : random ( 2 * PI ) , util : : degToRad ( ConfigFloat ( " Cannon Spell Insignia Rotation Spd " ) ) ) EndBullet ;
} break ;