diff options
| author | Léo Lam <leo@leolam.fr> | 2022-01-20 02:13:20 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2022-01-20 12:04:40 +0100 |
| commit | 0c734c4cbdbcfe57531ae2434a667f496decbb2c (patch) | |
| tree | 20d6dec561f6768a931f914397221937f076c7dc /lib | |
| parent | a291d84b2b4cc8930901ea17b6c6042e25ca02ac (diff) | |
Havok: Add hkpConstraintOwner
Diffstat (limited to 'lib')
4 files changed, 73 insertions, 0 deletions
diff --git a/lib/hkStubs/CMakeLists.txt b/lib/hkStubs/CMakeLists.txt index 613502a6..2c3d8c4b 100644 --- a/lib/hkStubs/CMakeLists.txt +++ b/lib/hkStubs/CMakeLists.txt @@ -107,6 +107,7 @@ add_library(hkStubs OBJECT Havok/Physics2012/Dynamics/Common/hkpMaterial.h Havok/Physics2012/Dynamics/Common/hkpProperty.h Havok/Physics2012/Dynamics/Constraint/hkpConstraintInstance.h + Havok/Physics2012/Dynamics/Constraint/hkpConstraintOwner.h Havok/Physics2012/Dynamics/Entity/hkpEntity.h Havok/Physics2012/Dynamics/Entity/hkpRigidBody.h Havok/Physics2012/Dynamics/Entity/hkpRigidBodyCinfo.h diff --git a/lib/hkStubs/Havok/Common/Base/Math/hkMath.h b/lib/hkStubs/Havok/Common/Base/Math/hkMath.h index b928b610..18362756 100644 --- a/lib/hkStubs/Havok/Common/Base/Math/hkMath.h +++ b/lib/hkStubs/Havok/Common/Base/Math/hkMath.h @@ -14,3 +14,12 @@ #include <Havok/Common/Base/Math/Vector/hkVector4Comparison.h> #include <Havok/Common/Base/Math/Vector/hkVector4f.inl> + +namespace hkMath { + +template <typename T1, typename T2> +HK_FORCE_INLINE T1 max2(T1 x, T2 y) { + return x > static_cast<T1>(y) ? x : static_cast<T1>(y); +} + +} // namespace hkMath diff --git a/lib/hkStubs/Havok/Physics/Constraint/Data/hkpConstraintInfo.h b/lib/hkStubs/Havok/Physics/Constraint/Data/hkpConstraintInfo.h index f5febd76..c7edeeba 100644 --- a/lib/hkStubs/Havok/Physics/Constraint/Data/hkpConstraintInfo.h +++ b/lib/hkStubs/Havok/Physics/Constraint/Data/hkpConstraintInfo.h @@ -5,8 +5,32 @@ struct hkpConstraintInfo { HK_DECLARE_CLASS_ALLOCATOR(hkpConstraintInfo) + inline void add(int schemaSize, int numSolverResults, int numSolverTempElems); + inline void add(const hkpConstraintInfo& delta); + inline void sub(const hkpConstraintInfo& delta); + int m_maxSizeOfSchema; int m_sizeOfSchemas; int m_numSolverResults; int m_numSolverElemTemps; }; + +inline void hkpConstraintInfo::add(int schemaSize, int numSolverResults, int numSolverTempElems) { + m_sizeOfSchemas += schemaSize; + m_numSolverResults += numSolverResults; + m_numSolverElemTemps += numSolverTempElems; +} + +inline void hkpConstraintInfo::add(const hkpConstraintInfo& delta) { + m_maxSizeOfSchema = hkMath::max2(m_maxSizeOfSchema, delta.m_maxSizeOfSchema); + m_maxSizeOfSchema = hkMath::max2(m_maxSizeOfSchema, delta.m_sizeOfSchemas); + m_sizeOfSchemas += delta.m_sizeOfSchemas; + m_numSolverResults += delta.m_numSolverResults; + m_numSolverElemTemps += delta.m_numSolverElemTemps; +} + +inline void hkpConstraintInfo::sub(const hkpConstraintInfo& delta) { + m_sizeOfSchemas -= delta.m_sizeOfSchemas; + m_numSolverResults -= delta.m_numSolverResults; + m_numSolverElemTemps -= delta.m_numSolverElemTemps; +} diff --git a/lib/hkStubs/Havok/Physics2012/Dynamics/Constraint/hkpConstraintOwner.h b/lib/hkStubs/Havok/Physics2012/Dynamics/Constraint/hkpConstraintOwner.h new file mode 100644 index 00000000..4ad43e2f --- /dev/null +++ b/lib/hkStubs/Havok/Physics2012/Dynamics/Constraint/hkpConstraintOwner.h @@ -0,0 +1,39 @@ +#pragma once + +#include <Havok/Common/Base/hkBase.h> +#include <Havok/Physics2012/Dynamics/Constraint/hkpConstraintInstance.h> + +class hkpConstraintOwner : public hkReferencedObject { +public: + HK_DECLARE_CLASS_ALLOCATOR(hkpConstraintOwner) + + inline void addConstraintInfo(hkpConstraintInstance* constraint, hkpConstraintInfo& delta); + inline void subConstraintInfo(hkpConstraintInstance* constraint, hkpConstraintInfo& delta); + + virtual void addConstraintToCriticalLockedIsland(hkpConstraintInstance* constraint) {} + virtual void removeConstraintFromCriticalLockedIsland(hkpConstraintInstance* constraint) {} + virtual void addCallbackRequest(hkpConstraintInstance* constraint, int request) {} + virtual void checkAccessRw() {} + + hkpConstraintInfo m_constraintInfo; +}; + +inline void hkpConstraintOwner::addConstraintInfo(hkpConstraintInstance* constraint, + hkpConstraintInfo& delta) { + if (!constraint->m_internal) + return; + + m_constraintInfo.add(delta); + constraint->m_internal->addConstraintInfo(delta); + m_constraintInfo.m_maxSizeOfSchema = + hkMath::max2(m_constraintInfo.m_maxSizeOfSchema, constraint->m_internal->m_sizeOfSchemas); +} + +inline void hkpConstraintOwner::subConstraintInfo(hkpConstraintInstance* constraint, + hkpConstraintInfo& delta) { + if (!constraint->m_internal) + return; + + m_constraintInfo.sub(delta); + constraint->m_internal->subConstraintInfo(delta); +} |
