From 8dd5608b79cdb3c078ee453999334bb26da1346e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Mon, 17 Jan 2022 16:55:19 +0100 Subject: [PATCH] ksys/phys: Rename RigidBody "isMassScaling" mode to "isSensor" That also explains the comparison against 1 (ContactLayerType::Sensor) in the constructor. --- data/uking_functions.csv | 4 +-- .../Physics/RigidBody/physRigidBody.cpp | 27 +++++++++---------- .../Physics/RigidBody/physRigidBody.h | 16 +++++------ .../RigidBody/physRigidBodyMotionProxy.cpp | 3 +-- .../RigidBody/physRigidBodyRequestMgr.cpp | 6 ++--- .../RigidBody/physRigidBodyRequestMgr.h | 3 ++- .../Physics/System/physInstanceSet.cpp | 4 +-- 7 files changed, 31 insertions(+), 32 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index edde45df..724f4bab 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -82960,7 +82960,7 @@ Address,Quality,Size,Name 0x0000007100f8c4e4,U,000092, 0x0000007100f8c540,U,000008, 0x0000007100f8c548,U,000140, -0x0000007100f8c5d4,O,000492,_ZN4ksys4phys9RigidBodyC1ENS1_4TypeEjP12hkpRigidBodyRKN4sead14SafeStringBaseIcEEPNS5_4HeapEb +0x0000007100f8c5d4,O,000492,_ZN4ksys4phys9RigidBodyC1ENS1_4TypeENS0_16ContactLayerTypeEP12hkpRigidBodyRKN4sead14SafeStringBaseIcEEPNS6_4HeapEb 0x0000007100f8c7c0,O,000160,_ZN4ksys4phys9RigidBodyD1Ev 0x0000007100f8c860,O,000160,_ZThn32_N4ksys4phys9RigidBodyD1Ev 0x0000007100f8c900,O,000168,_ZN4ksys4phys9RigidBodyD0Ev @@ -83454,7 +83454,7 @@ Address,Quality,Size,Name 0x0000007100fa6a9c,U,000020, 0x0000007100fa6ab0,U,000020, 0x0000007100fa6ac4,U,000456,phys::RigidBodyRequestMgr::x_1 -0x0000007100fa6c8c,O,000188,_ZN4ksys4phys19RigidBodyRequestMgr13pushRigidBodyEiPNS0_9RigidBodyE +0x0000007100fa6c8c,O,000188,_ZN4ksys4phys19RigidBodyRequestMgr13pushRigidBodyENS0_16ContactLayerTypeEPNS0_9RigidBodyE 0x0000007100fa6d48,U,000100,phys::RigidBodyRequestMgr::x_3 0x0000007100fa6dac,U,000100,phys::RigidBodyRequestMgr::x_4 0x0000007100fa6e10,U,000084,phys::RigidBodyRequestMgr::x_5 diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp index 33b6687a..c6847c2a 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp @@ -25,7 +25,7 @@ static bool isVectorInvalid(const sead::Vector3f& vec) { return false; } -RigidBody::RigidBody(Type type, u32 mass_scaling, hkpRigidBody* hk_body, +RigidBody::RigidBody(Type type, ContactLayerType layer_type, hkpRigidBody* hk_body, const sead::SafeString& name, sead::Heap* heap, bool a7) : mCS(heap), mHkBody(hk_body), mRigidBodyAccessor(hk_body), mType(type) { if (!name.isEmpty()) { @@ -36,12 +36,12 @@ RigidBody::RigidBody(Type type, u32 mass_scaling, hkpRigidBody* hk_body, mHkBody->m_motion.m_motionState.m_timeFactor.setOne(); mHkBody->enableDeactivation(true); mHkBody->getCollidableRw()->m_allowedPenetrationDepth = 0.1f; - if (mFlags.isOff(Flag::MassScaling)) { + if (mFlags.isOff(Flag::IsSensor)) { mHkBody->m_responseModifierFlags |= hkpResponseModifier::Flags::MASS_SCALING; } mFlags.change(Flag::IsCharacterController, isCharacterControllerType()); - mFlags.change(Flag::MassScaling, mass_scaling == 1); + mFlags.change(Flag::IsSensor, layer_type == ContactLayerType::Sensor); mFlags.change(Flag::_10, a7); mFlags.set(Flag::_100); } @@ -60,7 +60,7 @@ RigidBody::~RigidBody() { } inline void RigidBody::createMotionAccessor(sead::Heap* heap) { - if (isMassScaling()) + if (isSensor()) mMotionAccessor = new (heap) RigidBodyMotionProxy(this); else mMotionAccessor = new (heap) RigidBodyMotion(this); @@ -179,8 +179,7 @@ void RigidBody::setMotionFlag(MotionFlag flag) { if (mFlags.isOff(Flag::_20) && mFlags.isOff(Flag::_2)) { mFlags.set(Flag::_2); - MemSystem::instance()->getRigidBodyRequestMgr()->pushRigidBody( - mFlags.isOn(Flag::MassScaling), this); + MemSystem::instance()->getRigidBodyRequestMgr()->pushRigidBody(getLayerType(), this); } } @@ -223,7 +222,7 @@ RigidBodyMotion* RigidBody::getMotionAccessorForProxy() const { } RigidBodyMotionProxy* RigidBody::getMotionProxy() const { - if (!isMassScaling()) + if (!isSensor()) return nullptr; if (!mMotionAccessor) return nullptr; @@ -327,7 +326,7 @@ bool RigidBody::setLinearVelocity(const sead::Vector3f& velocity, float epsilon) return false; } - if (!isMassScaling() && RigidBodyRequestMgr::Config::isLinearVelocityTooHigh(velocity)) { + if (!isSensor() && RigidBodyRequestMgr::Config::isLinearVelocityTooHigh(velocity)) { onInvalidParameter(1); return false; } @@ -444,7 +443,7 @@ void RigidBody::applyLinearImpulse(const sead::Vector3f& impulse) { return; } - if (!isMassScaling()) + if (!isSensor()) getMotionAccessor()->applyLinearImpulse(impulse); } @@ -460,7 +459,7 @@ void RigidBody::applyAngularImpulse(const sead::Vector3f& impulse) { return; } - if (!isMassScaling()) + if (!isSensor()) getMotionAccessor()->applyAngularImpulse(impulse); } @@ -481,24 +480,24 @@ void RigidBody::applyPointImpulse(const sead::Vector3f& impulse, const sead::Vec return; } - if (!isMassScaling()) + if (!isSensor()) getMotionAccessor()->applyPointImpulse(impulse, point); } void RigidBody::setMass(float mass) { - if (isMassScaling()) + if (isSensor()) return; getMotionAccessor()->setMass(mass); } float RigidBody::getMass() const { - if (isMassScaling()) + if (isSensor()) return 0.0; return getMotionAccessor()->getMass(); } float RigidBody::getMassInv() const { - if (isMassScaling()) + if (isSensor()) return 0.0; return getMotionAccessor()->getMassInv(); } diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.h b/src/KingSystem/Physics/RigidBody/physRigidBody.h index 3bdde81d..f672f38b 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.h @@ -45,7 +45,7 @@ public: }; enum class Flag { - MassScaling = 1 << 0, + IsSensor = 1 << 0, _2 = 1 << 1, _4 = 1 << 2, _8 = 1 << 3, @@ -98,8 +98,8 @@ public: _80000 = 1 << 19, }; - RigidBody(Type type, u32 mass_scaling, hkpRigidBody* hk_body, const sead::SafeString& name, - sead::Heap* heap, bool a7); + RigidBody(Type type, ContactLayerType layer_type, hkpRigidBody* hk_body, + const sead::SafeString& name, sead::Heap* heap, bool a7); ~RigidBody() override; // FIXME: types and names @@ -259,7 +259,11 @@ public: // 0x0000007100f93a9c float getGravityFactor() const; - bool isMassScaling() const { return mFlags.isOn(Flag::MassScaling); } + bool isSensor() const { return mFlags.isOn(Flag::IsSensor); } + ContactLayerType getLayerType() const { + return isSensor() ? ContactLayerType::Sensor : ContactLayerType::Entity; + } + bool hasFlag(Flag flag) const { return mFlags.isOn(flag); } const auto& getMotionFlags() const { return mMotionFlags; } void resetMotionFlagDirect(const MotionFlag flag) { mMotionFlags.reset(flag); } @@ -297,10 +301,6 @@ public: } private: - ContactLayerType getLayerType() const { - return !isMassScaling() ? ContactLayerType::Entity : ContactLayerType::Sensor; - } - void createMotionAccessor(sead::Heap* heap); void onInvalidParameter(int code = 0); void notifyUserTag(int code); diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyMotionProxy.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyMotionProxy.cpp index 45307037..7253c041 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyMotionProxy.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyMotionProxy.cpp @@ -286,8 +286,7 @@ void RigidBodyMotionProxy::setLinkedRigidBody(RigidBody* body) { } if (body) { - if (!body->hasFlag(RigidBody::Flag::MassScaling) && - mFlags.isOff(Flag::HasLinkedRigidBodyWithoutFlag10)) { + if (!body->isSensor() && mFlags.isOff(Flag::HasLinkedRigidBodyWithoutFlag10)) { RigidBodyMotion* accessor = body->getMotionAccessorForProxy(); if (accessor && accessor->registerAccessor(this)) { mLinkedRigidBody = body; diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.cpp index 694d6de3..c88b4795 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.cpp @@ -83,9 +83,9 @@ void RigidBodyRequestMgr::init(sead::Heap* heap) { mWaterPoisonSubmatIdx = MaterialMask::getSubMaterialIdx(Material::Water, "Water_Poison"); } -bool RigidBodyRequestMgr::pushRigidBody(int type, RigidBody* body) { - static_cast(mRigidBodies1[type].getSize()); - return mRigidBodies1[type].push(body); +bool RigidBodyRequestMgr::pushRigidBody(ContactLayerType type, RigidBody* body) { + static_cast(mRigidBodies1[int(type)].getSize()); + return mRigidBodies1[int(type)].push(body); } bool RigidBodyRequestMgr::registerMotionAccessor(MotionAccessor* accessor) { diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.h b/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.h index eb90c7ba..f18a6bf0 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.h @@ -9,6 +9,7 @@ #include #include #include +#include "KingSystem/Physics/System/physDefines.h" #include "KingSystem/Physics/System/physRigidContactPointsEx.h" #include "KingSystem/Utils/Container/LockFreeQueue.h" #include "KingSystem/Utils/Types.h" @@ -43,7 +44,7 @@ public: void init(sead::Heap* heap); - bool pushRigidBody(int type, RigidBody* body); + bool pushRigidBody(ContactLayerType type, RigidBody* body); bool registerMotionAccessor(MotionAccessor* accessor); bool deregisterMotionAccessor(MotionAccessor* accessor); diff --git a/src/KingSystem/Physics/System/physInstanceSet.cpp b/src/KingSystem/Physics/System/physInstanceSet.cpp index 4f1ecc7c..932bcb29 100644 --- a/src/KingSystem/Physics/System/physInstanceSet.cpp +++ b/src/KingSystem/Physics/System/physInstanceSet.cpp @@ -129,12 +129,12 @@ void InstanceSet::sub_7100FBB00C(phys::RigidBody* body, phys::RigidBodyParam* pa phys::RigidBodyInstanceParam instance_params; param->makeInstanceParam(&instance_params); if (instance_params.contact_layer == phys::ContactLayer::SensorCustomReceiver) { - body->sub_7100F8F9E8(&instance_params.receiver_mask, _188[body->isMassScaling()]); + body->sub_7100F8F9E8(&instance_params.receiver_mask, _188[body->isSensor()]); } else if (instance_params.groundhit_mask) { body->sub_7100F8FA44(instance_params.contact_layer, instance_params.groundhit_mask); } else { body->sub_7100F8F8CC(instance_params.contact_layer, instance_params.groundhit, - _188[body->isMassScaling()]); + _188[body->isSensor()]); } body->setCollideGround(instance_params.no_hit_ground == 0); body->setCollideWater(instance_params.no_hit_water == 0);