1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-05 22:19:42 +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 8861d53809
commit 20aefb5f5f
3 changed files with 20 additions and 14 deletions

View file

@ -27,8 +27,8 @@ namespace MWPhysics
mCollisionObject->setUserPointer(this);
setScale(ptr.getCellRef().getScale());
setRotation(Misc::Convert::toBullet(ptr.getRefData().getBaseNode()->getAttitude()));
setOrigin(Misc::Convert::toBullet(ptr.getRefData().getPosition().asVec3()));
setRotation(ptr.getRefData().getBaseNode()->getAttitude());
updatePosition();
commitPositionChange();
mTaskScheduler->addCollisionObject(mCollisionObject.get(), collisionType, CollisionType_Actor|CollisionType_HeightMap|CollisionType_Projectile);
@ -51,17 +51,17 @@ namespace MWPhysics
mScaleUpdatePending = true;
}
void Object::setRotation(const btQuaternion& quat)
void Object::setRotation(const osg::Quat& quat)
{
std::unique_lock<std::mutex> lock(mPositionMutex);
mLocalTransform.setRotation(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

View file

@ -16,7 +16,6 @@ namespace Resource
}
class btCollisionObject;
class btQuaternion;
class btVector3;
namespace MWPhysics
@ -31,8 +30,8 @@ namespace MWPhysics
const Resource::BulletShapeInstance* getShapeInstance() const;
void setScale(float scale);
void setRotation(const btQuaternion& quat);
void setOrigin(const btVector3& vec);
void setRotation(const osg::Quat& quat);
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;

View file

@ -630,7 +630,7 @@ namespace MWPhysics
ObjectMap::iterator found = mObjects.find(ptr);
if (found != mObjects.end())
{
found->second->setRotation(Misc::Convert::toBullet(ptr.getRefData().getBaseNode()->getAttitude()));
found->second->setRotation(ptr.getRefData().getBaseNode()->getAttitude());
mTaskScheduler->updateSingleAabb(found->second);
return;
}
@ -651,7 +651,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;
}