This commit is contained in:
Charles 2001-07-09 19:38:58 +00:00
parent 097c54d7cc
commit dfd36d956e
7 changed files with 72 additions and 2 deletions

View File

@ -45,6 +45,7 @@ void CNpcGaryFriend::postInit()
m_started = false;
m_fallDeath = false;
m_drawRotation = 0;
m_obstructed = false;
m_soundId = (int) NOT_PLAYING;
}
@ -216,7 +217,7 @@ void CNpcGaryFriend::think( int _frames )
m_soundId = (int) CSoundMediator::playSfx( CSoundMediator::SFX_GARY_DE_SNAIL, true );
}
if ( !conveyorOverride )
if ( !conveyorOverride && !m_obstructed )
{
Pos.vx += multiplier * 2 * _frames;
}
@ -248,7 +249,7 @@ void CNpcGaryFriend::think( int _frames )
m_soundId = (int) CSoundMediator::playSfx( CSoundMediator::SFX_GARY_DE_SNAIL, true );
}
if ( !conveyorOverride )
if ( !conveyorOverride && !m_obstructed )
{
Pos.vx += multiplier * 2 * _frames;
}
@ -261,6 +262,8 @@ void CNpcGaryFriend::think( int _frames )
}
}
}
m_obstructed = false;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -32,6 +32,7 @@ public:
void startLeft();
void startRight();
void render();
void setObstructed() {m_obstructed = true;}
protected:
DVECTOR m_triggerPos;
@ -40,6 +41,7 @@ protected:
s16 m_speed;
s16 m_drawRotation;
int m_soundId;
u8 m_obstructed;
};
#endif

View File

@ -58,6 +58,7 @@ public:
void setPlatform( CNpcPlatform *platform ) {m_platform = platform;}
void clearPlatform() {m_platform = NULL;}
virtual void setupWaypoints( sThingActor *ThisActor );
virtual void setObstructed() {}
static CNpcFriend *Create(sThingActor *ThisActor);
static NPC_FRIEND_UNIT_TYPE getTypeFromMapEdit( u16 newType );

View File

@ -542,6 +542,9 @@ void CNpcHazard::collidedWith( CThing *_thisThing )
break;
}
case TYPE_NPC:
break;
default:
ASSERT(0);
break;

View File

@ -27,6 +27,10 @@
#include "game\game.h"
#endif
#ifndef __FRIEND_FRIEND_H__
#include "friend\friend.h"
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -216,3 +220,39 @@ void CNpcRisingWeightHazard::render()
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcRisingWeightHazard::collidedWith( CThing *_thisThing )
{
if ( m_isActive )
{
switch(_thisThing->getThingType())
{
case TYPE_PLAYER:
{
CPlayer *player = (CPlayer *) _thisThing;
if ( !player->isRecoveringFromHit() )
{
player->takeDamage( DAMAGE__HIT_ENEMY );
}
break;
}
case TYPE_NPC:
{
CNpcFriend *npcFriend = (CNpcFriend *) _thisThing;
npcFriend->setObstructed();
break;
}
default:
ASSERT(0);
break;
}
}
}

View File

@ -27,6 +27,7 @@ public:
void setTriggered() {m_triggered = true;}
CRECT const *getThinkBBox() {return( CThing::getThinkBBox() );}
protected:
virtual void collidedWith(CThing *_thisThing);
void setWaypoints( sThingHazard *ThisHazard );
void processMovement( int _frames );

View File

@ -750,6 +750,26 @@ DVECTOR const &CamPos=CLevel::getCameraPos();
thing1=thing1->m_nextCollisionThing;
}
// gary collision with hazards
thing2=s_CollisionLists[CThing::TYPE_NPC];
while(thing2)
{
if ( thing2->getThingSubType() == CNpcFriend::NPC_FRIEND_GARY )
{
thing1=s_CollisionLists[CThing::TYPE_HAZARD];
while(thing1)
{
if(thing1->checkCollisionAgainst(thing2, _frames))
{
thing1->collidedWith(thing2);
}
thing1=thing1->m_nextCollisionThing;
}
}
thing2=thing2->m_nextCollisionThing;
}
player->detectHazardousSurface();
}
// Shut emm down, sh sh shut em down, we shutem down