mirror of https://github.com/zeldaret/botw.git
ksys/phys: Implement ContactMgr::registerContactPoint for queries
This commit is contained in:
parent
d6e7f6b93e
commit
c11a33c5ab
|
@ -83763,7 +83763,7 @@ Address,Quality,Size,Name
|
|||
0x0000007100fb31b8,U,000204,phys::ContactInfoTable::x_12
|
||||
0x0000007100fb3284,O,000500,_ZN4ksys4phys10ContactMgr20registerContactPointEPNS0_16ContactPointInfoERKNS0_12ContactPointERKNS0_23RigidBodyCollisionMasksEb
|
||||
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_
|
||||
0x0000007100fb37d4,O,000128,_ZN4ksys4phys10ContactMgr17registerCollisionEPNS0_25ContactLayerCollisionInfoEPNS0_9RigidBodyES5_
|
||||
0x0000007100fb3854,O,000228,_ZN4ksys4phys10ContactMgr19unregisterCollisionEPNS0_13CollisionInfoEPNS0_9RigidBodyES5_
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue