forked from teamnwah/openmw-tes3coop
Merge pull request #1160 from Aussiemon/actorupdatecollision
[Do not merge yet] Added check before attempting to remove actor's collision object
This commit is contained in:
commit
913a8fe1bd
3 changed files with 18 additions and 2 deletions
|
@ -47,7 +47,7 @@ Actor::Actor(const MWWorld::Ptr& ptr, osg::ref_ptr<const Resource::BulletShape>
|
|||
updateScale();
|
||||
updatePosition();
|
||||
|
||||
updateCollisionMask();
|
||||
addCollisionMask(getCollisionMask());
|
||||
}
|
||||
|
||||
Actor::~Actor()
|
||||
|
@ -70,15 +70,26 @@ void Actor::enableCollisionBody(bool collision)
|
|||
}
|
||||
}
|
||||
|
||||
void Actor::addCollisionMask(int collisionMask)
|
||||
{
|
||||
mCollisionWorld->addCollisionObject(mCollisionObject.get(), CollisionType_Actor, collisionMask);
|
||||
}
|
||||
|
||||
void Actor::updateCollisionMask()
|
||||
{
|
||||
mCollisionWorld->removeCollisionObject(mCollisionObject.get());
|
||||
addCollisionMask(getCollisionMask());
|
||||
}
|
||||
|
||||
int Actor::getCollisionMask()
|
||||
{
|
||||
int collisionMask = CollisionType_World | CollisionType_HeightMap;
|
||||
if (mExternalCollisionMode)
|
||||
collisionMask |= CollisionType_Actor | CollisionType_Projectile | CollisionType_Door;
|
||||
if (mCanWaterWalk)
|
||||
collisionMask |= CollisionType_Water;
|
||||
mCollisionWorld->addCollisionObject(mCollisionObject.get(), CollisionType_Actor, collisionMask);
|
||||
return collisionMask;
|
||||
|
||||
}
|
||||
|
||||
void Actor::updatePosition()
|
||||
|
|
|
@ -139,6 +139,8 @@ namespace MWPhysics
|
|||
private:
|
||||
/// Removes then re-adds the collision object to the dynamics world
|
||||
void updateCollisionMask();
|
||||
void addCollisionMask(int collisionMask);
|
||||
int getCollisionMask();
|
||||
|
||||
bool mCanWaterWalk;
|
||||
bool mWalkingOnWater;
|
||||
|
|
|
@ -1467,7 +1467,10 @@ namespace MWPhysics
|
|||
}
|
||||
|
||||
if (!mWaterEnabled)
|
||||
{
|
||||
mWaterCollisionObject.reset();
|
||||
return;
|
||||
}
|
||||
|
||||
mWaterCollisionObject.reset(new btCollisionObject());
|
||||
mWaterCollisionShape.reset(new btStaticPlaneShape(btVector3(0,0,1), mWaterHeight));
|
||||
|
|
Loading…
Reference in a new issue