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:
parent
62ef708910
commit
f02d01ef0c
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user