mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 11:09:43 +00:00
Do not store btTransform into Object class: reduce its size by 104 bytes
This commit is contained in:
parent
62ef708910
commit
f02d01ef0c
3 changed files with 16 additions and 10 deletions
|
@ -28,7 +28,7 @@ namespace MWPhysics
|
|||
|
||||
setScale(ptr.getCellRef().getScale());
|
||||
setRotation(rotation);
|
||||
setOrigin(Misc::Convert::toBullet(ptr.getRefData().getPosition().asVec3()));
|
||||
updatePosition();
|
||||
commitPositionChange();
|
||||
|
||||
mTaskScheduler->addCollisionObject(mCollisionObject.get(), collisionType, CollisionType_Actor|CollisionType_HeightMap|CollisionType_Projectile);
|
||||
|
@ -54,14 +54,14 @@ namespace MWPhysics
|
|||
void Object::setRotation(osg::Quat quat)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mPositionMutex);
|
||||
mLocalTransform.setRotation(Misc::Convert::toBullet(quat));
|
||||
mRotation = quat;
|
||||
mTransformUpdatePending = true;
|
||||
}
|
||||
|
||||
void Object::setOrigin(const btVector3& vec)
|
||||
void Object::updatePosition()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mPositionMutex);
|
||||
mLocalTransform.setOrigin(vec);
|
||||
mPosition = mPtr.getRefData().getPosition().asVec3();
|
||||
mTransformUpdatePending = true;
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,10 @@ namespace MWPhysics
|
|||
}
|
||||
if (mTransformUpdatePending)
|
||||
{
|
||||
mCollisionObject->setWorldTransform(mLocalTransform);
|
||||
btTransform trans;
|
||||
trans.setOrigin(Misc::Convert::toBullet(mPosition));
|
||||
trans.setRotation(Misc::Convert::toBullet(mRotation));
|
||||
mCollisionObject->setWorldTransform(trans);
|
||||
mTransformUpdatePending = false;
|
||||
}
|
||||
}
|
||||
|
@ -93,7 +96,10 @@ namespace MWPhysics
|
|||
btTransform Object::getTransform() const
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mPositionMutex);
|
||||
return mLocalTransform;
|
||||
btTransform trans;
|
||||
trans.setOrigin(Misc::Convert::toBullet(mPosition));
|
||||
trans.setRotation(Misc::Convert::toBullet(mRotation));
|
||||
return trans;
|
||||
}
|
||||
|
||||
bool Object::isSolid() const
|
||||
|
|
|
@ -16,7 +16,6 @@ namespace Resource
|
|||
}
|
||||
|
||||
class btCollisionObject;
|
||||
class btQuaternion;
|
||||
class btVector3;
|
||||
|
||||
namespace MWPhysics
|
||||
|
@ -32,7 +31,7 @@ namespace MWPhysics
|
|||
const Resource::BulletShapeInstance* getShapeInstance() const;
|
||||
void setScale(float scale);
|
||||
void setRotation(osg::Quat quat);
|
||||
void setOrigin(const btVector3& vec);
|
||||
void updatePosition();
|
||||
void commitPositionChange();
|
||||
btCollisionObject* getCollisionObject();
|
||||
const btCollisionObject* getCollisionObject() const;
|
||||
|
@ -51,7 +50,8 @@ namespace MWPhysics
|
|||
std::map<int, osg::NodePath> mRecIndexToNodePath;
|
||||
bool mSolid;
|
||||
btVector3 mScale;
|
||||
btTransform mLocalTransform;
|
||||
osg::Vec3f mPosition;
|
||||
osg::Quat mRotation;
|
||||
bool mScaleUpdatePending;
|
||||
bool mTransformUpdatePending;
|
||||
mutable std::mutex mPositionMutex;
|
||||
|
|
|
@ -658,7 +658,7 @@ namespace MWPhysics
|
|||
ObjectMap::iterator found = mObjects.find(ptr);
|
||||
if (found != mObjects.end())
|
||||
{
|
||||
found->second->setOrigin(Misc::Convert::toBullet(ptr.getRefData().getPosition().asVec3()));
|
||||
found->second->updatePosition();
|
||||
mTaskScheduler->updateSingleAabb(found->second);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue