From 9b1d08ca99a6979949df76779f75d119444aa446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Tue, 8 Mar 2022 20:31:26 +0100 Subject: [PATCH] ksys/phys: Deduplicate hkpEntity -> RigidBody getters --- src/KingSystem/Physics/System/physContactListener.cpp | 5 ----- .../Physics/System/physEntityGroupFilter.cpp | 10 ++++------ .../Physics/System/physSensorGroupFilter.cpp | 10 ++++------ 3 files changed, 8 insertions(+), 17 deletions(-) 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()); }