Helper methods for updateCollisionMask(), prevent water collision being removed twice, remove Bullet 2.8.5 methods

pull/113/head
Aussiemon 8 years ago
parent 7c2a088b34
commit b794aa7c2f

@ -47,7 +47,7 @@ Actor::Actor(const MWWorld::Ptr& ptr, osg::ref_ptr<const Resource::BulletShape>
updateScale();
updatePosition();
updateCollisionMask();
addCollisionMask(getCollisionMask());
}
Actor::~Actor()
@ -70,18 +70,26 @@ void Actor::enableCollisionBody(bool collision)
}
}
void Actor::addCollisionMask(int collisionMask)
{
mCollisionWorld->addCollisionObject(mCollisionObject.get(), CollisionType_Actor, collisionMask);
}
void Actor::updateCollisionMask()
{
if (mCollisionObject.get()->getWorldArrayIndex() >= 0)
{
mCollisionWorld->removeCollisionObject(mCollisionObject.get());
}
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;

@ -1463,14 +1463,14 @@ namespace MWPhysics
{
if (mWaterCollisionObject.get())
{
if (mWaterCollisionObject.get()->getWorldArrayIndex() >= 0)
{
mCollisionWorld->removeCollisionObject(mWaterCollisionObject.get());
}
mCollisionWorld->removeCollisionObject(mWaterCollisionObject.get());
}
if (!mWaterEnabled)
{
mWaterCollisionObject.reset();
return;
}
mWaterCollisionObject.reset(new btCollisionObject());
mWaterCollisionShape.reset(new btStaticPlaneShape(btVector3(0,0,1), mWaterHeight));

Loading…
Cancel
Save