mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-06 00:55:50 +00:00
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
@ -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…
Reference in New Issue
Block a user