mirror of https://github.com/zeldaret/botw.git
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:
parent
392c0973c7
commit
8dd5608b79
|
|
@ -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.
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue