Havok: Add hkpPlaneShape

This commit is contained in:
Léo Lam 2022-02-01 16:49:05 +01:00
parent 6b302518fb
commit 2cd2d9dc69
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
3 changed files with 78 additions and 0 deletions

View File

@ -115,7 +115,9 @@ add_library(hkStubs OBJECT
Havok/Physics2012/Collide/Shape/Convex/Box/hkpBoxShape.h
Havok/Physics2012/Collide/Shape/Convex/Capsule/hkpCapsuleShape.h
Havok/Physics2012/Collide/Shape/Convex/ConvexTransform/hkpConvexTransformShape.h
Havok/Physics2012/Collide/Shape/HeightField/hkpHeightFieldShape.h
Havok/Physics2012/Collide/Shape/HeightField/hkpSphereRepShape.h
Havok/Physics2012/Collide/Shape/HeightField/Plane/hkpPlaneShape.h
Havok/Physics2012/Collide/Shape/Query/hkpRayShapeCollectionFilter.h
Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastInput.h
Havok/Physics2012/Collide/Util/Welding/hkpWeldingUtility.h

View File

@ -0,0 +1,36 @@
#pragma once
#include <Havok/Physics2012/Collide/Shape/HeightField/hkpHeightFieldShape.h>
class hkpPlaneShape : public hkpHeightFieldShape {
public:
HK_DECLARE_CLASS_ALLOCATOR(hkpPlaneShape)
HK_DECLARE_REFLECTION()
HKCD_DECLARE_SHAPE_TYPE(hkcdShapeType::PLANE)
hkpPlaneShape(const hkVector4& plane, const hkAabb& aabb);
hkpPlaneShape(const hkVector4& direction, const hkVector4& center,
const hkVector4& halfExtents);
explicit hkpPlaneShape(hkFinishLoadedObjectFlag flag);
const hkVector4& getPlane() const { return m_plane; }
const hkVector4& getAabbCenter() const { return m_aabbCenter; }
const hkVector4& getAabbHalfExtents() const { return m_aabbHalfExtents; }
void getAabb(const hkTransform& localToWorld, hkReal tolerance, hkAabb& out) const override;
hkBool castRay(const hkpShapeRayCastInput& input,
hkpShapeRayCastOutput& results) const override;
void castRayWithCollector(const hkpShapeRayCastInput& input, const hkpCdBody& cdBody,
hkpRayHitCollector& collector) const override;
void castSphere(const hkpSphereCastInput& input, const hkpCdBody& cdBody,
hkpRayHitCollector& collector) const override;
void collideSpheres(const CollideSpheresInput& input,
SphereCollisionOutput* outputArray) const override;
protected:
hkVector4 m_plane;
hkVector4 m_aabbCenter;
hkVector4 m_aabbHalfExtents;
};

View File

@ -0,0 +1,40 @@
#pragma once
#include <Havok/Common/Base/hkBase.h>
#include <Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastInput.h>
#include <Havok/Physics2012/Collide/Shape/hkpShape.h>
class hkpHeightFieldShape : public hkpShape {
public:
HK_DECLARE_CLASS_ALLOCATOR(hkpHeightFieldShape)
HK_DECLARE_REFLECTION()
HKCD_DECLARE_SHAPE_TYPE(hkcdShapeType::HEIGHT_FIELD);
struct CollideSpheresInput {
HK_DECLARE_CLASS_ALLOCATOR(CollideSpheresInput)
hkSphere* m_spheres;
int m_numSpheres;
hkReal m_tolerance;
};
using SphereCollisionOutput = hkVector4;
struct hkpSphereCastInput : public hkpShapeRayCastInput {
HK_DECLARE_CLASS_ALLOCATOR(hkpSphereCastInput)
hkReal m_radius;
hkReal m_maxExtraPenetration;
};
explicit hkpHeightFieldShape(ShapeType type) : hkpShape(type) {}
explicit hkpHeightFieldShape(hkFinishLoadedObjectFlag flag) : hkpShape(flag) {
setType(HKCD_SHAPE_TYPE_FROM_CLASS(hkpHeightFieldShape));
}
virtual void collideSpheres(const CollideSpheresInput& input,
SphereCollisionOutput* outputArray) const = 0;
virtual void castSphere(const hkpSphereCastInput& input, const hkpCdBody& cdBody,
hkpRayHitCollector& collector) const = 0;
};