summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-01-20 02:13:20 +0100
committerLéo Lam <leo@leolam.fr>2022-01-20 12:04:40 +0100
commit0c734c4cbdbcfe57531ae2434a667f496decbb2c (patch)
tree20d6dec561f6768a931f914397221937f076c7dc /lib
parenta291d84b2b4cc8930901ea17b6c6042e25ca02ac (diff)
Havok: Add hkpConstraintOwner
Diffstat (limited to 'lib')
-rw-r--r--lib/hkStubs/CMakeLists.txt1
-rw-r--r--lib/hkStubs/Havok/Common/Base/Math/hkMath.h9
-rw-r--r--lib/hkStubs/Havok/Physics/Constraint/Data/hkpConstraintInfo.h24
-rw-r--r--lib/hkStubs/Havok/Physics2012/Dynamics/Constraint/hkpConstraintOwner.h39
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);
+}