Implement TeraMeshRigidBody class (#107)

This commit is contained in:
Briggs Baltzell 2022-11-21 14:10:28 -06:00 committed by GitHub
parent d38a6b546b
commit 1f2a38ec2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 7 deletions

View File

@ -97516,12 +97516,12 @@ Address,Quality,Size,Name
0x000000710131fe88,U,000172,
0x000000710131ff34,U,000160,
0x000000710131ffd4,U,000848,
0x0000007101320324,U,000332,TeraMeshRigidBody::ctor
0x0000007101320470,U,000076,
0x00000071013204bc,U,000080,
0x000000710132050c,U,000084,
0x0000007101320560,U,000088,
0x00000071013205b8,U,000096,
0x0000007101320324,O,000332,_ZN4ksys4phys17TeraMeshRigidBodyC1EP12hkpRigidBodyPN4sead4HeapE
0x0000007101320470,O,000076,_ZN4ksys4phys17TeraMeshRigidBodyD1Ev
0x00000071013204bc,O,000080,_ZThn32_N4ksys4phys17TeraMeshRigidBodyD1Ev
0x000000710132050c,O,000084,_ZN4ksys4phys17TeraMeshRigidBodyD0Ev
0x0000007101320560,O,000088,_ZThn32_N4ksys4phys17TeraMeshRigidBodyD0Ev
0x00000071013205b8,O,000096,_ZN4ksys4phys17TeraMeshRigidBody17getCollisionMasksEPNS0_23RigidBodyCollisionMasksEPKjRKN4sead7Vector3IfEE
0x0000007101320618,U,000088,phys::WorldBorder::ctor
0x0000007101320670,U,000072,
0x00000071013206b8,U,000088,

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

View File

@ -1 +1,36 @@
#include "KingSystem/Physics/RigidBody/TeraMesh/physTeraMeshRigidBody.h"
#include <Havok/Physics2012/Dynamics/Entity/hkpRigidBody.h>
#include "KingSystem/Physics/RigidBody/physRigidBodyParam.h"
#include "KingSystem/Physics/StaticCompound/physStaticCompoundUtil.h"
namespace ksys::phys {
TeraMeshRigidBody::TeraMeshRigidBody(hkpRigidBody* hk_body, sead::Heap* heap)
: RigidBody(RigidBody::Type::TeraMesh, ContactLayerType::Entity, hk_body, "TeraMesh", heap,
true) {
RigidBodyInstanceParam param;
param.motion_type = MotionType::Fixed;
initMotionAccessor(param, heap, false);
}
TeraMeshRigidBody::~TeraMeshRigidBody() {
if (isAddedToWorld()) {
removeFromWorldImmediately();
}
}
u32 TeraMeshRigidBody::getCollisionMasks(RigidBody::CollisionMasks* masks, const u32* unk,
const sead::Vector3f& contact_point) {
const auto* collidable = getHkBody()->getCollidable();
masks->ignored_layers = ~mContactMask;
if (unk != nullptr) {
getCollisionFilterInfoFromCollidable(masks, &masks->collision_filter_info, *collidable,
unk);
return 0;
}
masks->material_mask = collidable->getShape()->getUserData();
masks->collision_filter_info = collidable->getCollisionFilterInfo();
return 0;
}
} // namespace ksys::phys

View File

@ -4,11 +4,12 @@
namespace ksys::phys {
// FIXME
class TeraMeshRigidBody : public RigidBody {
public:
TeraMeshRigidBody(hkpRigidBody* hk_body, sead::Heap* heap);
~TeraMeshRigidBody() override;
u32 getCollisionMasks(RigidBody::CollisionMasks* masks, const u32* unk,
const sead::Vector3f& contact_point) override;
};