diff --git a/src/KingSystem/Physics/System/physContactListener.cpp b/src/KingSystem/Physics/System/physContactListener.cpp index ceb8dc19..6958e891 100644 --- a/src/KingSystem/Physics/System/physContactListener.cpp +++ b/src/KingSystem/Physics/System/physContactListener.cpp @@ -18,11 +18,6 @@ namespace ksys::phys { -static RigidBody* getRigidBody(hkpRigidBody* hk_body) { - // This needs to be kept in sync with the RigidBody constructor! - return reinterpret_cast(hk_body->getUserData()); -} - static void clearCallbackDelay(const hkpContactPointEvent& event) { event.m_contactMgr->m_contactPointCallbackDelay = 0; } diff --git a/src/KingSystem/Physics/System/physEntityGroupFilter.cpp b/src/KingSystem/Physics/System/physEntityGroupFilter.cpp index 207de64b..95317e17 100644 --- a/src/KingSystem/Physics/System/physEntityGroupFilter.cpp +++ b/src/KingSystem/Physics/System/physEntityGroupFilter.cpp @@ -13,6 +13,7 @@ #include "KingSystem/Physics/RigidBody/physRigidBody.h" #include "KingSystem/Physics/System/physContactMgr.h" #include "KingSystem/Physics/System/physSystem.h" +#include "KingSystem/Physics/physConversions.h" #include "KingSystem/Utils/BitField.h" #include "KingSystem/Utils/HeapUtil.h" @@ -365,12 +366,9 @@ KSYS_ALWAYS_INLINE hkBool EntityGroupFilter::isCollisionEnabled(const hkpShapeRa hkBool EntityGroupFilter::isCollisionEnabled(const hkpWorldRayCastInput& inputA, const hkpCollidable& collidableB) const { - if (collidableB.getType() == hkpWorldObject::BROAD_PHASE_ENTITY) { - auto* entity = static_cast(collidableB.getOwner()); - auto* body = entity ? reinterpret_cast(entity->getUserData()) : nullptr; - if (body && body->hasFlag(RigidBody::Flag::_200)) - return false; - } + auto* body = getRigidBody(collidableB); + if (body && body->hasFlag(RigidBody::Flag::_200)) + return false; return testCollisionForRayCasting(inputA.m_filterInfo, collidableB.getCollisionFilterInfo()); } diff --git a/src/KingSystem/Physics/System/physSensorGroupFilter.cpp b/src/KingSystem/Physics/System/physSensorGroupFilter.cpp index 9c5ed54d..aed763bf 100644 --- a/src/KingSystem/Physics/System/physSensorGroupFilter.cpp +++ b/src/KingSystem/Physics/System/physSensorGroupFilter.cpp @@ -11,6 +11,7 @@ #include #include #include "KingSystem/Physics/RigidBody/physRigidBody.h" +#include "KingSystem/Physics/physConversions.h" #include "KingSystem/Utils/HeapUtil.h" namespace ksys::phys { @@ -181,12 +182,9 @@ hkBool SensorGroupFilter::isCollisionEnabled(const hkpShapeRayCastInput& aInput, hkBool SensorGroupFilter::isCollisionEnabled(const hkpWorldRayCastInput& inputA, const hkpCollidable& collidableB) const { - if (collidableB.getType() == hkpWorldObject::BROAD_PHASE_ENTITY) { - auto* entity = static_cast(collidableB.getOwner()); - auto* body = entity ? reinterpret_cast(entity->getUserData()) : nullptr; - if (body && body->hasFlag(RigidBody::Flag::_200)) - return false; - } + auto* body = getRigidBody(collidableB); + if (body && body->hasFlag(RigidBody::Flag::_200)) + return false; return testCollisionForRayCasting(inputA.m_filterInfo, collidableB.getCollisionFilterInfo()); }