mirror of
https://github.com/zeldaret/botw
synced 2026-08-22 14:30:18 -04:00
Merge pull request #184 from RobbyV2/phys-system-contact-listeners
Match phys::System contact listener and group handler forwarders
This commit is contained in:
@@ -93992,7 +93992,7 @@ Address,Quality,Size,Name
|
||||
0x0000007101215784,U,000048,_ZN4ksys4phys6System11unlockWorldENS0_16ContactLayerTypeEPKciNS0_16OnlyLockIfNeededE
|
||||
0x00000071012157b4,U,000464,PhysicsMemSys::__auto0
|
||||
0x0000007101215984,U,000484,PhysicsMemSys::initGroupFilterXs
|
||||
0x0000007101215b68,U,000036,_ZN4ksys4phys6System24removeSystemGroupHandlerEPNS0_18SystemGroupHandlerE
|
||||
0x0000007101215b68,O,000036,_ZN4ksys4phys6System24removeSystemGroupHandlerEPNS0_18SystemGroupHandlerE
|
||||
0x0000007101215b8c,U,001728,ksys::phys::System::createWorld
|
||||
0x000000710121624c,U,000220,PhysicsMemSys::__auto1
|
||||
0x0000007101216328,U,000200,PhysicsMemSys::__auto5
|
||||
@@ -94020,15 +94020,15 @@ Address,Quality,Size,Name
|
||||
0x00000071012168fc,O,000008,_ZNK4ksys4phys6System21allocContactPointInfoEPN4sead4HeapEiRKNS2_14SafeStringBaseIcEEiii
|
||||
0x0000007101216904,O,000008,_ZNK4ksys4phys6System20freeContactPointInfoEPNS0_16ContactPointInfoE
|
||||
0x000000710121690c,O,000008,_ZNK4ksys4phys6System26allocLayerContactPointInfoEPN4sead4HeapEiiRKNS2_14SafeStringBaseIcEEiii
|
||||
0x0000007101216914,U,000080,_ZNK4ksys4phys6System25freeLayerContactPointInfoEPNS0_21LayerContactPointInfoE
|
||||
0x0000007101216914,O,000080,_ZNK4ksys4phys6System25freeLayerContactPointInfoEPNS0_21LayerContactPointInfoE
|
||||
0x0000007101216964,O,000008,_ZNK4ksys4phys6System24registerContactPointInfoEPNS0_16ContactPointInfoE
|
||||
0x000000710121696c,U,000008,PhysicsMemSys::x_3
|
||||
0x0000007101216974,U,000048,_ZN4ksys4phys6System29registerContactPointLayerPairEPNS0_21LayerContactPointInfoENS0_12ContactLayerES4_b
|
||||
0x0000007101216974,O,000048,_ZN4ksys4phys6System29registerContactPointLayerPairEPNS0_21LayerContactPointInfoENS0_12ContactLayerES4_b
|
||||
0x00000071012169a4,O,000008,_ZNK4ksys4phys6System18allocCollisionInfoEPN4sead4HeapERKNS2_14SafeStringBaseIcEE
|
||||
0x00000071012169ac,O,000008,_ZNK4ksys4phys6System17freeCollisionInfoEPNS0_13CollisionInfoE
|
||||
0x00000071012169b4,O,000012,_ZN4ksys4phys6System34makeContactLayerCollisionInfoGroupEPN4sead4HeapENS0_12ContactLayerEiRKNS2_14SafeStringBaseIcEE
|
||||
0x00000071012169c0,O,000008,_ZN4ksys4phys6System34freeContactLayerCollisionInfoGroupEPNS0_30ContactLayerCollisionInfoGroupE
|
||||
0x00000071012169c8,U,000088,_ZN4ksys4phys6System14trackLayerPairENS0_12ContactLayerES2_
|
||||
0x00000071012169c8,O,000088,_ZN4ksys4phys6System14trackLayerPairENS0_12ContactLayerES2_
|
||||
0x0000007101216a20,U,000136,_ZN4ksys4phys6System32removeRigidBodyFromContactSystemEPNS0_9RigidBodyE
|
||||
0x0000007101216aa8,U,000008,
|
||||
0x0000007101216ab0,U,000008,
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -84,6 +84,8 @@ public:
|
||||
bool registerLayerPair(ContactLayer layer1, ContactLayer layer2, bool enabled = true);
|
||||
bool isPairUnknown(ContactLayer layer1, ContactLayer layer2) const;
|
||||
|
||||
ContactLayerType getLayerType() const { return mLayerType; }
|
||||
|
||||
ContactCallback* getCallback() const { return mCallback; }
|
||||
void setCallback(ContactCallback* callback) { mCallback = callback; }
|
||||
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
#include "KingSystem/Physics/RigidBody/physRigidBodyResource.h"
|
||||
#include "KingSystem/Physics/StaticCompound/physStaticCompound.h"
|
||||
#include "KingSystem/Physics/SupportBone/physSupportBoneResource.h"
|
||||
#include "KingSystem/Physics/System/physContactListener.h"
|
||||
#include "KingSystem/Physics/System/physContactMgr.h"
|
||||
#include "KingSystem/Physics/System/physContactPointInfo.h"
|
||||
#include "KingSystem/Physics/System/physEntityGroupFilter.h"
|
||||
#include "KingSystem/Physics/System/physGroupFilter.h"
|
||||
#include "KingSystem/Physics/System/physLayerContactPointInfo.h"
|
||||
#include "KingSystem/Physics/System/physMaterialTable.h"
|
||||
#include "KingSystem/Physics/System/physRayCastRequestMgr.h"
|
||||
#include "KingSystem/Physics/System/physSensorGroupFilter.h"
|
||||
@@ -53,6 +55,10 @@ void System::initSystemData(sead::Heap* heap) {
|
||||
mContactMgr);
|
||||
}
|
||||
|
||||
void System::removeSystemGroupHandler(SystemGroupHandler* handler) {
|
||||
mGroupFilters[static_cast<s32>(handler->getLayerType())]->removeSystemGroupHandler(handler);
|
||||
}
|
||||
|
||||
ContactPointInfo* System::allocContactPointInfo(sead::Heap* heap, int num,
|
||||
const sead::SafeString& name, int a, int b,
|
||||
int c) const {
|
||||
@@ -100,10 +106,27 @@ LayerContactPointInfo* System::allocLayerContactPointInfo(sead::Heap* heap, int
|
||||
return mContactMgr->makeLayerContactPointInfo(heap, num, num2, name, a, b, c);
|
||||
}
|
||||
|
||||
void System::freeLayerContactPointInfo(LayerContactPointInfo* info) const {
|
||||
mContactListeners[static_cast<s32>(info->getLayerType())]->removeLayerPairsForContactPointInfo(
|
||||
info);
|
||||
mContactMgr->freeContactPointInfo(info);
|
||||
}
|
||||
|
||||
void System::registerContactPointInfo(ContactPointInfo* info) const {
|
||||
mContactMgr->registerContactPointInfo(info);
|
||||
}
|
||||
|
||||
void System::registerContactPointLayerPair(LayerContactPointInfo* info, ContactLayer layer1,
|
||||
ContactLayer layer2, bool enabled) {
|
||||
mContactListeners[static_cast<s32>(info->getLayerType())]->addLayerPairForContactPointInfo(
|
||||
info, layer1, layer2, enabled);
|
||||
}
|
||||
|
||||
ContactLayerCollisionInfo* System::trackLayerPair(ContactLayer layer_a, ContactLayer layer_b) {
|
||||
return mContactListeners[static_cast<s32>(getContactLayerType(layer_a))]->trackLayerPair(
|
||||
layer_a, layer_b);
|
||||
}
|
||||
|
||||
RagdollControllerKeyList* System::getRagdollCtrlKeyList() const {
|
||||
if (!mSystemData)
|
||||
return nullptr;
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace ksys::phys {
|
||||
class CollisionInfo;
|
||||
class ContactLayerCollisionInfo;
|
||||
class ContactLayerCollisionInfoGroup;
|
||||
class ContactListener;
|
||||
class ContactMgr;
|
||||
class ContactPointInfo;
|
||||
class GroupFilter;
|
||||
@@ -151,8 +152,7 @@ private:
|
||||
GroupFilter* mEntityGroupFilter{};
|
||||
GroupFilter* mSensorGroupFilter{};
|
||||
sead::FixedPtrArray<GroupFilter, 2> mGroupFilters;
|
||||
// FIXME: type
|
||||
sead::FixedPtrArray<void*, 2> _128;
|
||||
sead::FixedPtrArray<ContactListener, 2> mContactListeners;
|
||||
ContactMgr* mContactMgr;
|
||||
void* _150;
|
||||
StaticCompoundMgr* mStaticCompoundMgr;
|
||||
|
||||
Reference in New Issue
Block a user