From f3308d7bee2ba3a4d64a142e7a29a575243b3e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 22 Mar 2022 22:41:04 +0100 Subject: [PATCH] ksys/phys: Rename some RigidBody flags (add/remove from world) --- data/uking_functions.csv | 18 ++--- .../Physics/RigidBody/physRigidBody.cpp | 74 +++++++++---------- .../Physics/RigidBody/physRigidBody.h | 22 +++--- .../RigidBody/physRigidBodyMotionEntity.cpp | 26 +++---- .../RigidBody/physRigidBodyMotionSensor.cpp | 10 +-- .../Physics/RigidBody/physRigidBodySet.cpp | 16 ++-- .../Physics/RigidBody/physRigidBodySet.h | 6 +- .../Physics/System/physContactListener.cpp | 2 +- .../Physics/System/physInstanceSet.cpp | 4 +- .../System/physSensorContactListener.cpp | 2 +- 10 files changed, 91 insertions(+), 89 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 9e60e0eb..7317042d 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -82974,14 +82974,14 @@ Address,Quality,Size,Name 0x0000007100f8cc98,O,000172,_ZN4ksys4phys9RigidBody18initMotionAccessorERKNS0_22RigidBodyInstanceParamEPN4sead4HeapEb 0x0000007100f8cd44,O,000552,_ZN4ksys4phys9RigidBody12createMotionEP16hkpMaxSizeMotionNS0_10MotionTypeERKNS0_22RigidBodyInstanceParamE 0x0000007100f8cf6c,O,000052,_ZNK4ksys4phys9RigidBody13getHkBodyNameEv -0x0000007100f8cfa0,m,000424,_ZN4ksys4phys9RigidBody3x_0Ev +0x0000007100f8cfa0,m,000424,_ZN4ksys4phys9RigidBody10addToWorldEv 0x0000007100f8d148,O,000144,_ZN4ksys4phys9RigidBody13setMotionFlagENS1_10MotionFlagE 0x0000007100f8d1d8,O,000032,_ZNK4ksys4phys9RigidBody8isActiveEv -0x0000007100f8d1f8,O,000012,_ZNK4ksys4phys9RigidBody10isFlag8SetEv -0x0000007100f8d204,O,000012,_ZNK4ksys4phys9RigidBody16isMotionFlag1SetEv -0x0000007100f8d210,O,000012,_ZNK4ksys4phys9RigidBody16isMotionFlag2SetEv -0x0000007100f8d21c,O,000236,_ZN4ksys4phys9RigidBody27addOrRemoveRigidBodyToWorldEv -0x0000007100f8d308,O,000888,_ZN4ksys4phys9RigidBody3x_6Ev +0x0000007100f8d1f8,O,000012,_ZNK4ksys4phys9RigidBody14isAddedToWorldEv +0x0000007100f8d204,O,000012,_ZNK4ksys4phys9RigidBody19isAddingBodyToWorldEv +0x0000007100f8d210,O,000012,_ZNK4ksys4phys9RigidBody23isRemovingBodyFromWorldEv +0x0000007100f8d21c,O,000236,_ZN4ksys4phys9RigidBody15removeFromWorldEv +0x0000007100f8d308,O,000888,_ZN4ksys4phys9RigidBody28removeFromWorldAndResetLinksEv 0x0000007100f8d680,O,000140,_ZNK4ksys4phys9RigidBody23getEntityMotionAccessorEv 0x0000007100f8d70c,O,000156,_ZNK4ksys4phys9RigidBody18getLinkedRigidBodyEv 0x0000007100f8d7a8,O,000152,_ZNK4ksys4phys9RigidBody20resetLinkedRigidBodyEv @@ -83514,9 +83514,9 @@ Address,Quality,Size,Name 0x0000007100fa970c,O,000056,_ZN4ksys4phys12RigidBodySet23disableAllContactLayersEv 0x0000007100fa9744,O,000112,_ZN4ksys4phys12RigidBodySet28setScaleAndUpdateImmediatelyEf 0x0000007100fa97b4,O,000072,_ZN4ksys4phys12RigidBodySet8setScaleEf -0x0000007100fa97fc,O,000056,_ZN4ksys4phys12RigidBodySet17callRigidBody_x_0Ev -0x0000007100fa9834,O,000056,_ZN4ksys4phys12RigidBodySet29addOrRemoveRigidBodiesToWorldEv -0x0000007100fa986c,O,000084,_ZN4ksys4phys12RigidBodySet23areAllTrueRigidBody_x_6Ev +0x0000007100fa97fc,O,000056,_ZN4ksys4phys12RigidBodySet10addToWorldEv +0x0000007100fa9834,O,000056,_ZN4ksys4phys12RigidBodySet15removeFromWorldEv +0x0000007100fa986c,O,000084,_ZN4ksys4phys12RigidBodySet28removeFromWorldAndResetLinksEv 0x0000007100fa98c0,O,000120,_ZN4ksys4phys12RigidBodySet23hasNoRigidBodyWithFlag8Eb 0x0000007100fa9938,O,000072,_ZN4ksys4phys12RigidBodySet17callRigidBody_x_7Eh 0x0000007100fa9980,U,000004,SphereRigidBody::make diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp index 46d6a9d2..0b1965eb 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp @@ -196,9 +196,9 @@ hkpCollidable* RigidBody::getCollidable() const { } // NON_MATCHING: ldr w8, [x20, #0x68] should be ldr w8, [x22] (equivalent) -void RigidBody::x_0() { +void RigidBody::addToWorld() { // debug code that survived because mFlags is atomic - static_cast(isFlag8Set()); + static_cast(isAddedToWorld()); auto lock = makeScopedLock(false); @@ -213,11 +213,11 @@ void RigidBody::x_0() { } } - if (isMotionFlag2Set()) { - mMotionFlags.reset(MotionFlag::_2); - mMotionFlags.set(MotionFlag::_1); - } else if (!isMotionFlag1Set()) { - setMotionFlag(MotionFlag::_1); + if (isRemovingBodyFromWorld()) { + mMotionFlags.reset(MotionFlag::BodyRemovalRequested); + mMotionFlags.set(MotionFlag::BodyAddRequested); + } else if (!isAddingBodyToWorld()) { + setMotionFlag(MotionFlag::BodyAddRequested); } } @@ -236,33 +236,33 @@ bool RigidBody::isActive() const { return mHkBody->isActive(); } -bool RigidBody::isFlag8Set() const { +bool RigidBody::isAddedToWorld() const { return mFlags.isOn(Flag::_8); } -bool RigidBody::isMotionFlag1Set() const { - return mMotionFlags.isOn(MotionFlag::_1); +bool RigidBody::isAddingBodyToWorld() const { + return mMotionFlags.isOn(MotionFlag::BodyAddRequested); } -bool RigidBody::isMotionFlag2Set() const { - return mMotionFlags.isOn(MotionFlag::_2); +bool RigidBody::isRemovingBodyFromWorld() const { + return mMotionFlags.isOn(MotionFlag::BodyRemovalRequested); } -void RigidBody::addOrRemoveRigidBodyToWorld() { +void RigidBody::removeFromWorld() { // debug code that survived because mFlags is atomic? static_cast(mFlags.getDirect()); auto lock = sead::makeScopedLock(mCS); - if (mMotionFlags.isOn(MotionFlag::_1)) { - mMotionFlags.reset(MotionFlag::_1); - mMotionFlags.set(MotionFlag::_2); - } else if (isFlag8Set()) { - setMotionFlag(MotionFlag::_2); + if (mMotionFlags.isOn(MotionFlag::BodyAddRequested)) { + mMotionFlags.reset(MotionFlag::BodyAddRequested); + mMotionFlags.set(MotionFlag::BodyRemovalRequested); + } else if (isAddedToWorld()) { + setMotionFlag(MotionFlag::BodyRemovalRequested); } } -bool RigidBody::x_6() { +bool RigidBody::removeFromWorldAndResetLinks() { // debug code that survived because mFlags is atomic? static_cast(mFlags.getDirect()); @@ -270,15 +270,15 @@ bool RigidBody::x_6() { bool result = true; - if (isFlag8Set()) { + if (isAddedToWorld()) { mFlags.reset(Flag::_20); - if (mMotionFlags.isOn(MotionFlag::_1)) { - mMotionFlags.reset(MotionFlag::_1); - mMotionFlags.set(MotionFlag::_2); + if (mMotionFlags.isOn(MotionFlag::BodyAddRequested)) { + mMotionFlags.reset(MotionFlag::BodyAddRequested); + mMotionFlags.set(MotionFlag::BodyRemovalRequested); } - setMotionFlag(MotionFlag::_2); + setMotionFlag(MotionFlag::BodyRemovalRequested); result = false; } else if (mFlags.isOn(Flag::UpdateRequested)) { System::instance()->getRigidBodyRequestMgr()->pushRigidBody(getLayerType(), this); @@ -452,7 +452,7 @@ void RigidBody::replaceMotionObject() { } void RigidBody::x_10() { - auto lock = makeScopedLock(isFlag8Set()); + auto lock = makeScopedLock(isAddedToWorld()); if (isEntity()) { if (mMotionAccessor && @@ -476,18 +476,18 @@ void RigidBody::x_10() { void RigidBody::setCollisionInfo(CollisionInfo* info) { if (mCollisionInfo != info) { - if (mCollisionInfo && isFlag8Set()) + if (mCollisionInfo && isAddedToWorld()) System::instance()->removeRigidBodyFromContactSystem(this); mCollisionInfo = info; } - if (isFlag8Set() && mCollisionInfo && !mCollisionInfo->isLinked()) + if (isAddedToWorld() && mCollisionInfo && !mCollisionInfo->isLinked()) System::instance()->registerCollisionInfo(mCollisionInfo); } void RigidBody::setContactPointInfo(ContactPointInfo* info) { mContactPointInfo = info; - if (isFlag8Set() && mContactPointInfo && !mContactPointInfo->isLinked()) + if (isAddedToWorld() && mContactPointInfo && !mContactPointInfo->isLinked()) System::instance()->registerContactPointInfo(info); } @@ -544,7 +544,7 @@ void RigidBody::resetFrozenState() { } void RigidBody::updateCollidableQualityType(bool high_quality) { - auto lock = makeScopedLock(isFlag8Set()); + auto lock = makeScopedLock(isAddedToWorld()); if (isCharacterControllerType()) { setCollidableQualityType(HK_COLLIDABLE_QUALITY_CHARACTER); @@ -712,10 +712,10 @@ static void resetCollisionFilterInfoForListShapes(const hkpShape* shape) { void RigidBody::setCollisionFilterInfo(u32 info) { const auto current_layer = getContactLayer(); - const auto lock = makeScopedLock(isFlag8Set()); + const auto lock = makeScopedLock(isAddedToWorld()); if (getCollisionFilterInfo() != info) { - if (isFlag8Set()) { + if (isAddedToWorld()) { if (int(current_layer) != getContactLayer(EntityCollisionMask(info))) System::instance()->removeRigidBodyFromContactSystem(this); } @@ -724,7 +724,7 @@ void RigidBody::setCollisionFilterInfo(u32 info) { if (auto* shape = mHkBody->getCollidableRw()->getShape()) resetCollisionFilterInfoForListShapes(shape); - if (isFlag8Set()) + if (isAddedToWorld()) setMotionFlag(MotionFlag::_8000); } } @@ -917,7 +917,7 @@ bool RigidBody::isTransformDirty() const { } void RigidBody::updateShape() { - if (isFlag8Set()) { + if (isAddedToWorld()) { setMotionFlag(MotionFlag::DirtyShape); return; } @@ -955,7 +955,7 @@ void RigidBody::changeMotionType(MotionType motion_type) { if (getMotionType() == motion_type) return; - if (isFlag8Set()) { + if (isAddedToWorld()) { switch (motion_type) { case MotionType::Dynamic: if (isEntity()) { @@ -1718,7 +1718,7 @@ void RigidBody::clearFlag2000000(bool clear) { mFlags.change(Flag::_2000000, !clear); - if (isFlag8Set()) + if (isAddedToWorld()) setMotionFlag(MotionFlag::_10000); else updateDeactivation(); @@ -1730,7 +1730,7 @@ void RigidBody::clearFlag4000000(bool clear) { mFlags.change(Flag::_4000000, !clear); - if (isFlag8Set()) + if (isAddedToWorld()) setMotionFlag(MotionFlag::_10000); else updateDeactivation(); @@ -1742,7 +1742,7 @@ void RigidBody::clearFlag8000000(bool clear) { mFlags.change(Flag::_8000000, !clear); - if (isFlag8Set()) + if (isAddedToWorld()) setMotionFlag(MotionFlag::_10000); else updateDeactivation(); diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.h b/src/KingSystem/Physics/RigidBody/physRigidBody.h index 88a56ec2..3ecde253 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.h @@ -101,8 +101,10 @@ public: }; enum class MotionFlag { - _1 = 1 << 0, - _2 = 1 << 1, + /// Whether somebody requested that the rigid body be added to the world. + BodyAddRequested = 1 << 0, + /// Whether somebody requested that the rigid body be removed from the world. + BodyRemovalRequested = 1 << 1, Dynamic = 1 << 2, Keyframed = 1 << 3, Fixed = 1 << 4, @@ -154,15 +156,15 @@ public: sead::SafeString getHkBodyName() const; hkpCollidable* getCollidable() const; - void x_0(); - + void addToWorld(); bool isActive() const; - - bool isFlag8Set() const; - bool isMotionFlag1Set() const; - bool isMotionFlag2Set() const; - void addOrRemoveRigidBodyToWorld(); - bool x_6(); + bool isAddedToWorld() const; + bool isAddingBodyToWorld() const; + bool isRemovingBodyFromWorld() const; + void removeFromWorld(); + /// Returns true if the system has finished removing the body from the world and + /// resetting body/accessor links, false otherwise. + bool removeFromWorldAndResetLinks(); /// Get the motion accessor if it is a RigidBodyMotionEntity. Returns nullptr otherwise. RigidBodyMotionEntity* getEntityMotionAccessor() const; diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyMotionEntity.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyMotionEntity.cpp index c0532fb6..ee1b3289 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyMotionEntity.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyMotionEntity.cpp @@ -47,7 +47,7 @@ void RigidBodyMotionEntity::setTransform(const sead::Matrix34f& mtx, toHkTransform(&transform, mtx); mMotion->setTransform(transform); - if (mBody->isFlag8Set()) { + if (mBody->isAddedToWorld()) { setMotionFlag(RigidBody::MotionFlag::DirtyTransform); } else { getHkBody()->getMotion()->setTransform(transform); @@ -71,7 +71,7 @@ void RigidBodyMotionEntity::setPosition(const sead::Vector3f& position, mMotion->setPositionAndRotation(hk_position, hk_rotate); - if (mBody->isFlag8Set()) { + if (mBody->isAddedToWorld()) { setMotionFlag(RigidBody::MotionFlag::DirtyTransform); } else { getHkBody()->getMotion()->setPositionAndRotation(hk_position, hk_rotate); @@ -113,7 +113,7 @@ void RigidBodyMotionEntity::setCenterOfMassInLocal(const sead::Vector3f& center) const auto hk_center = toHkVec4(center); mMotion->setCenterOfMassInLocal(hk_center); - if (mBody->isFlag8Set()) + if (mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::DirtyCenterOfMassLocal); else getHkBody()->setCenterOfMassLocal(hk_center); @@ -280,7 +280,7 @@ void RigidBodyMotionEntity::setMass(float mass) { } mMotion->setMass(mass); - if (mBody->isFlag8Set()) + if (mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::DirtyMass); else if (mBody->getMotionType() == MotionType::Dynamic) getHkBody()->getMotion()->setMass(mass); @@ -359,7 +359,7 @@ void RigidBodyMotionEntity::setInertiaLocal(const sead::Vector3f& inertia) { // Some properties are not automatically transferred over. Copy them manually. mMotion->setGravityFactor(gravity_factor); mMotion->setMass(mass); - if (mBody->isFlag8Set()) + if (mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::DirtyMiscState); else if (mBody->getMotionType() == MotionType::Dynamic) updateRigidBodyMotionExceptState(); @@ -371,7 +371,7 @@ void RigidBodyMotionEntity::setInertiaLocal(const sead::Vector3f& inertia) { hk_inertia.m_col2.set(0, 0, inertia.z); mMotion->setInertiaLocal(hk_inertia); - if (mBody->isFlag8Set()) { + if (mBody->isAddedToWorld()) { setMotionFlag(RigidBody::MotionFlag::DirtyInertiaLocal); } else if (mBody->getMotionType() == MotionType::Dynamic && !mBody->isCharacterControllerType()) { @@ -401,7 +401,7 @@ void RigidBodyMotionEntity::setLinearDamping(float value) { } mMotion->setLinearDamping(value); - if (mBody->isFlag8Set()) + if (mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::DirtyDampingOrGravityFactor); else if (mBody->getMotionType() == MotionType::Dynamic) getHkBody()->setLinearDamping(getTimeFactor() * value); @@ -421,7 +421,7 @@ void RigidBodyMotionEntity::setAngularDamping(float value) { } mMotion->setAngularDamping(value); - if (mBody->isFlag8Set()) + if (mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::DirtyDampingOrGravityFactor); else if (mBody->getMotionType() == MotionType::Dynamic) getHkBody()->setAngularDamping(getTimeFactor() * value); @@ -441,7 +441,7 @@ void RigidBodyMotionEntity::setGravityFactor(float value) { } mMotion->setGravityFactor(value); - if (mBody->isFlag8Set()) + if (mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::DirtyDampingOrGravityFactor); else if (mBody->getMotionType() == MotionType::Dynamic) getHkBody()->setGravityFactor(value); @@ -581,7 +581,7 @@ bool RigidBodyMotionEntity::registerAccessor(RigidBodyMotionSensor* accessor) { mLinkedAccessors.pushBack(accessor); - if (mFlags.isOff(Flag::_2) && mBody->isFlag8Set()) + if (mFlags.isOff(Flag::_2) && mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::_80000); return true; @@ -595,7 +595,7 @@ bool RigidBodyMotionEntity::deregisterAccessor(RigidBodyMotionSensor* accessor) return false; // Found the accessor -- now we just need to erase it. - if (mFlags.isOn(Flag::_2) && mBody->isFlag8Set()) + if (mFlags.isOn(Flag::_2) && mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::_80000); mLinkedAccessors.erase(idx); return true; @@ -611,7 +611,7 @@ bool RigidBodyMotionEntity::deregisterAllAccessors() { mLinkedAccessors.back()->resetLinkedRigidBody(); } - if (mFlags.isOn(Flag::_2) && mBody->isFlag8Set()) + if (mFlags.isOn(Flag::_2) && mBody->isAddedToWorld()) setMotionFlag(RigidBody::MotionFlag::_80000); return true; } @@ -621,7 +621,7 @@ void RigidBodyMotionEntity::copyTransformToAllLinkedBodies() { for (int i = 0, n = mLinkedAccessors.size(); i < n; ++i) { auto* body = mLinkedAccessors[i]->getBody(); - if (!body->isFlag8Set() && body->isMotionFlag1Set()) { + if (!body->isAddedToWorld() && body->isAddingBodyToWorld()) { sead::Matrix34f transform; mBody->getTransform(&transform); body->setTransform(transform, true); diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyMotionSensor.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyMotionSensor.cpp index d4c886e4..a31f019f 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyMotionSensor.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyMotionSensor.cpp @@ -21,7 +21,7 @@ bool RigidBodyMotionSensor::init(const RigidBodyInstanceParam& params, sead::Hea } KSYS_ALWAYS_INLINE void RigidBodyMotionSensor::setTransformImpl(const sead::Matrix34f& mtx) { - if (mBody->isFlag8Set()) { // flag 8 = block updates? + if (mBody->isAddedToWorld()) { setMotionFlag(RigidBody::MotionFlag::DirtyTransform); return; } @@ -183,7 +183,7 @@ void RigidBodyMotionSensor::getTransform(sead::Matrix34f* mtx) { void RigidBodyMotionSensor::setCenterOfMassInLocal(const sead::Vector3f& center) { mCenterOfMassInLocal.e = center.e; - if (mBody->isFlag8Set()) { + if (mBody->isAddedToWorld()) { setMotionFlag(RigidBody::MotionFlag::DirtyCenterOfMassLocal); return; } @@ -270,7 +270,7 @@ float RigidBodyMotionSensor::getMaxAngularVelocity() { } void RigidBodyMotionSensor::setLinkedRigidBody(RigidBody* body) { - auto lock = mBody->makeScopedLock(mBody->isFlag8Set()); + auto lock = mBody->makeScopedLock(mBody->isAddedToWorld()); if (mLinkedRigidBody == body) return; @@ -302,7 +302,7 @@ void RigidBodyMotionSensor::resetLinkedRigidBody() { if (!mLinkedRigidBody) return; - auto lock = mBody->makeScopedLock(mBody->isFlag8Set()); + auto lock = mBody->makeScopedLock(mBody->isAddedToWorld()); if (mLinkedRigidBody) { mLinkedRigidBody->getEntityMotionAccessorForSensor()->deregisterAccessor(this); mLinkedRigidBody = nullptr; @@ -319,7 +319,7 @@ bool RigidBodyMotionSensor::isFlag40000Set() const { } void RigidBodyMotionSensor::copyMotionFromLinkedRigidBody() { - auto lock = mBody->makeScopedLock(mBody->isFlag8Set()); + auto lock = mBody->makeScopedLock(mBody->isAddedToWorld()); auto* accessor = mLinkedRigidBody->getEntityMotionAccessorForSensor(); auto* linked_hk_body = mLinkedRigidBody->getHkBody(); diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodySet.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodySet.cpp index 6e96750a..dffca261 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodySet.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodySet.cpp @@ -144,28 +144,28 @@ void RigidBodySet::setScale(float scale) { body.setScale(scale); } -void RigidBodySet::callRigidBody_x_0() { +void RigidBodySet::addToWorld() { for (auto& body : mRigidBodies) - body.x_0(); + body.addToWorld(); } -void RigidBodySet::addOrRemoveRigidBodiesToWorld() { +void RigidBodySet::removeFromWorld() { for (auto& body : mRigidBodies) - body.addOrRemoveRigidBodyToWorld(); + body.removeFromWorld(); } -bool RigidBodySet::areAllTrueRigidBody_x_6() { +bool RigidBodySet::removeFromWorldAndResetLinks() { bool ok = true; for (auto& body : mRigidBodies) - ok &= body.x_6(); + ok &= body.removeFromWorldAndResetLinks(); return ok; } bool RigidBodySet::hasNoRigidBodyWithFlag8(bool require_motion_flag_1_to_be_unset) { for (auto it = mRigidBodies.begin(), end = mRigidBodies.end(); it != end; ++it) { - if (it->isFlag8Set()) + if (it->isAddedToWorld()) return false; - if (require_motion_flag_1_to_be_unset && it->isMotionFlag1Set()) + if (require_motion_flag_1_to_be_unset && it->isAddingBodyToWorld()) return false; } return true; diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodySet.h b/src/KingSystem/Physics/RigidBody/physRigidBodySet.h index 8de77946..ae352746 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodySet.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBodySet.h @@ -58,9 +58,9 @@ public: void setScaleAndUpdateImmediately(float scale); void setScale(float scale); - void callRigidBody_x_0(); - void addOrRemoveRigidBodiesToWorld(); - bool areAllTrueRigidBody_x_6(); + void addToWorld(); + void removeFromWorld(); + bool removeFromWorldAndResetLinks(); bool hasNoRigidBodyWithFlag8(bool require_motion_flag_1_to_be_unset); void callRigidBody_x_7(u8 type); diff --git a/src/KingSystem/Physics/System/physContactListener.cpp b/src/KingSystem/Physics/System/physContactListener.cpp index 8e436f4b..3bf79d9e 100644 --- a/src/KingSystem/Physics/System/physContactListener.cpp +++ b/src/KingSystem/Physics/System/physContactListener.cpp @@ -368,7 +368,7 @@ void ContactListener::handleCollisionAdded(const hkpCollisionEvent& event, Rigid const auto j = int(layer_b - mLayerBase); if (areContactsTrackedForLayerPair(i, j)) { auto* layer_col_info = getContactLayerCollisionInfo(i, j); - if (body_a->isFlag8Set() && body_b->isFlag8Set()) { + if (body_a->isAddedToWorld() && body_b->isAddedToWorld()) { const auto layer_a_ = int(layer_a); const auto tracked_layer = layer_col_info->getLayer(); const bool body_a_first = layer_a_ == tracked_layer; diff --git a/src/KingSystem/Physics/System/physInstanceSet.cpp b/src/KingSystem/Physics/System/physInstanceSet.cpp index 6be16311..37ca09db 100644 --- a/src/KingSystem/Physics/System/physInstanceSet.cpp +++ b/src/KingSystem/Physics/System/physInstanceSet.cpp @@ -81,11 +81,11 @@ u32 InstanceSet::sub_7100FB9C2C() const { void InstanceSet::sub_7100FBA9BC() { for (auto& rb : mRigidBodySets) { - rb.callRigidBody_x_0(); + rb.addToWorld(); } for (auto& body : mList) { - body->x_0(); + body->addToWorld(); } if (mCollisionController != nullptr) diff --git a/src/KingSystem/Physics/System/physSensorContactListener.cpp b/src/KingSystem/Physics/System/physSensorContactListener.cpp index bf6f35c1..c0af4c2d 100644 --- a/src/KingSystem/Physics/System/physSensorContactListener.cpp +++ b/src/KingSystem/Physics/System/physSensorContactListener.cpp @@ -40,7 +40,7 @@ void SensorContactListener::handleCollisionAdded(const hkpCollisionEvent& event, if (areContactsTrackedForLayerPair(rlayer_a, rlayer_b)) { auto* layer_col_info = getContactLayerCollisionInfo(rlayer_a, rlayer_b); - if (body_a->isFlag8Set() && body_b->isFlag8Set()) { + if (body_a->isAddedToWorld() && body_b->isAddedToWorld()) { const auto layer_a_ = int(layer_a); const auto tracked_layer = layer_col_info->getLayer(); const bool body_a_first = layer_a_ == tracked_layer;