ksys/phys: Rename RigidBody "isMassScaling" mode to "isSensor"

That also explains the comparison against 1 (ContactLayerType::Sensor)
in the constructor.
This commit is contained in:
Léo Lam 2022-01-17 16:55:19 +01:00
parent 392c0973c7
commit 8dd5608b79
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
7 changed files with 31 additions and 32 deletions

View File

@ -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

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

View File

@ -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();
}

View File

@ -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);

View File

@ -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;

View File

@ -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<void>(mRigidBodies1[type].getSize());
return mRigidBodies1[type].push(body);
bool RigidBodyRequestMgr::pushRigidBody(ContactLayerType type, RigidBody* body) {
static_cast<void>(mRigidBodies1[int(type)].getSize());
return mRigidBodies1[int(type)].push(body);
}
bool RigidBodyRequestMgr::registerMotionAccessor(MotionAccessor* accessor) {

View File

@ -9,6 +9,7 @@
#include <prim/seadDelegate.h>
#include <thread/seadAtomic.h>
#include <thread/seadCriticalSection.h>
#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);

View File

@ -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);