This commit is contained in:
parent
15eb72b545
commit
a699fccb14
3 changed files with 140 additions and 61 deletions
|
@ -23,6 +23,9 @@
|
|||
#include "player\player.h"
|
||||
#endif
|
||||
|
||||
#define MJ_CYCLE_WIDTH 400
|
||||
#define MJ_HALF_CYCLE_WIDTH ( MJ_CYCLE_WIDTH >> 1 )
|
||||
|
||||
|
||||
void CNpcEnemy::processMotherJellyfishMovement( int _frames )
|
||||
{
|
||||
|
@ -31,9 +34,11 @@ void CNpcEnemy::processMotherJellyfishMovement( int _frames )
|
|||
|
||||
switch( m_state )
|
||||
{
|
||||
case MOTHER_JELLYFISH_RETURN_TO_START:
|
||||
case MOTHER_JELLYFISH_RETURN_TO_START_1:
|
||||
case MOTHER_JELLYFISH_RETURN_TO_START_2:
|
||||
case MOTHER_JELLYFISH_RETURN_TO_START_3:
|
||||
{
|
||||
xDist = m_base.vx - this->Pos.vx;
|
||||
xDist = m_base.vx - this->Pos.vx - MJ_HALF_CYCLE_WIDTH;
|
||||
xDistSqr = xDist * xDist;
|
||||
yDist = m_base.vy - this->Pos.vy;
|
||||
yDistSqr = yDist * yDist;
|
||||
|
@ -46,56 +51,70 @@ void CNpcEnemy::processMotherJellyfishMovement( int _frames )
|
|||
{
|
||||
// have arrived at base position
|
||||
|
||||
m_movementTimer = GameState::getOneSecondInFrames() * 5;
|
||||
m_state = MOTHER_JELLYFISH_CYCLE;
|
||||
m_extension = 0;
|
||||
m_movementTimer = GameState::getOneSecondInFrames() * 10;
|
||||
m_state++;
|
||||
m_extension = -MJ_HALF_CYCLE_WIDTH;
|
||||
m_extendDir = EXTEND_RIGHT;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case MOTHER_JELLYFISH_CYCLE:
|
||||
{
|
||||
if ( m_movementTimer > 0 )
|
||||
case MOTHER_JELLYFISH_CYCLE_1:
|
||||
case MOTHER_JELLYFISH_CYCLE_2:
|
||||
case MOTHER_JELLYFISH_CYCLE_3:
|
||||
{
|
||||
m_movementTimer -= _frames;
|
||||
|
||||
s32 xExtension;
|
||||
|
||||
if ( m_extendDir == EXTEND_RIGHT )
|
||||
{
|
||||
if ( m_extension < 200 )
|
||||
if ( m_extension < MJ_HALF_CYCLE_WIDTH )
|
||||
{
|
||||
m_extension += 3 * _frames;
|
||||
|
||||
Pos.vx = m_base.vx + m_extension;
|
||||
xExtension = ( MJ_HALF_CYCLE_WIDTH * rsin( ( m_extension << 10 ) / MJ_HALF_CYCLE_WIDTH ) ) >> 12;
|
||||
|
||||
Pos.vx = m_base.vx + xExtension;
|
||||
Pos.vy = m_base.vy - ( ( 50 * rsin( ( xExtension << 12 ) / MJ_CYCLE_WIDTH ) ) >> 12 );
|
||||
|
||||
m_heading = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_extendDir = EXTEND_LEFT;
|
||||
|
||||
if ( m_movementTimer < 0 )
|
||||
{
|
||||
m_controlFunc = NPC_CONTROL_CLOSE;
|
||||
m_state++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_extension > -200 )
|
||||
if ( m_extension > -MJ_HALF_CYCLE_WIDTH )
|
||||
{
|
||||
m_extension -= 3 * _frames;
|
||||
|
||||
Pos.vx = m_base.vx + m_extension;
|
||||
xExtension = ( MJ_HALF_CYCLE_WIDTH * rsin( ( m_extension << 10 ) / MJ_HALF_CYCLE_WIDTH ) ) >> 12;
|
||||
|
||||
Pos.vx = m_base.vx + xExtension;
|
||||
Pos.vy = m_base.vy + ( ( 50 * rsin( ( xExtension << 12 ) / MJ_CYCLE_WIDTH ) ) >> 12 );
|
||||
|
||||
m_heading = 2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_extendDir = EXTEND_RIGHT;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if ( m_movementTimer < 0 )
|
||||
{
|
||||
m_controlFunc = NPC_CONTROL_CLOSE;
|
||||
m_state = MOTHER_JELLYFISH_ATTACK_PLAYER;
|
||||
m_state++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -107,6 +126,10 @@ void CNpcEnemy::processMotherJellyfishMovement( int _frames )
|
|||
}
|
||||
|
||||
void CNpcEnemy::processCloseMotherJellyfishAttack( int _frames )
|
||||
{
|
||||
switch( m_state )
|
||||
{
|
||||
case MOTHER_JELLYFISH_ATTACK_PLAYER_SHOCK:
|
||||
{
|
||||
// seek position above user
|
||||
|
||||
|
@ -133,6 +156,56 @@ void CNpcEnemy::processCloseMotherJellyfishAttack( int _frames )
|
|||
// fire at user
|
||||
|
||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||
m_state = MOTHER_JELLYFISH_RETURN_TO_START;
|
||||
m_state = MOTHER_JELLYFISH_RETURN_TO_START_1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
s32 xExtension;
|
||||
|
||||
if ( m_extendDir == EXTEND_RIGHT )
|
||||
{
|
||||
if ( m_extension < MJ_HALF_CYCLE_WIDTH )
|
||||
{
|
||||
m_extension += 3 * _frames;
|
||||
|
||||
xExtension = ( MJ_HALF_CYCLE_WIDTH * rsin( ( m_extension << 10 ) / MJ_HALF_CYCLE_WIDTH ) ) >> 12;
|
||||
|
||||
Pos.vx = m_base.vx + xExtension;
|
||||
Pos.vy = m_base.vy - ( ( 50 * rcos( ( xExtension << 11 ) / MJ_CYCLE_WIDTH ) ) >> 12 );
|
||||
|
||||
m_heading = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||
m_state++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_extension > -MJ_HALF_CYCLE_WIDTH )
|
||||
{
|
||||
m_extension -= 3 * _frames;
|
||||
|
||||
xExtension = ( MJ_HALF_CYCLE_WIDTH * rsin( ( m_extension << 10 ) / MJ_HALF_CYCLE_WIDTH ) ) >> 12;
|
||||
|
||||
Pos.vx = m_base.vx + xExtension;
|
||||
Pos.vy = m_base.vy + ( ( 50 * rcos( ( xExtension << 11 ) / MJ_CYCLE_WIDTH ) ) >> 12 );
|
||||
|
||||
m_heading = 2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||
m_state++;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -209,7 +209,7 @@ void CNpcEnemy::init()
|
|||
{
|
||||
CEnemyThing::init();
|
||||
|
||||
m_type = NPC_CLAM_STATIC;
|
||||
m_type = NPC_MOTHER_JELLYFISH;
|
||||
|
||||
// sActorHdr *Hdr = m_skel.Load( m_data[m_type].skelType );
|
||||
// m_skel.Init( Hdr );
|
||||
|
@ -234,7 +234,7 @@ void CNpcEnemy::init()
|
|||
|
||||
m_extension = EXTEND_RIGHT;
|
||||
|
||||
Pos.vx = 100;
|
||||
Pos.vx = 400;
|
||||
Pos.vy = 100;
|
||||
|
||||
m_base = Pos;
|
||||
|
@ -297,7 +297,7 @@ void CNpcEnemy::init()
|
|||
|
||||
case NPC_INIT_MOTHER_JELLYFISH:
|
||||
{
|
||||
m_state = MOTHER_JELLYFISH_RETURN_TO_START;
|
||||
m_state = MOTHER_JELLYFISH_RETURN_TO_START_1;
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -272,9 +272,15 @@ protected:
|
|||
|
||||
enum NPC_MOTHER_JELLYFISH_STATE
|
||||
{
|
||||
MOTHER_JELLYFISH_RETURN_TO_START = 0,
|
||||
MOTHER_JELLYFISH_CYCLE = 1,
|
||||
MOTHER_JELLYFISH_ATTACK_PLAYER,
|
||||
MOTHER_JELLYFISH_RETURN_TO_START_1 = 0,
|
||||
MOTHER_JELLYFISH_CYCLE_1 = 1,
|
||||
MOTHER_JELLYFISH_ATTACK_PLAYER_SPAWN_1,
|
||||
MOTHER_JELLYFISH_RETURN_TO_START_2,
|
||||
MOTHER_JELLYFISH_CYCLE_2,
|
||||
MOTHER_JELLYFISH_ATTACK_PLAYER_SPAWN_2,
|
||||
MOTHER_JELLYFISH_RETURN_TO_START_3,
|
||||
MOTHER_JELLYFISH_CYCLE_3,
|
||||
MOTHER_JELLYFISH_ATTACK_PLAYER_SHOCK,
|
||||
};
|
||||
|
||||
enum NPC_SUB_SHARK_STATE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue