forked from teamnwah/openmw-tes3coop
Helper methods for updateCollisionMask(), prevent water collision being removed twice, remove Bullet 2.8.5 methods
This commit is contained in:
parent
7c2a088b34
commit
b794aa7c2f
3 changed files with 20 additions and 10 deletions
|
@ -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()
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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));
|
||||||
|
|
Loading…
Reference in a new issue