ksys/phys: Implement ContactMgr::registerContactPoint for queries

This commit is contained in:
Léo Lam
2022-03-08 12:59:24 +01:00
parent d6e7f6b93e
commit c11a33c5ab
3 changed files with 24 additions and 3 deletions
@@ -6,6 +6,7 @@
#include "KingSystem/Physics/System/physEntityGroupFilter.h"
#include "KingSystem/Physics/System/physGroupFilter.h"
#include "KingSystem/Physics/System/physLayerContactPointInfo.h"
#include "KingSystem/Physics/System/physQueryContactPointInfo.h"
#include "KingSystem/Physics/System/physSystem.h"
#include "KingSystem/Utils/Debug.h"
@@ -231,6 +232,25 @@ bool ContactMgr::registerContactPoint(ContactPointInfo* info, const ContactPoint
return disable_contact == ContactPointInfo::ShouldDisableContact::Yes;
}
bool ContactMgr::registerContactPoint(QueryContactPointInfo* info, const ContactPoint& point,
bool penetrating) {
int pool_index = allocateContactPoint();
if (pool_index == -1)
return false;
auto& point_in_pool = mContactPointPool[pool_index];
point_in_pool = point;
if (info->mNumContactPoints >= info->mPoints.size() && info->_2c < 2)
return false;
int index = info->mNumContactPoints.increment();
info->mPoints[index] = &point_in_pool;
info->mPoints[index]->flags.makeAllZero();
info->mPoints[index]->flags.change(ContactPoint::Flag::Penetrating, penetrating);
return true;
}
void ContactMgr::registerContactPoint(LayerContactPointInfo* info, const ContactPoint& point,
bool penetrating) {
int pool_index = allocateContactPoint();
@@ -29,6 +29,7 @@ struct CollidingBodies;
class CollisionInfo;
class ContactLayerCollisionInfo;
class ContactPointInfoBase;
class QueryContactPointInfo;
class RigidBody;
struct RigidBodyCollisionMasks;
class ContactPointInfo;
@@ -123,8 +124,8 @@ public:
const RigidBodyCollisionMasks& colliding_body_masks,
bool penetrating);
// 0x0000007100fb35cc
void registerContactPoint(void* unk_info, const ContactPoint& point, bool penetrating);
bool registerContactPoint(QueryContactPointInfo* info, const ContactPoint& point,
bool penetrating);
void registerContactPoint(LayerContactPointInfo* info, const ContactPoint& point,
bool penetrating);