mirror of https://github.com/zeldaret/botw.git
ksys/phys: Add RigidBody::setCollisionInfo
This commit is contained in:
parent
6077a63ea6
commit
35cc8dd9ee
|
@ -82986,7 +82986,7 @@ Address,Quality,Size,Name
|
|||
0x0000007100f8dcfc,O,001044,_ZN4ksys4phys9RigidBody19replaceMotionObjectEv
|
||||
0x0000007100f8e110,O,000748,_ZN4ksys4phys9RigidBody4x_10Ev
|
||||
0x0000007100f8e3fc,U,000816,phys::RigidBody::x_11
|
||||
0x0000007100f8e72c,U,000136,phys::RigidBody::x_12
|
||||
0x0000007100f8e72c,O,000136,_ZN4ksys4phys9RigidBody16setCollisionInfoEPNS0_13CollisionInfoE
|
||||
0x0000007100f8e7b4,O,000052,_ZN4ksys4phys9RigidBody19setContactPointInfoEPNS0_16ContactPointInfoE
|
||||
0x0000007100f8e7e8,O,000264,_ZN4ksys4phys9RigidBody26setFixedAndPreserveImpulseEbb
|
||||
0x0000007100f8e8f0,O,000460,_ZN4ksys4phys9RigidBody6freezeEbbb
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -16,6 +16,7 @@
|
|||
#include "KingSystem/Physics/RigidBody/physRigidBodyMotionSensor.h"
|
||||
#include "KingSystem/Physics/RigidBody/physRigidBodyParam.h"
|
||||
#include "KingSystem/Physics/RigidBody/physRigidBodyRequestMgr.h"
|
||||
#include "KingSystem/Physics/System/physCollisionInfo.h"
|
||||
#include "KingSystem/Physics/System/physEntityGroupFilter.h"
|
||||
#include "KingSystem/Physics/System/physGroupFilter.h"
|
||||
#include "KingSystem/Physics/System/physSensorGroupFilter.h"
|
||||
|
@ -473,6 +474,17 @@ void RigidBody::x_10() {
|
|||
x_8(nullptr);
|
||||
}
|
||||
|
||||
void RigidBody::setCollisionInfo(CollisionInfo* info) {
|
||||
if (mCollisionInfo != info) {
|
||||
if (mCollisionInfo && isFlag8Set())
|
||||
System::instance()->registerRigidBodyForContactSystem(this);
|
||||
mCollisionInfo = info;
|
||||
}
|
||||
|
||||
if (isFlag8Set() && mCollisionInfo && !mCollisionInfo->isLinked())
|
||||
System::instance()->registerCollisionInfo(mCollisionInfo);
|
||||
}
|
||||
|
||||
void RigidBody::setContactPointInfo(ContactPointInfo* info) {
|
||||
mContactPointInfo = info;
|
||||
if (isFlag8Set() && mContactPointInfo && !mContactPointInfo->isLinked())
|
||||
|
|
|
@ -24,11 +24,12 @@ class hkpMotion;
|
|||
|
||||
namespace ksys::phys {
|
||||
|
||||
class CollisionInfo;
|
||||
class ContactPointInfo;
|
||||
class MotionAccessor;
|
||||
struct RigidBodyInstanceParam;
|
||||
class RigidBodyMotionEntity;
|
||||
class RigidBodyMotionSensor;
|
||||
class ContactPointInfo;
|
||||
class SystemGroupHandler;
|
||||
class UserTag;
|
||||
|
||||
|
@ -187,10 +188,9 @@ public:
|
|||
// 0x0000007100f8e3fc
|
||||
void x_11();
|
||||
|
||||
// TODO: rename
|
||||
void* get90() const { return _90; }
|
||||
// 0x0000007100f8e72c
|
||||
void x_12_setField90(void* field_90);
|
||||
CollisionInfo* getCollisionInfo() const { return mCollisionInfo; }
|
||||
void setCollisionInfo(CollisionInfo* info);
|
||||
|
||||
ContactPointInfo* getContactPointInfo() const { return mContactPointInfo; }
|
||||
void setContactPointInfo(ContactPointInfo* info);
|
||||
|
||||
|
@ -584,7 +584,7 @@ protected:
|
|||
hkpRigidBody* mHkBody;
|
||||
UserTag* mUserTag = nullptr;
|
||||
ContactPointInfo* mContactPointInfo = nullptr;
|
||||
void* _90 = nullptr;
|
||||
CollisionInfo* mCollisionInfo = nullptr;
|
||||
u16 _98 = 0;
|
||||
RigidBodyAccessor mRigidBodyAccessor;
|
||||
f32 mScale = 1.0f;
|
||||
|
|
|
@ -36,6 +36,7 @@ public:
|
|||
explicit CollisionInfo(const sead::SafeString& name);
|
||||
~CollisionInfo() override;
|
||||
|
||||
bool isLinked() const { return mListNode.isLinked(); }
|
||||
static constexpr size_t getListNodeOffset() { return offsetof(CollisionInfo, mListNode); }
|
||||
|
||||
private:
|
||||
|
|
|
@ -98,10 +98,10 @@ void ContactListener::handleCollisionRemoved(const hkpCollisionEvent& event, Rig
|
|||
const auto layer_a = body_a->getContactLayer();
|
||||
const auto layer_b = body_b->getContactLayer();
|
||||
|
||||
if (auto* unk = body_a->get90())
|
||||
if (auto* unk = body_a->getCollisionInfo())
|
||||
mMgr->x_19(unk, body_a, body_b);
|
||||
|
||||
if (auto* unk = body_b->get90())
|
||||
if (auto* unk = body_b->getCollisionInfo())
|
||||
mMgr->x_19(unk, body_b, body_a);
|
||||
|
||||
const auto i = int(layer_a - mLayerBase);
|
||||
|
|
|
@ -53,6 +53,9 @@ public:
|
|||
void freeContactPointInfoEx(ContactPointInfoEx* info) const;
|
||||
|
||||
void registerContactPointInfo(ContactPointInfo* info) const;
|
||||
// 0x000000710121696c
|
||||
void registerCollisionInfo(CollisionInfo* info) const;
|
||||
// 0x0000007101216974
|
||||
void registerContactPointLayerPair(ContactPointInfoEx* info, ContactLayer layer1,
|
||||
ContactLayer layer2, bool enabled);
|
||||
|
||||
|
|
Loading…
Reference in New Issue