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
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
3 changed files with 24 additions and 3 deletions

View File

@ -83763,7 +83763,7 @@ Address,Quality,Size,Name
0x0000007100fb31b8,U,000204,phys::ContactInfoTable::x_12 0x0000007100fb31b8,U,000204,phys::ContactInfoTable::x_12
0x0000007100fb3284,O,000500,_ZN4ksys4phys10ContactMgr20registerContactPointEPNS0_16ContactPointInfoERKNS0_12ContactPointERKNS0_23RigidBodyCollisionMasksEb 0x0000007100fb3284,O,000500,_ZN4ksys4phys10ContactMgr20registerContactPointEPNS0_16ContactPointInfoERKNS0_12ContactPointERKNS0_23RigidBodyCollisionMasksEb
0x0000007100fb3478,O,000340,_ZN4ksys4phys10ContactMgr20registerContactPointEPNS0_21LayerContactPointInfoERKNS0_12ContactPointEb 0x0000007100fb3478,O,000340,_ZN4ksys4phys10ContactMgr20registerContactPointEPNS0_21LayerContactPointInfoERKNS0_12ContactPointEb
0x0000007100fb35cc,U,000376,phys::ContactInfoTable::x_16 0x0000007100fb35cc,O,000376,_ZN4ksys4phys10ContactMgr20registerContactPointEPNS0_21QueryContactPointInfoERKNS0_12ContactPointEb
0x0000007100fb3744,O,000144,_ZN4ksys4phys10ContactMgr17registerCollisionEPNS0_13CollisionInfoEPNS0_9RigidBodyES5_ 0x0000007100fb3744,O,000144,_ZN4ksys4phys10ContactMgr17registerCollisionEPNS0_13CollisionInfoEPNS0_9RigidBodyES5_
0x0000007100fb37d4,O,000128,_ZN4ksys4phys10ContactMgr17registerCollisionEPNS0_25ContactLayerCollisionInfoEPNS0_9RigidBodyES5_ 0x0000007100fb37d4,O,000128,_ZN4ksys4phys10ContactMgr17registerCollisionEPNS0_25ContactLayerCollisionInfoEPNS0_9RigidBodyES5_
0x0000007100fb3854,O,000228,_ZN4ksys4phys10ContactMgr19unregisterCollisionEPNS0_13CollisionInfoEPNS0_9RigidBodyES5_ 0x0000007100fb3854,O,000228,_ZN4ksys4phys10ContactMgr19unregisterCollisionEPNS0_13CollisionInfoEPNS0_9RigidBodyES5_

Can't render this file because it is too large.

View File

@ -6,6 +6,7 @@
#include "KingSystem/Physics/System/physEntityGroupFilter.h" #include "KingSystem/Physics/System/physEntityGroupFilter.h"
#include "KingSystem/Physics/System/physGroupFilter.h" #include "KingSystem/Physics/System/physGroupFilter.h"
#include "KingSystem/Physics/System/physLayerContactPointInfo.h" #include "KingSystem/Physics/System/physLayerContactPointInfo.h"
#include "KingSystem/Physics/System/physQueryContactPointInfo.h"
#include "KingSystem/Physics/System/physSystem.h" #include "KingSystem/Physics/System/physSystem.h"
#include "KingSystem/Utils/Debug.h" #include "KingSystem/Utils/Debug.h"
@ -231,6 +232,25 @@ bool ContactMgr::registerContactPoint(ContactPointInfo* info, const ContactPoint
return disable_contact == ContactPointInfo::ShouldDisableContact::Yes; 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, void ContactMgr::registerContactPoint(LayerContactPointInfo* info, const ContactPoint& point,
bool penetrating) { bool penetrating) {
int pool_index = allocateContactPoint(); int pool_index = allocateContactPoint();

View File

@ -29,6 +29,7 @@ struct CollidingBodies;
class CollisionInfo; class CollisionInfo;
class ContactLayerCollisionInfo; class ContactLayerCollisionInfo;
class ContactPointInfoBase; class ContactPointInfoBase;
class QueryContactPointInfo;
class RigidBody; class RigidBody;
struct RigidBodyCollisionMasks; struct RigidBodyCollisionMasks;
class ContactPointInfo; class ContactPointInfo;
@ -123,8 +124,8 @@ public:
const RigidBodyCollisionMasks& colliding_body_masks, const RigidBodyCollisionMasks& colliding_body_masks,
bool penetrating); bool penetrating);
// 0x0000007100fb35cc bool registerContactPoint(QueryContactPointInfo* info, const ContactPoint& point,
void registerContactPoint(void* unk_info, const ContactPoint& point, bool penetrating); bool penetrating);
void registerContactPoint(LayerContactPointInfo* info, const ContactPoint& point, void registerContactPoint(LayerContactPointInfo* info, const ContactPoint& point,
bool penetrating); bool penetrating);