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
|
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.
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue