ksys/phys: Deduplicate hkpEntity -> RigidBody getters

This commit is contained in:
Léo Lam 2022-03-08 20:31:26 +01:00
parent a9ee6f839e
commit 9b1d08ca99
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
3 changed files with 8 additions and 17 deletions

View File

@ -18,11 +18,6 @@
namespace ksys::phys { namespace ksys::phys {
static RigidBody* getRigidBody(hkpRigidBody* hk_body) {
// This needs to be kept in sync with the RigidBody constructor!
return reinterpret_cast<RigidBody*>(hk_body->getUserData());
}
static void clearCallbackDelay(const hkpContactPointEvent& event) { static void clearCallbackDelay(const hkpContactPointEvent& event) {
event.m_contactMgr->m_contactPointCallbackDelay = 0; event.m_contactMgr->m_contactPointCallbackDelay = 0;
} }

View File

@ -13,6 +13,7 @@
#include "KingSystem/Physics/RigidBody/physRigidBody.h" #include "KingSystem/Physics/RigidBody/physRigidBody.h"
#include "KingSystem/Physics/System/physContactMgr.h" #include "KingSystem/Physics/System/physContactMgr.h"
#include "KingSystem/Physics/System/physSystem.h" #include "KingSystem/Physics/System/physSystem.h"
#include "KingSystem/Physics/physConversions.h"
#include "KingSystem/Utils/BitField.h" #include "KingSystem/Utils/BitField.h"
#include "KingSystem/Utils/HeapUtil.h" #include "KingSystem/Utils/HeapUtil.h"
@ -365,12 +366,9 @@ KSYS_ALWAYS_INLINE hkBool EntityGroupFilter::isCollisionEnabled(const hkpShapeRa
hkBool EntityGroupFilter::isCollisionEnabled(const hkpWorldRayCastInput& inputA, hkBool EntityGroupFilter::isCollisionEnabled(const hkpWorldRayCastInput& inputA,
const hkpCollidable& collidableB) const { const hkpCollidable& collidableB) const {
if (collidableB.getType() == hkpWorldObject::BROAD_PHASE_ENTITY) { auto* body = getRigidBody(collidableB);
auto* entity = static_cast<const hkpEntity*>(collidableB.getOwner()); if (body && body->hasFlag(RigidBody::Flag::_200))
auto* body = entity ? reinterpret_cast<RigidBody*>(entity->getUserData()) : nullptr; return false;
if (body && body->hasFlag(RigidBody::Flag::_200))
return false;
}
return testCollisionForRayCasting(inputA.m_filterInfo, collidableB.getCollisionFilterInfo()); return testCollisionForRayCasting(inputA.m_filterInfo, collidableB.getCollisionFilterInfo());
} }

View File

@ -11,6 +11,7 @@
#include <Havok/Physics2012/Dynamics/World/hkpWorldObject.h> #include <Havok/Physics2012/Dynamics/World/hkpWorldObject.h>
#include <basis/seadRawPrint.h> #include <basis/seadRawPrint.h>
#include "KingSystem/Physics/RigidBody/physRigidBody.h" #include "KingSystem/Physics/RigidBody/physRigidBody.h"
#include "KingSystem/Physics/physConversions.h"
#include "KingSystem/Utils/HeapUtil.h" #include "KingSystem/Utils/HeapUtil.h"
namespace ksys::phys { namespace ksys::phys {
@ -181,12 +182,9 @@ hkBool SensorGroupFilter::isCollisionEnabled(const hkpShapeRayCastInput& aInput,
hkBool SensorGroupFilter::isCollisionEnabled(const hkpWorldRayCastInput& inputA, hkBool SensorGroupFilter::isCollisionEnabled(const hkpWorldRayCastInput& inputA,
const hkpCollidable& collidableB) const { const hkpCollidable& collidableB) const {
if (collidableB.getType() == hkpWorldObject::BROAD_PHASE_ENTITY) { auto* body = getRigidBody(collidableB);
auto* entity = static_cast<const hkpEntity*>(collidableB.getOwner()); if (body && body->hasFlag(RigidBody::Flag::_200))
auto* body = entity ? reinterpret_cast<RigidBody*>(entity->getUserData()) : nullptr; return false;
if (body && body->hasFlag(RigidBody::Flag::_200))
return false;
}
return testCollisionForRayCasting(inputA.m_filterInfo, collidableB.getCollisionFilterInfo()); return testCollisionForRayCasting(inputA.m_filterInfo, collidableB.getCollisionFilterInfo());
} }