diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 830151ea..6c8b6c80 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -83008,8 +83008,8 @@ Address,Quality,Size,Name 0x0000007100f8f1c4,O,000572,_ZN4ksys4phys9RigidBody22setCollisionFilterInfoEj 0x0000007100f8f400,O,000172,_ZN4ksys4phys9RigidBody20enableWaterCollisionEb 0x0000007100f8f4ac,O,000048,_ZNK4ksys4phys9RigidBody23isWaterCollisionEnabledEv -0x0000007100f8f4dc,O,000064,_ZN4ksys4phys9RigidBody23setSensorReceiverLayer2ENS0_12ContactLayerE -0x0000007100f8f51c,O,000104,_ZN4ksys4phys9RigidBody25clearSensorReceiverLayer2Ev +0x0000007100f8f4dc,O,000064,_ZN4ksys4phys9RigidBody29setSensorReceiverIgnoredLayerENS0_12ContactLayerE +0x0000007100f8f51c,O,000104,_ZN4ksys4phys9RigidBody31clearSensorReceiverIgnoredLayerEv 0x0000007100f8f584,O,000144,_ZN4ksys4phys9RigidBody25setContactLayerAndHandlerENS0_12ContactLayerEPNS0_18SystemGroupHandlerE 0x0000007100f8f614,O,000144,_ZN4ksys4phys9RigidBody15setContactLayerENS0_12ContactLayerE 0x0000007100f8f6a4,O,000256,_ZN4ksys4phys9RigidBody21setSystemGroupHandlerEPNS0_18SystemGroupHandlerE @@ -84143,7 +84143,7 @@ Address,Quality,Size,Name 0x0000007100fc8374,O,000192,_ZN4ksys4phys17SensorGroupFilter30doInitSystemGroupHandlerLists_EPN4sead4HeapE 0x0000007100fc8434,O,000016,_ZN4ksys4phys17SensorGroupFilter16getFreeListIndexEPKNS0_18SystemGroupHandlerE 0x0000007100fc8444,O,000072,_ZN4ksys4phys27sensorCollisionMaskSetLayerENS0_12ContactLayerEj -0x0000007100fc848c,O,000060,_ZN4ksys4phys28sensorCollisionMaskSetLayer2EbNS0_12ContactLayerEj +0x0000007100fc848c,O,000060,_ZN4ksys4phys34sensorCollisionMaskSetIgnoredLayerEbNS0_12ContactLayerEj 0x0000007100fc84c8,O,000056,_ZN4ksys4phys24SensorSystemGroupHandler23makeCollisionFilterInfoEjNS0_12ContactLayerENS0_9GroundHitE 0x0000007100fc8500,O,000020,_ZN4ksys4phys24SensorSystemGroupHandler22makeQueryCollisionMaskEjNS0_9GroundHitEb 0x0000007100fc8514,O,000020,_ZN4ksys4phys24SensorSystemGroupHandler2m8Ev diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp index c9418fcb..41dbebe0 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp @@ -717,14 +717,14 @@ void RigidBody::setCollisionFilterInfo(u32 info) { } } -void RigidBody::setSensorReceiverLayer2(ContactLayer layer) { +void RigidBody::setSensorReceiverIgnoredLayer(ContactLayer layer) { static_cast(isSensor()); static_cast(isSensor()); - const auto info = sensorCollisionMaskSetLayer2(true, layer, getCollisionFilterInfo()); + const auto info = sensorCollisionMaskSetIgnoredLayer(true, layer, getCollisionFilterInfo()); setCollisionFilterInfo(info); } -void RigidBody::clearSensorReceiverLayer2() { +void RigidBody::clearSensorReceiverIgnoredLayer() { if (!isSensor()) return; @@ -732,8 +732,8 @@ void RigidBody::clearSensorReceiverLayer2() { return; // The layer we pass here is actually irrelevant because we're clearing the layer value anyway. - const auto info = - sensorCollisionMaskSetLayer2(false, ContactLayer::SensorNoHit, getCollisionFilterInfo()); + const auto info = sensorCollisionMaskSetIgnoredLayer(false, ContactLayer::SensorNoHit, + getCollisionFilterInfo()); setCollisionFilterInfo(info); } diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.h b/src/KingSystem/Physics/RigidBody/physRigidBody.h index d015f267..b98ba414 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.h @@ -229,10 +229,9 @@ public: } /// Only works for sensor rigid bodies that do not use a custom receiver. - // TODO: rename once we figure out what this layer is used for - void setSensorReceiverLayer2(ContactLayer layer); + void setSensorReceiverIgnoredLayer(ContactLayer layer); /// Only works for sensor rigid bodies that do not use a custom receiver. - void clearSensorReceiverLayer2(); + void clearSensorReceiverIgnoredLayer(); void setContactLayerAndHandler(ContactLayer layer, SystemGroupHandler* handler); void setContactLayerAndGroundHit(ContactLayer layer, GroundHit ground_hit); diff --git a/src/KingSystem/Physics/System/physInstanceSet.cpp b/src/KingSystem/Physics/System/physInstanceSet.cpp index 2d7d4dd5..ccfc3062 100644 --- a/src/KingSystem/Physics/System/physInstanceSet.cpp +++ b/src/KingSystem/Physics/System/physInstanceSet.cpp @@ -140,7 +140,7 @@ void InstanceSet::sub_7100FBB00C(phys::RigidBody* body, phys::RigidBodyParam* pa } body->enableGroundCollision(instance_params.no_hit_ground == 0); body->enableWaterCollision(instance_params.no_hit_water == 0); - body->clearSensorReceiverLayer2(); + body->clearSensorReceiverIgnoredLayer(); } void* InstanceSet::sub_7100FBBC28(const sead::SafeString& name) const { diff --git a/src/KingSystem/Physics/System/physSensorGroupFilter.cpp b/src/KingSystem/Physics/System/physSensorGroupFilter.cpp index 5d339276..9c5ed54d 100644 --- a/src/KingSystem/Physics/System/physSensorGroupFilter.cpp +++ b/src/KingSystem/Physics/System/physSensorGroupFilter.cpp @@ -82,9 +82,9 @@ hkBool SensorGroupFilter::testCollisionForSensors(u32 infoA, u32 infoB) const { return false; } - if (a.data.has_layer2 && b.data.layer == a.data.layer2) + if (a.data.has_ignored_layer && b.data.layer == a.data.ignored_layer) return false; - if (b.data.has_layer2 && a.data.layer == b.data.layer2) + if (b.data.has_ignored_layer && a.data.layer == b.data.ignored_layer) return false; return m_collisionLookupTable[a.data.layer] & (1 << b.data.layer); @@ -241,7 +241,7 @@ u32 sensorCollisionMaskSetLayer(ContactLayer layer, u32 mask) { clearBitFields(&info.raw, info.is_custom_receiver, info.custom_receiver_data.layer); } else { clearBitFields(&info.raw, info.is_custom_receiver, info.data.layer, - info.data.has_layer2, info.data.layer2); + info.data.has_ignored_layer, info.data.ignored_layer); } if (info.is_custom_receiver) { @@ -254,7 +254,7 @@ u32 sensorCollisionMaskSetLayer(ContactLayer layer, u32 mask) { return info.raw; } -u32 sensorCollisionMaskSetLayer2(bool set, ContactLayer layer, u32 mask) { +u32 sensorCollisionMaskSetIgnoredLayer(bool set, ContactLayer layer, u32 mask) { SEAD_ASSERT(getContactLayerType(layer) == ContactLayerType::Sensor); SensorCollisionMask info{mask}; @@ -262,12 +262,12 @@ u32 sensorCollisionMaskSetLayer2(bool set, ContactLayer layer, u32 mask) { return info.raw; info.is_custom_receiver = false; - info.data.has_layer2 = false; - info.data.layer2 = {}; + info.data.has_ignored_layer = false; + info.data.ignored_layer = {}; if (set) { - info.data.has_layer2 = true; - info.data.layer2.SetUnsafe(layer - FirstSensor); + info.data.has_ignored_layer = true; + info.data.ignored_layer.SetUnsafe(layer - FirstSensor); } return info.raw; diff --git a/src/KingSystem/Physics/System/physSensorGroupFilter.h b/src/KingSystem/Physics/System/physSensorGroupFilter.h index 4f85702d..c3e942dc 100644 --- a/src/KingSystem/Physics/System/physSensorGroupFilter.h +++ b/src/KingSystem/Physics/System/physSensorGroupFilter.h @@ -64,13 +64,12 @@ protected: /// @param mask An existing sensor collision mask u32 sensorCollisionMaskSetLayer(ContactLayer layer, u32 mask); -/// Set or clear a second contact layer in a sensor collision mask. +/// Set or clear a contact layer to ignore during collision detection in a sensor collision mask. /// This function does nothing when using a custom receiver. /// @param set If true, set the specified layer. Clear it otherwise -/// @param layer A sensor contact layer +/// @param layer A sensor contact layer to be ignored /// @param mask An existing sensor collision mask -// TODO: rename once we figure out what this layer is used for -u32 sensorCollisionMaskSetLayer2(bool set, ContactLayer layer, u32 mask); +u32 sensorCollisionMaskSetIgnoredLayer(bool set, ContactLayer layer, u32 mask); inline u32 SensorSystemGroupHandler::makeCollisionFilterInfo(u32 info, ContactLayer layer, GroundHit ground_hit) { diff --git a/src/KingSystem/Physics/physDefines.h b/src/KingSystem/Physics/physDefines.h index 55718aaa..befc5ae7 100644 --- a/src/KingSystem/Physics/physDefines.h +++ b/src/KingSystem/Physics/physDefines.h @@ -308,11 +308,14 @@ union SensorCollisionMask { union Data { ContactLayer getLayer() const { return int(layer) + FirstSensor; } - /// ContactLayer minus FirstSensor. + /// The sensor's contact layer. + /// @note Add FirstSensor to get the actual ContactLayer value. util::BitField<0, 5, u32> layer; - // TODO: rename once we figure out what this layer is used for - util::BitField<5, 1, bool, u32> has_layer2; - util::BitField<6, 5, u32> layer2; + /// Whether `ignored_layer` contains a valid layer. + util::BitField<5, 1, bool, u32> has_ignored_layer; + /// Contact layer to ignore during collision detection. Only valid if `has_ignored_layer`. + /// @note Add FirstSensor to get the actual ContactLayer value. + util::BitField<6, 5, u32> ignored_layer; }; union CustomReceiverData {