diff --git a/lib/hkStubs/CMakeLists.txt b/lib/hkStubs/CMakeLists.txt index c4f499f5..4a51d07a 100644 --- a/lib/hkStubs/CMakeLists.txt +++ b/lib/hkStubs/CMakeLists.txt @@ -120,6 +120,7 @@ add_library(hkStubs OBJECT 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/hkpShapeRayCastCollectorOutput.h Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastInput.h Havok/Physics2012/Collide/Util/Welding/hkpWeldingUtility.h diff --git a/lib/hkStubs/Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastCollectorOutput.h b/lib/hkStubs/Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastCollectorOutput.h new file mode 100644 index 00000000..c071b4fb --- /dev/null +++ b/lib/hkStubs/Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastCollectorOutput.h @@ -0,0 +1,31 @@ +#pragma once + +#include + +struct hkpShapeRayCastCollectorOutput { + HK_DECLARE_CLASS_ALLOCATOR(hkpShapeRayCastCollectorOutput) + + inline hkpShapeRayCastCollectorOutput(); + + inline hkBool hasHit() const; + + inline void reset(); + + hkVector4 m_normal; + hkReal m_hitFraction; + int m_extraInfo; + int m_pad[2]; +}; + +inline hkpShapeRayCastCollectorOutput::hkpShapeRayCastCollectorOutput() { + reset(); +} + +inline hkBool hkpShapeRayCastCollectorOutput::hasHit() const { + return m_hitFraction < 1.0f; +} + +inline void hkpShapeRayCastCollectorOutput::reset() { + m_hitFraction = 1.0f; + m_extraInfo = -1; +} diff --git a/lib/hkStubs/Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastOutput.h b/lib/hkStubs/Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastOutput.h new file mode 100644 index 00000000..8ab574ee --- /dev/null +++ b/lib/hkStubs/Havok/Physics2012/Collide/Shape/Query/hkpShapeRayCastOutput.h @@ -0,0 +1,52 @@ +#pragma once + +#include +#include +#include + +struct hkpShapeRayCastOutput : public hkpShapeRayCastCollectorOutput { + HK_DECLARE_CLASS_ALLOCATOR(hkpShapeRayCastOutput) + + static constexpr int MAX_HIERARCHY_DEPTH = 8; + + HK_FORCE_INLINE hkpShapeRayCastOutput(); + + HK_FORCE_INLINE void changeLevel(int delta); + HK_FORCE_INLINE void setKey(hkpShapeKey key); + HK_FORCE_INLINE int getLevel() const; + + HK_FORCE_INLINE void reset(); + + hkpShapeKey m_shapeKeys[MAX_HIERARCHY_DEPTH]; + +private: + HK_FORCE_INLINE void _reset(); + + int m_shapeKeyIndex; +}; + +inline hkpShapeRayCastOutput::hkpShapeRayCastOutput() { + _reset(); +} + +inline void hkpShapeRayCastOutput::changeLevel(int delta) { + m_shapeKeyIndex += delta; +} + +inline void hkpShapeRayCastOutput::setKey(hkpShapeKey key) { + m_shapeKeys[m_shapeKeyIndex] = key; +} + +inline int hkpShapeRayCastOutput::getLevel() const { + return m_shapeKeyIndex; +} + +inline void hkpShapeRayCastOutput::reset() { + hkpShapeRayCastCollectorOutput::reset(); + _reset(); +} + +inline void hkpShapeRayCastOutput::_reset() { + m_shapeKeyIndex = 0; + m_shapeKeys[0] = HK_INVALID_SHAPE_KEY; +}