This commit is contained in:
parent
1c5929ca5e
commit
7f75195e1a
@ -189,3 +189,56 @@ void CNpcStaticClamEnemy::collidedWith( CThing *_thisThing )
|
|||||||
CNpcClamEnemy::collidedWith( _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)<radius&&
|
||||||
|
abs(pos.vy-thisThingPos.vy)<radius)
|
||||||
|
{
|
||||||
|
CRECT thisRect,thatRect;
|
||||||
|
|
||||||
|
thisRect=getCollisionArea();
|
||||||
|
|
||||||
|
thatRect=_thisThing->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;
|
||||||
|
}
|
@ -31,6 +31,7 @@ class CNpcStaticClamEnemy : public CNpcClamEnemy
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void postInit();
|
virtual void postInit();
|
||||||
|
virtual int checkCollisionAgainst(CThing *_thisThing, int _frames);
|
||||||
protected:
|
protected:
|
||||||
virtual void collidedWith(CThing *_thisThing);
|
virtual void collidedWith(CThing *_thisThing);
|
||||||
virtual void processShot();
|
virtual void processShot();
|
||||||
|
@ -854,19 +854,9 @@ int CNpcPlatform::checkCollisionAgainst(CThing *_thisThing, int _frames)
|
|||||||
{
|
{
|
||||||
_thisThing->setHasPlatformCollided( true );
|
_thisThing->setHasPlatformCollided( true );
|
||||||
|
|
||||||
_thisThing->setCentreCollision( true );
|
|
||||||
|
|
||||||
_thisThing->setNewCollidedPos( thatPos );
|
_thisThing->setNewCollidedPos( thatPos );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_thisThing->setCentreCollision( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_thisThing->setCentreCollision( false );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,6 @@ public:
|
|||||||
int getCollisionRadius() {return m_collisionRadius;}
|
int getCollisionRadius() {return m_collisionRadius;}
|
||||||
CRECT getCollisionArea() {return m_collisionArea;}
|
CRECT getCollisionArea() {return m_collisionArea;}
|
||||||
s16 getCollisionAngle() {return m_collisionAngle;}
|
s16 getCollisionAngle() {return m_collisionAngle;}
|
||||||
bool getCentreCollision() {return m_centreCollision;}
|
|
||||||
DVECTOR getNewCollidedPos() {return m_newCollidedPos;}
|
DVECTOR getNewCollidedPos() {return m_newCollidedPos;}
|
||||||
DVECTOR getCollisionSize() {return m_collisionSize;}
|
DVECTOR getCollisionSize() {return m_collisionSize;}
|
||||||
|
|
||||||
@ -156,7 +155,6 @@ public:
|
|||||||
virtual bool getHasPlatformCollided() {return false;}
|
virtual bool getHasPlatformCollided() {return false;}
|
||||||
virtual s32 getNewYPos( CThing *_thisThing );
|
virtual s32 getNewYPos( CThing *_thisThing );
|
||||||
void setNewCollidedPos(DVECTOR newPos) {m_newCollidedPos = newPos;}
|
void setNewCollidedPos(DVECTOR newPos) {m_newCollidedPos = newPos;}
|
||||||
void setCentreCollision(bool newCentreCollision) {m_centreCollision = newCentreCollision;}
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Loading…
Reference in New Issue
Block a user