diff --git a/source/enemy/nclam.cpp b/source/enemy/nclam.cpp index 6d9d2c124..2320f706b 100644 --- a/source/enemy/nclam.cpp +++ b/source/enemy/nclam.cpp @@ -189,3 +189,56 @@ void CNpcStaticClamEnemy::collidedWith( CThing *_thisThing ) CNpcClamEnemy::collidedWith( _thisThing ); } } + +int CNpcStaticClamEnemy::checkCollisionAgainst( CThing *_thisThing, int _frames ) +{ + DVECTOR pos,thisThingPos; + int radius; + int collided; + + pos = getCollisionCentre(); + thisThingPos=_thisThing->getCollisionCentre(); + + radius=getCollisionRadius()+_thisThing->getCollisionRadius(); + collided=false; + if(abs(pos.vx-thisThingPos.vx)getCollisionArea(); + + if(((thisRect.x1>=thatRect.x1&&thisRect.x1<=thatRect.x2)||(thisRect.x2>=thatRect.x1&&thisRect.x2<=thatRect.x2)||(thisRect.x1<=thatRect.x1&&thisRect.x2>=thatRect.x2))&& + ((thisRect.y1>=thatRect.y1&&thisRect.y1<=thatRect.y2)||(thisRect.y2>=thatRect.y1&&thisRect.y2<=thatRect.y2)||(thisRect.y1<=thatRect.y1&&thisRect.y2>=thatRect.y2))) + { + switch(_thisThing->getThingType()) + { + case TYPE_PLAYER: + { + if ( m_isStunned && m_isActive ) + { + CPlayer *player = (CPlayer *) _thisThing; + + s32 playerDeltaY = player->getPosDelta().vy; + + if ( thisThingPos.vy - playerDeltaY <= getNewYPos( _thisThing ) ) + { + player->setPlatform( this ); + } + } + + break; + } + + default: + break; + } + + collided=true; + } + } + + return collided; +} \ No newline at end of file diff --git a/source/enemy/nclam.h b/source/enemy/nclam.h index 9054900b0..7a825b87a 100644 --- a/source/enemy/nclam.h +++ b/source/enemy/nclam.h @@ -31,6 +31,7 @@ class CNpcStaticClamEnemy : public CNpcClamEnemy { public: virtual void postInit(); + virtual int checkCollisionAgainst(CThing *_thisThing, int _frames); protected: virtual void collidedWith(CThing *_thisThing); virtual void processShot(); diff --git a/source/platform/platform.cpp b/source/platform/platform.cpp index ca940e35b..b28dd4906 100644 --- a/source/platform/platform.cpp +++ b/source/platform/platform.cpp @@ -854,19 +854,9 @@ int CNpcPlatform::checkCollisionAgainst(CThing *_thisThing, int _frames) { _thisThing->setHasPlatformCollided( true ); - _thisThing->setCentreCollision( true ); - _thisThing->setNewCollidedPos( thatPos ); } } - else - { - _thisThing->setCentreCollision( false ); - } - } - else - { - _thisThing->setCentreCollision( false ); } } } diff --git a/source/thing/thing.h b/source/thing/thing.h index 07f480489..d208fd99d 100644 --- a/source/thing/thing.h +++ b/source/thing/thing.h @@ -143,7 +143,6 @@ public: int getCollisionRadius() {return m_collisionRadius;} CRECT getCollisionArea() {return m_collisionArea;} s16 getCollisionAngle() {return m_collisionAngle;} - bool getCentreCollision() {return m_centreCollision;} DVECTOR getNewCollidedPos() {return m_newCollidedPos;} DVECTOR getCollisionSize() {return m_collisionSize;} @@ -156,7 +155,6 @@ public: virtual bool getHasPlatformCollided() {return false;} virtual s32 getNewYPos( CThing *_thisThing ); void setNewCollidedPos(DVECTOR newPos) {m_newCollidedPos = newPos;} - void setCentreCollision(bool newCentreCollision) {m_centreCollision = newCentreCollision;} protected: