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