mirror of https://github.com/zeldaret/botw.git
ksys/phys: Rename some RigidBody flags (add/remove from world)
This commit is contained in:
parent
c97cf995ef
commit
f3308d7bee
|
@ -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
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue