ksys/phys: Add AlsoLockWorld to improve call site readability

This commit is contained in:
Léo Lam 2022-06-22 02:01:43 +02:00
parent a68d10ec47
commit c423a56a63
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
3 changed files with 17 additions and 15 deletions

View File

@ -83137,8 +83137,8 @@ Address,Quality,Size,Name
0x0000007100f96700,O,000068,_ZNK4ksys4phys9RigidBody9onImpulseEPS1_f 0x0000007100f96700,O,000068,_ZNK4ksys4phys9RigidBody9onImpulseEPS1_f
0x0000007100f96744,O,000176,_ZNK4ksys4phys9RigidBody14getAabbInLocalEPN4sead9BoundBox3IfEE 0x0000007100f96744,O,000176,_ZNK4ksys4phys9RigidBody14getAabbInLocalEPN4sead9BoundBox3IfEE
0x0000007100f967f4,m,000428,_ZNK4ksys4phys9RigidBody14getAabbInWorldEPN4sead9BoundBox3IfEE 0x0000007100f967f4,m,000428,_ZNK4ksys4phys9RigidBody14getAabbInWorldEPN4sead9BoundBox3IfEE
0x0000007100f969a0,O,000072,_ZN4ksys4phys9RigidBody4lockEb 0x0000007100f969a0,O,000072,_ZN4ksys4phys9RigidBody4lockENS1_13AlsoLockWorldE
0x0000007100f969e8,O,000088,_ZN4ksys4phys9RigidBody6unlockEb 0x0000007100f969e8,O,000088,_ZN4ksys4phys9RigidBody6unlockENS1_13AlsoLockWorldE
0x0000007100f96a40,O,000012,_ZNK4ksys4phys9RigidBody9getMotionEv 0x0000007100f96a40,O,000012,_ZNK4ksys4phys9RigidBody9getMotionEv
0x0000007100f96a4c,U,000076,phys::RigidBody::x_123 0x0000007100f96a4c,U,000076,phys::RigidBody::x_123
0x0000007100f96a98,O,000188,_ZN4ksys4phys9RigidBody20setEntityMotionFlag1Eb 0x0000007100f96a98,O,000188,_ZN4ksys4phys9RigidBody20setEntityMotionFlag1Eb

Can't render this file because it is too large.

View File

@ -185,7 +185,7 @@ void RigidBody::addToWorld() {
// debug code that survived because mFlags is atomic // debug code that survived because mFlags is atomic
static_cast<void>(isAddedToWorld()); static_cast<void>(isAddedToWorld());
auto lock = makeScopedLock(false); auto lock = makeScopedLock(AlsoLockWorld::No);
if (mMotionAccessor) { if (mMotionAccessor) {
const bool use_system_time_factor = hasFlag(Flag::UseSystemTimeFactor); const bool use_system_time_factor = hasFlag(Flag::UseSystemTimeFactor);
@ -251,7 +251,7 @@ bool RigidBody::removeFromWorldAndResetLinks() {
// debug code that survived because mFlags is atomic? // debug code that survived because mFlags is atomic?
static_cast<void>(mFlags.getDirect()); static_cast<void>(mFlags.getDirect());
auto lock = makeScopedLock(false); auto lock = makeScopedLock(AlsoLockWorld::No);
bool result = true; bool result = true;
@ -1641,7 +1641,7 @@ float RigidBody::getColImpulseScale() const {
} }
bool RigidBody::hasConstraintWithUserData() { bool RigidBody::hasConstraintWithUserData() {
auto lock = makeScopedLock(true); auto lock = makeScopedLock(AlsoLockWorld::Yes);
for (int i = 0, n = getHkBody()->getNumConstraints(); i < n; ++i) { for (int i = 0, n = getHkBody()->getNumConstraints(); i < n; ++i) {
auto* constraint = getHkBody()->getConstraint(i); auto* constraint = getHkBody()->getConstraint(i);
@ -1788,8 +1788,8 @@ void RigidBody::lock() {
mCS.lock(); mCS.lock();
} }
void RigidBody::lock(bool also_lock_world) { void RigidBody::lock(AlsoLockWorld also_lock_world) {
if (also_lock_world) if (bool(also_lock_world))
System::instance()->lockWorld(getLayerType()); System::instance()->lockWorld(getLayerType());
lock(); lock();
} }
@ -1798,9 +1798,9 @@ void RigidBody::unlock() {
mCS.unlock(); mCS.unlock();
} }
void RigidBody::unlock(bool also_unlock_world) { void RigidBody::unlock(AlsoLockWorld also_unlock_world) {
unlock(); unlock();
if (also_unlock_world) if (bool(also_unlock_world))
System::instance()->unlockWorld(getLayerType()); System::instance()->unlockWorld(getLayerType());
} }

View File

@ -125,9 +125,11 @@ public:
_80000 = 1 << 19, _80000 = 1 << 19,
}; };
enum class AlsoLockWorld : bool { Yes = true, No = false };
class ScopedLock { class ScopedLock {
public: public:
explicit ScopedLock(RigidBody* body, bool also_lock_world) explicit ScopedLock(RigidBody* body, AlsoLockWorld also_lock_world)
: mBody(body), mAlsoLockWorld(also_lock_world) { : mBody(body), mAlsoLockWorld(also_lock_world) {
mBody->lock(also_lock_world); mBody->lock(also_lock_world);
} }
@ -137,7 +139,7 @@ public:
private: private:
RigidBody* mBody; RigidBody* mBody;
bool mAlsoLockWorld; AlsoLockWorld mAlsoLockWorld;
}; };
RigidBody(Type type, ContactLayerType layer_type, hkpRigidBody* hk_body, RigidBody(Type type, ContactLayerType layer_type, hkpRigidBody* hk_body,
@ -507,13 +509,13 @@ public:
void x_114(bool unk); void x_114(bool unk);
void lock(); void lock();
void lock(bool also_lock_world); void lock(AlsoLockWorld also_lock_world);
void unlock(); void unlock();
void unlock(bool also_unlock_world); void unlock(AlsoLockWorld also_unlock_world);
[[nodiscard]] auto makeScopedLock(bool also_lock_world) { [[nodiscard]] auto makeScopedLock(AlsoLockWorld also_lock_world) {
return ScopedLock(this, also_lock_world); return ScopedLock(this, also_lock_world);
} }
[[nodiscard]] auto makeScopedLock() { return makeScopedLock(isAddedToWorld()); } [[nodiscard]] auto makeScopedLock() { return makeScopedLock(AlsoLockWorld(isAddedToWorld())); }
hkpMotion* getMotion() const; hkpMotion* getMotion() const;