1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-25 16:43:33 +00:00

Do not store btTransform into Object class: reduce its size by 104 bytes

This commit is contained in:
fredzio 2021-07-17 08:55:39 +02:00
parent 62ef708910
commit f02d01ef0c
3 changed files with 16 additions and 10 deletions

View File

@ -28,7 +28,7 @@ namespace MWPhysics
setScale(ptr.getCellRef().getScale()); setScale(ptr.getCellRef().getScale());
setRotation(rotation); setRotation(rotation);
setOrigin(Misc::Convert::toBullet(ptr.getRefData().getPosition().asVec3())); updatePosition();
commitPositionChange(); commitPositionChange();
mTaskScheduler->addCollisionObject(mCollisionObject.get(), collisionType, CollisionType_Actor|CollisionType_HeightMap|CollisionType_Projectile); mTaskScheduler->addCollisionObject(mCollisionObject.get(), collisionType, CollisionType_Actor|CollisionType_HeightMap|CollisionType_Projectile);
@ -54,14 +54,14 @@ namespace MWPhysics
void Object::setRotation(osg::Quat quat) void Object::setRotation(osg::Quat quat)
{ {
std::unique_lock<std::mutex> lock(mPositionMutex); std::unique_lock<std::mutex> lock(mPositionMutex);
mLocalTransform.setRotation(Misc::Convert::toBullet(quat)); mRotation = quat;
mTransformUpdatePending = true; mTransformUpdatePending = true;
} }
void Object::setOrigin(const btVector3& vec) void Object::updatePosition()
{ {
std::unique_lock<std::mutex> lock(mPositionMutex); std::unique_lock<std::mutex> lock(mPositionMutex);
mLocalTransform.setOrigin(vec); mPosition = mPtr.getRefData().getPosition().asVec3();
mTransformUpdatePending = true; mTransformUpdatePending = true;
} }
@ -75,7 +75,10 @@ namespace MWPhysics
} }
if (mTransformUpdatePending) if (mTransformUpdatePending)
{ {
mCollisionObject->setWorldTransform(mLocalTransform); btTransform trans;
trans.setOrigin(Misc::Convert::toBullet(mPosition));
trans.setRotation(Misc::Convert::toBullet(mRotation));
mCollisionObject->setWorldTransform(trans);
mTransformUpdatePending = false; mTransformUpdatePending = false;
} }
} }
@ -93,7 +96,10 @@ namespace MWPhysics
btTransform Object::getTransform() const btTransform Object::getTransform() const
{ {
std::unique_lock<std::mutex> lock(mPositionMutex); 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 bool Object::isSolid() const

View File

@ -16,7 +16,6 @@ namespace Resource
} }
class btCollisionObject; class btCollisionObject;
class btQuaternion;
class btVector3; class btVector3;
namespace MWPhysics namespace MWPhysics
@ -32,7 +31,7 @@ namespace MWPhysics
const Resource::BulletShapeInstance* getShapeInstance() const; const Resource::BulletShapeInstance* getShapeInstance() const;
void setScale(float scale); void setScale(float scale);
void setRotation(osg::Quat quat); void setRotation(osg::Quat quat);
void setOrigin(const btVector3& vec); void updatePosition();
void commitPositionChange(); void commitPositionChange();
btCollisionObject* getCollisionObject(); btCollisionObject* getCollisionObject();
const btCollisionObject* getCollisionObject() const; const btCollisionObject* getCollisionObject() const;
@ -51,7 +50,8 @@ namespace MWPhysics
std::map<int, osg::NodePath> mRecIndexToNodePath; std::map<int, osg::NodePath> mRecIndexToNodePath;
bool mSolid; bool mSolid;
btVector3 mScale; btVector3 mScale;
btTransform mLocalTransform; osg::Vec3f mPosition;
osg::Quat mRotation;
bool mScaleUpdatePending; bool mScaleUpdatePending;
bool mTransformUpdatePending; bool mTransformUpdatePending;
mutable std::mutex mPositionMutex; mutable std::mutex mPositionMutex;

View File

@ -658,7 +658,7 @@ namespace MWPhysics
ObjectMap::iterator found = mObjects.find(ptr); ObjectMap::iterator found = mObjects.find(ptr);
if (found != mObjects.end()) if (found != mObjects.end())
{ {
found->second->setOrigin(Misc::Convert::toBullet(ptr.getRefData().getPosition().asVec3())); found->second->updatePosition();
mTaskScheduler->updateSingleAabb(found->second); mTaskScheduler->updateSingleAabb(found->second);
return; return;
} }