This commit is contained in:
Charles 2001-05-21 19:18:35 +00:00
parent 26ef34db73
commit ce0c6759fb
2 changed files with 63 additions and 6 deletions

View File

@ -44,16 +44,22 @@
#endif #endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcClamEnemy::processEnemyCollision( CThing *thisThing ) void CNpcClamEnemy::processEnemyCollision( CThing *thisThing )
{ {
// do nothing // do nothing
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcClamEnemy::processUserCollision( CThing *thisThing ) void CNpcClamEnemy::processUserCollision( CThing *thisThing )
{ {
// do nothing // do nothing
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool CNpcClamEnemy::processSensor() bool CNpcClamEnemy::processSensor()
{ {
switch( m_sensorFunc ) switch( m_sensorFunc )
@ -81,6 +87,8 @@ bool CNpcClamEnemy::processSensor()
} }
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcJumpingClamEnemy::postInit() void CNpcJumpingClamEnemy::postInit()
{ {
CNpcClamEnemy::postInit(); CNpcClamEnemy::postInit();
@ -88,6 +96,8 @@ void CNpcJumpingClamEnemy::postInit()
m_drawRotation = m_heading + 1024; m_drawRotation = m_heading + 1024;
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcJumpingClamEnemy::processClose( int _frames ) void CNpcJumpingClamEnemy::processClose( int _frames )
{ {
s32 velocity; s32 velocity;
@ -151,6 +161,8 @@ void CNpcJumpingClamEnemy::processClose( int _frames )
} }
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcStaticClamEnemy::postInit() void CNpcStaticClamEnemy::postInit()
{ {
CNpcClamEnemy::postInit(); CNpcClamEnemy::postInit();
@ -170,26 +182,32 @@ void CNpcStaticClamEnemy::postInit()
platform->postInit(); platform->postInit();
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcStaticClamEnemy::processClose( int _frames ) void CNpcStaticClamEnemy::processClose( int _frames )
{ {
if ( !m_isAnimating && !m_isStunned ) if ( !m_animPlaying && !m_isStunned )
{ {
m_animPlaying = true; m_animPlaying = true;
m_animNo = ANIM_CLAM_SIDESNAP; m_animNo = ANIM_CLAM_SIDESNAP;
m_frame = 0; m_frame = 0;
m_isAnimating = true;
} }
else if ( !m_animPlaying ) /*else if ( !m_animPlaying )
{ {
m_controlFunc = NPC_CONTROL_MOVEMENT; m_controlFunc = NPC_CONTROL_MOVEMENT;
m_animNo = m_data[m_type].initAnim; m_animNo = m_data[m_type].initAnim;
m_frame = 0; m_frame = 0;
m_isAnimating = false; m_isAnimating = false;
} }*/
m_isStunned = false; if ( m_isStunned )
{
m_isStunned = false;
}
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcStaticClamEnemy::collidedWith( CThing *_thisThing ) void CNpcStaticClamEnemy::collidedWith( CThing *_thisThing )
{ {
if ( m_isActive && !m_isCaught && !m_isDying ) if ( m_isActive && !m_isCaught && !m_isDying )
@ -198,7 +216,18 @@ void CNpcStaticClamEnemy::collidedWith( CThing *_thisThing )
{ {
case TYPE_PLAYER: case TYPE_PLAYER:
{ {
m_isStunned = true; if ( m_frame < ( 5 << 8 ) )
{
m_animNo = ANIM_CLAM_SIDESNAP;
m_frame = 0;
m_isStunned = true;
m_animPlaying = false;
}
else
{
m_oldControlFunc = m_controlFunc;
m_controlFunc = NPC_CONTROL_COLLISION;
}
break; break;
} }
@ -208,3 +237,29 @@ void CNpcStaticClamEnemy::collidedWith( CThing *_thisThing )
} }
} }
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcStaticClamEnemy::processCollision()
{
CPlayer *player = GameScene.getPlayer();
player->takeDamage( m_data[m_type].damageToUserType,REACT__GET_DIRECTION_FROM_THING,(CThing*)this );
processUserCollision( (CThing *) player );
m_controlFunc = m_oldControlFunc;
if ( !m_animPlaying && !m_isStunned )
{
m_animPlaying = true;
m_animNo = ANIM_CLAM_SIDESNAP;
m_frame = 0;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
s32 CNpcStaticClamEnemy::getFrameShift( int _frames )
{
return( ( _frames << 8 ) >> 2 );
}

View File

@ -38,8 +38,10 @@ public:
virtual void postInit(); virtual void postInit();
virtual u8 hasBeenAttacked() {return( false );} virtual u8 hasBeenAttacked() {return( false );}
protected: protected:
virtual s32 getFrameShift( int _frames );
virtual void collidedWith(CThing *_thisThing); virtual void collidedWith(CThing *_thisThing);
virtual void processClose( int _frames ); virtual void processClose( int _frames );
virtual void processCollision();
u8 m_isStunned; u8 m_isStunned;
u8 m_isAnimating; u8 m_isAnimating;