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

This commit is contained in:
Aussiemon 2016-12-16 12:22:07 -07:00
parent 7c2a088b34
commit b794aa7c2f
3 changed files with 20 additions and 10 deletions

View file

@ -47,7 +47,7 @@ Actor::Actor(const MWWorld::Ptr& ptr, osg::ref_ptr<const Resource::BulletShape>
updateScale(); updateScale();
updatePosition(); updatePosition();
updateCollisionMask(); addCollisionMask(getCollisionMask());
} }
Actor::~Actor() 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() 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; int collisionMask = CollisionType_World | CollisionType_HeightMap;
if (mExternalCollisionMode) if (mExternalCollisionMode)
collisionMask |= CollisionType_Actor | CollisionType_Projectile | CollisionType_Door; collisionMask |= CollisionType_Actor | CollisionType_Projectile | CollisionType_Door;
if (mCanWaterWalk) if (mCanWaterWalk)
collisionMask |= CollisionType_Water; collisionMask |= CollisionType_Water;
mCollisionWorld->addCollisionObject(mCollisionObject.get(), CollisionType_Actor, collisionMask); return collisionMask;
} }
void Actor::updatePosition() void Actor::updatePosition()

View file

@ -139,6 +139,8 @@ namespace MWPhysics
private: private:
/// Removes then re-adds the collision object to the dynamics world /// Removes then re-adds the collision object to the dynamics world
void updateCollisionMask(); void updateCollisionMask();
void addCollisionMask(int collisionMask);
int getCollisionMask();
bool mCanWaterWalk; bool mCanWaterWalk;
bool mWalkingOnWater; bool mWalkingOnWater;

View file

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