This commit is contained in:
Charles 2001-03-12 19:14:38 +00:00
parent 15eb72b545
commit a699fccb14
3 changed files with 140 additions and 61 deletions

View file

@ -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;
@ -108,6 +127,10 @@ void CNpcEnemy::processMotherJellyfishMovement( int _frames )
void CNpcEnemy::processCloseMotherJellyfishAttack( int _frames )
{
switch( m_state )
{
case MOTHER_JELLYFISH_ATTACK_PLAYER_SHOCK:
{
// seek position above user
CPlayer *player = GameScene.getPlayer();
@ -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;
}
}
}

View file

@ -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;
}

View file

@ -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