This commit is contained in:
parent
8afe90e6d4
commit
52c69c25b8
@ -114,11 +114,11 @@ void CNpcEnemy::processCloseAnemone1Attack( int _frames )
|
||||
|
||||
m_heading += moveDist;
|
||||
|
||||
m_heading = m_heading % ONE;
|
||||
m_heading &= 4095;
|
||||
|
||||
if ( withinRange )
|
||||
{
|
||||
// can fire
|
||||
// can fire, start firing anim
|
||||
|
||||
if ( m_timerTimer <= 0 && !m_animPlaying )
|
||||
{
|
||||
@ -128,22 +128,40 @@ void CNpcEnemy::processCloseAnemone1Attack( int _frames )
|
||||
m_animNo = ANIM_ANENOMELVL1_FIRE;
|
||||
m_frame = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
CProjectile *projectile;
|
||||
projectile = new( "test projectile" ) CProjectile;
|
||||
projectile->init( Pos, m_heading );
|
||||
projectile->setLayerCollision( m_layerCollision );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !m_animPlaying || m_animNo != ANIM_ANENOMELVL1_BEND )
|
||||
{
|
||||
m_animPlaying = true;
|
||||
m_animNo = ANIM_ANENOMELVL1_BEND;
|
||||
m_frame = 0;
|
||||
}
|
||||
}
|
||||
|
||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||
m_timerTimer = GameState::getOneSecondInFrames();
|
||||
m_timerFunc = NPC_TIMER_ATTACK_DONE;
|
||||
m_sensorFunc = NPC_SENSOR_NONE;
|
||||
if ( withinRange )
|
||||
{
|
||||
if ( m_timerTimer <= 0 && !m_animPlaying )
|
||||
{
|
||||
if ( m_animNo == ANIM_ANENOMELVL1_FIRE )
|
||||
{
|
||||
// if firing anim is complete and user is still in range, fire projectile
|
||||
|
||||
m_animPlaying = true;
|
||||
m_animNo = ANIM_ANENOMELVL1_BEND;
|
||||
m_frame = 0;
|
||||
}
|
||||
CProjectile *projectile;
|
||||
projectile = new( "test projectile" ) CProjectile;
|
||||
projectile->init( Pos, m_heading );
|
||||
projectile->setLayerCollision( m_layerCollision );
|
||||
|
||||
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||
m_timerTimer = GameState::getOneSecondInFrames();
|
||||
m_timerFunc = NPC_TIMER_ATTACK_DONE;
|
||||
m_sensorFunc = NPC_SENSOR_NONE;
|
||||
|
||||
m_animPlaying = true;
|
||||
m_animNo = ANIM_ANENOMELVL1_BEND;
|
||||
m_frame = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -44,7 +44,9 @@ void CNpcEnemy::processBallBlobMovement( int _frames, s32 *moveX, s32 *moveY )
|
||||
|
||||
// deal with horizontal
|
||||
|
||||
if ( m_npcPath.thinkFlat( Pos, &waypointXDist, &waypointYDist, &waypointHeading ) )
|
||||
bool pathComplete;
|
||||
|
||||
if ( m_npcPath.thinkFlat( Pos, &pathComplete, &waypointXDist, &waypointYDist, &waypointHeading ) )
|
||||
{
|
||||
// increment waypoint
|
||||
|
||||
|
@ -240,7 +240,9 @@ void CNpcEnemy::processGenericFixedPathWalk( int _frames, s32 *moveX, s32 *moveY
|
||||
|
||||
// ignore y component of waypoint, since we are stuck to the ground
|
||||
|
||||
if ( m_npcPath.thinkFlat( Pos, &distX, &distY, &m_heading ) )
|
||||
bool pathComplete;
|
||||
|
||||
if ( m_npcPath.thinkFlat( Pos, &pathComplete, &distX, &distY, &m_heading ) )
|
||||
{
|
||||
// path has finished, waypoint has changed, or there are no waypoints - do not move horizontally
|
||||
|
||||
|
@ -1259,6 +1259,13 @@ void CNpcEnemy::processMovement(int _frames)
|
||||
break;
|
||||
}
|
||||
|
||||
case NPC_MOVEMENT_RETURNING_HAZARD_GROUND:
|
||||
{
|
||||
processReturningHazardMovementGround( _frames );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case NPC_MOVEMENT_SHARK_MAN:
|
||||
{
|
||||
processSharkManMovement( _frames, &moveX, &moveY );
|
||||
|
@ -291,6 +291,7 @@ protected:
|
||||
NPC_MOVEMENT_STATIC_CYCLE_ANIM,
|
||||
NPC_MOVEMENT_SHARK_MAN,
|
||||
NPC_MOVEMENT_BALL_BLOB,
|
||||
NPC_MOVEMENT_RETURNING_HAZARD_GROUND,
|
||||
};
|
||||
|
||||
enum NPC_MOVEMENT_MODIFIER_FUNC
|
||||
@ -566,6 +567,7 @@ protected:
|
||||
void processPendulumMovement( int _frames );
|
||||
void processFireballMovement( int _frames );
|
||||
void processReturningHazardMovement( int _frames );
|
||||
void processReturningHazardMovementGround( int _frames );
|
||||
|
||||
// data
|
||||
|
||||
|
@ -368,7 +368,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||
ANIM_DUSTDEVIL_TWIST,
|
||||
NPC_INIT_RETURNING_HAZARD,
|
||||
NPC_SENSOR_NONE,
|
||||
NPC_MOVEMENT_RETURNING_HAZARD,
|
||||
NPC_MOVEMENT_RETURNING_HAZARD_GROUND,
|
||||
NPC_MOVEMENT_MODIFIER_NONE,
|
||||
NPC_CLOSE_NONE,
|
||||
NPC_TIMER_NONE,
|
||||
@ -469,7 +469,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||
NPC_CLOSE_JELLYFISH_EVADE,
|
||||
NPC_TIMER_NONE,
|
||||
false,
|
||||
3,
|
||||
2,
|
||||
128,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__SHOCK_ENEMY,
|
||||
@ -661,8 +661,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||
NPC_CLOSE_NONE,
|
||||
NPC_TIMER_NONE,
|
||||
false,
|
||||
5,
|
||||
256,
|
||||
3,
|
||||
2048,
|
||||
DETECT_ALL_COLLISION,
|
||||
DAMAGE__HIT_ENEMY,
|
||||
16,
|
||||
|
@ -267,10 +267,12 @@ s32 CNpcPath::think( DVECTOR currentPos, bool *pathComplete, bool *waypointChang
|
||||
return( headingToTarget );
|
||||
}
|
||||
|
||||
bool CNpcPath::thinkFlat( DVECTOR currentPos, s32 *distX, s32 *distY, s32 *heading )
|
||||
bool CNpcPath::thinkFlat( DVECTOR currentPos, bool *pathComplete, s32 *distX, s32 *distY, s32 *heading )
|
||||
{
|
||||
bool pointChange = false;
|
||||
|
||||
*pathComplete = false;
|
||||
|
||||
if ( !this->waypoint )
|
||||
{
|
||||
return( true );
|
||||
@ -289,7 +291,7 @@ bool CNpcPath::thinkFlat( DVECTOR currentPos, s32 *distX, s32 *distY, s32 *headi
|
||||
if ( abs( *distX ) < 10 )
|
||||
{
|
||||
pointChange = true;
|
||||
incPath();
|
||||
*pathComplete = incPath();
|
||||
}
|
||||
|
||||
*distX = currentWaypoint->pos.vx - currentPos.vx;
|
||||
@ -311,6 +313,8 @@ bool CNpcPath::thinkVertical( DVECTOR currentPos, bool *pathComplete, s32 *distX
|
||||
{
|
||||
bool pointChange = false;
|
||||
|
||||
*pathComplete = false;
|
||||
|
||||
if ( !this->waypoint )
|
||||
{
|
||||
return( true );
|
||||
@ -326,8 +330,6 @@ bool CNpcPath::thinkVertical( DVECTOR currentPos, bool *pathComplete, s32 *distX
|
||||
*distX = currentWaypoint->pos.vx - currentPos.vx;
|
||||
*distY = currentWaypoint->pos.vy - currentPos.vy;
|
||||
|
||||
*pathComplete = false;
|
||||
|
||||
if ( abs( *distY ) < 10 )
|
||||
{
|
||||
pointChange = true;
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
void resetPath();
|
||||
void reversePathDir();
|
||||
s32 think( DVECTOR currentPos, bool *pathComplete, bool *waypointChange );
|
||||
bool thinkFlat( DVECTOR currentPos, s32 *distX, s32 *distY, s32 *heading );
|
||||
bool thinkFlat( DVECTOR currentPos, bool *pathComplete, s32 *distX, s32 *distY, s32 *heading );
|
||||
bool thinkVertical( DVECTOR currentPos, bool *pathComplete, s32 *distX, s32 *distY, s32 *heading );
|
||||
bool getDistToNextWaypoint( DVECTOR currentPos, s32 *distX, s32 *distY );
|
||||
void getPathXExtents( s32 *minExtent, s32 *maxExtent );
|
||||
|
@ -122,7 +122,7 @@ void CNpcEnemy::processSpiderCrabCollision()
|
||||
{
|
||||
CPlayer *player = GameScene.getPlayer();
|
||||
|
||||
//player->takeDamage( m_data[m_type].damageToUserType );
|
||||
player->takeDamage( m_data[m_type].damageToUserType );
|
||||
|
||||
m_animNo = ANIM_SPIDERCRAB_BITE;
|
||||
m_animPlaying = true;
|
||||
@ -142,7 +142,7 @@ void CNpcEnemy::processSpiderCrabCollision()
|
||||
{
|
||||
CPlayer *player = GameScene.getPlayer();
|
||||
|
||||
//player->takeDamage( m_data[m_type].damageToUserType );
|
||||
player->takeDamage( m_data[m_type].damageToUserType );
|
||||
|
||||
m_controlFunc = m_oldControlFunc;
|
||||
}
|
||||
|
@ -225,7 +225,7 @@ void CNpcEnemy::processCloseSmallJellyfishEvade( int _frames )
|
||||
|
||||
m_heading += moveDist;
|
||||
|
||||
m_heading = m_heading % ONE;
|
||||
m_heading &= 4095;
|
||||
|
||||
moveX = ( _frames * 3 * rcos( m_heading ) ) >> 12;
|
||||
moveY = ( _frames * 3 * rsin( m_heading ) ) >> 12;
|
||||
|
@ -60,7 +60,7 @@ void CNpcEnemy::processCloseSkullStomperAttack( int _frames )
|
||||
|
||||
// pause and change direction
|
||||
|
||||
m_timerTimer = GameState::getOneSecondInFrames();
|
||||
m_timerTimer = 3 * GameState::getOneSecondInFrames();
|
||||
m_extendDir = EXTEND_UP;
|
||||
}
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user