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