ksys/phys: Add CollisionInfo

This commit is contained in:
Léo Lam 2022-03-01 19:23:38 +01:00
parent 1ee012858c
commit 11dafc6ac3
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
5 changed files with 59 additions and 9 deletions

View File

@ -63646,7 +63646,7 @@ Address,Quality,Size,Name
0x0000007100b18994,O,000008,_ZN4sead15CriticalSection7tryLockEv
0x0000007100b1899c,O,000008,_ZN4sead15CriticalSection6unlockEv
0x0000007100b189a4,O,000060,_ZN4sead5MutexC1Ev
0x0000007100b189e0,U,000060,_ZN4sead5MutexC1EPNS_4HeapE
0x0000007100b189e0,O,000060,_ZN4sead5MutexC1EPNS_4HeapENS_9IDisposer14HeapNullOptionE
0x0000007100b18a1c,O,000052,_ZN4sead5MutexD1Ev
0x0000007100b18a50,O,000060,_ZN4sead5MutexD0Ev
0x0000007100b18a8c,O,000008,_ZN4sead5Mutex4lockEv
@ -84099,13 +84099,13 @@ Address,Quality,Size,Name
0x0000007100fc7348,U,000224,
0x0000007100fc7428,U,000036,
0x0000007100fc744c,U,000096,_ZN3aal6System8postCalcEi
0x0000007100fc74ac,U,000032,physicsAllocCollisionStuff
0x0000007100fc74cc,U,000024,
0x0000007100fc74e4,U,000128,
0x0000007100fc7564,U,000068,
0x0000007100fc75a8,U,000076,
0x0000007100fc75f4,U,000020,
0x0000007100fc7608,U,000052,
0x0000007100fc74ac,O,000032,_ZN4ksys4phys13CollisionInfo4makeEPN4sead4HeapERKNS2_14SafeStringBaseIcEE
0x0000007100fc74cc,O,000024,_ZN4ksys4phys13CollisionInfo4freeEPS1_
0x0000007100fc74e4,O,000128,_ZN4ksys4phys13CollisionInfoC1ERKN4sead14SafeStringBaseIcEE
0x0000007100fc7564,O,000068,_ZN4ksys4phys13CollisionInfoD1Ev
0x0000007100fc75a8,O,000076,_ZN4ksys4phys13CollisionInfoD0Ev
0x0000007100fc75f4,O,000020,_ZN4ksys4phys17CollisionInfoBaseD2Ev
0x0000007100fc7608,O,000052,_ZN4ksys4phys17CollisionInfoBaseD0Ev
0x0000007100fc763c,O,000064,_ZN4ksys4phys16ContactPointInfo4makeEPN4sead4HeapEiRKNS2_14SafeStringBaseIcEEiii
0x0000007100fc767c,O,000024,_ZN4ksys4phys16ContactPointInfo4freeEPS1_
0x0000007100fc7694,O,000076,_ZN4ksys4phys16ContactPointInfoC1ERKN4sead14SafeStringBaseIcEEiii

Can't render this file because it is too large.

View File

@ -99,6 +99,7 @@ target_sources(uking PRIVATE
System/physCharacterControllerParam.cpp
System/physCharacterControllerParam.h
System/physCollisionInfo.cpp
System/physCollisionInfo.h
System/physConstraint.cpp
System/physConstraint.h

View File

@ -0,0 +1,23 @@
#include "KingSystem/Physics/System/physCollisionInfo.h"
#include "KingSystem/Physics/System/physSystem.h"
namespace ksys::phys {
CollisionInfo* CollisionInfo::make(sead::Heap* heap, const sead::SafeString& name) {
return System::instance()->allocCollisionInfo(heap, name);
}
void CollisionInfo::free(CollisionInfo* info) {
System::instance()->freeCollisionInfo(info);
}
CollisionInfo::CollisionInfo(const sead::SafeString& name) : sead::INamable(name) {
// FIXME: figure out what this is
mList.initOffset(0x10);
}
CollisionInfo::~CollisionInfo() {
mList.clear();
}
} // namespace ksys::phys

View File

@ -1,7 +1,10 @@
#pragma once
#include <container/seadOffsetList.h>
#include <container/seadSafeArray.h>
#include <prim/seadBitFlag.h>
#include <prim/seadNamable.h>
#include <prim/seadSafeString.h>
#include <thread/seadMutex.h>
#include "KingSystem/Physics/physDefines.h"
@ -21,7 +24,24 @@ public:
private:
// One layer mask for layer type (entity/sensor).
sead::SafeArray<sead::BitFlag32, 2> mLayerMasks;
sead::Mutex mMutex;
sead::Mutex mMutex{nullptr,
sead::IDisposer::HeapNullOption::DoNotAppendDisposerIfNoHeapSpecified};
};
class CollisionInfo : public CollisionInfoBase, public sead::INamable {
public:
static CollisionInfo* make(sead::Heap* heap, const sead::SafeString& name);
static void free(CollisionInfo* info);
explicit CollisionInfo(const sead::SafeString& name);
~CollisionInfo() override;
static constexpr size_t getListNodeOffset() { return offsetof(CollisionInfo, mListNode); }
private:
// FIXME: type
sead::OffsetList<void*> mList;
sead::ListNode mListNode;
};
inline sead::BitFlag32& CollisionInfoBase::getLayerMask(ContactLayerType layer_type) {

View File

@ -9,6 +9,7 @@
namespace ksys::phys {
class CollisionInfo;
class ContactMgr;
class GroupFilter;
class MaterialTable;
@ -55,6 +56,11 @@ public:
void registerContactPointLayerPair(ContactPointInfoEx* info, ContactLayer layer1,
ContactLayer layer2, bool enabled);
// 0x00000071012169a4
CollisionInfo* allocCollisionInfo(sead::Heap* heap, const sead::SafeString& name) const;
// 0x00000071012169ac
void freeCollisionInfo(CollisionInfo* info) const;
// 0x0000007101216a20
void registerRigidBodyForContactSystem(RigidBody* body);