summaryrefslogtreecommitdiff
path: root/src/KingSystem/Physics
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-03-22 22:41:04 +0100
committerLéo Lam <leo@leolam.fr>2022-03-22 23:14:19 +0100
commitf3308d7bee2ba3a4d64a142e7a29a575243b3e4a (patch)
tree8a6eec8ab659e74bcc2efbfe167df01630fd0378 /src/KingSystem/Physics
parentc97cf995efbcee49cdda4f4b4cb4921f63670f3f (diff)
ksys/phys: Rename some RigidBody flags (add/remove from world)
Diffstat (limited to 'src/KingSystem/Physics')
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBody.cpp74
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBody.h22
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodyMotionEntity.cpp26
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodyMotionSensor.cpp10
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodySet.cpp16
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodySet.h6
-rw-r--r--src/KingSystem/Physics/System/physContactListener.cpp2
-rw-r--r--src/KingSystem/Physics/System/physInstanceSet.cpp4
-rw-r--r--src/KingSystem/Physics/System/physSensorContactListener.cpp2
9 files changed, 82 insertions, 80 deletions
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<void>(isFlag8Set());
+ static_cast<void>(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<void>(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<void>(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;