This commit is contained in:
Charles 2001-06-27 20:50:28 +00:00
parent efade374fe
commit 4ef031e3ad
3 changed files with 130 additions and 6 deletions

View File

@ -434,7 +434,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
NPC_CLOSE_NONE,
NPC_TIMER_NONE,
false,
3,
5,
64,
DETECT_ALL_COLLISION,
DAMAGE__SHOCK_ENEMY,

View File

@ -224,6 +224,129 @@ bool CNpcSeaSnakeEnemy::processSensor()
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
u8 CNpcSeaSnakeEnemy::processPathMove( int _frames, s32 *moveX, s32 *moveY, s32 *moveVel, s32 *moveDist )
{
bool pathComplete;
bool waypointChange;
s32 xDist, yDist;
s16 headingToTarget = m_npcPath.think( Pos, &pathComplete, &waypointChange, &xDist, &yDist );
/*if ( waypointChange )
{
m_movementTimer = 0;
}*/
if ( !pathComplete )
{
s16 decDir, incDir;
s16 maxTurnRate = m_data[m_type].turnSpeed;
decDir = m_heading - headingToTarget;
if ( decDir < 0 )
{
decDir += ONE;
}
incDir = headingToTarget - m_heading;
if ( incDir < 0 )
{
incDir += ONE;
}
if ( decDir < incDir )
{
*moveDist = -decDir;
}
else
{
*moveDist = incDir;
}
if ( *moveDist < -maxTurnRate )
{
*moveDist = -maxTurnRate;
}
else if ( *moveDist > maxTurnRate )
{
*moveDist = maxTurnRate;
}
m_heading += *moveDist;
m_heading &= 4095;
s32 speed = m_speed;
if ( abs( *moveDist ) > 10 )
{
speed = 3;
}
s32 preShiftX = _frames * speed * rcos( m_heading );
s32 preShiftY = _frames * speed * rsin( m_heading );
*moveX = preShiftX >> 12;
if ( !(*moveX) && preShiftX )
{
*moveX = preShiftX / abs( preShiftX );
}
if ( xDist > 0 )
{
if ( *moveX > xDist )
{
*moveX = xDist;
}
}
else if ( xDist < 0 )
{
if ( *moveX < xDist )
{
*moveX = xDist;
}
}
else
{
*moveX = 0;
}
*moveY = preShiftY >> 12;
if ( !(*moveY) && preShiftY )
{
*moveY = preShiftY / abs( preShiftY );
}
if ( yDist > 0 )
{
if ( *moveY > yDist )
{
*moveY = yDist;
}
}
else if ( yDist < 0 )
{
if ( *moveY < yDist )
{
*moveY = yDist;
}
}
else
{
*moveY = 0;
}
*moveVel = ( _frames * m_speed ) << 8;
//processGroundCollisionReverse( moveX, moveY );
}
return( waypointChange );
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcSeaSnakeEnemy::processMovement( int _frames )
{
s32 moveX = 0, moveY = 0;
@ -275,8 +398,8 @@ void CNpcSeaSnakeEnemy::processMovement( int _frames )
m_heading = ( m_origHeading + m_circleHeading ) & 4095;
s32 preShiftX = _frames * m_speed * rcos( m_heading );
s32 preShiftY = _frames * m_speed * rsin( m_heading );
s32 preShiftX = _frames * 3 * rcos( m_heading );
s32 preShiftY = _frames * 3 * rsin( m_heading );
s32 moveX = preShiftX >> 12;
if ( !moveX && preShiftX )
@ -308,8 +431,8 @@ void CNpcSeaSnakeEnemy::processMovement( int _frames )
m_heading = ( m_origHeading + m_circleHeading ) & 4095;
s32 preShiftX = _frames * m_speed * rcos( m_heading );
s32 preShiftY = _frames * m_speed * rsin( m_heading );
s32 preShiftX = _frames * 3 * rcos( m_heading );
s32 preShiftY = _frames * 3 * rsin( m_heading );
s32 moveX = preShiftX >> 12;
if ( !moveX && preShiftX )
@ -379,7 +502,7 @@ void CNpcSeaSnakeEnemy::processMovement( int _frames )
}
else
{
if ( processGenericFixedPathMove( _frames, &moveX, &moveY, &moveVel, &moveDist ) )
if ( processPathMove( _frames, &moveX, &moveY, &moveVel, &moveDist ) )
{
// path has changed

View File

@ -68,6 +68,7 @@ protected:
virtual void processShot( int _frames );
virtual void processEnemyCollision( CThing *thisThing );
virtual void processUserCollision( CThing *thisThing );
u8 processPathMove( int _frames, s32 *moveX, s32 *moveY, s32 *moveVel, s32 *moveDist );
u8 isSnakeStopped();
void moveEntireSnake( DVECTOR newPos );