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
3 changed files with 43 additions and 7 deletions
@@ -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
@@ -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;
};