mirror of
https://github.com/zeldaret/botw
synced 2026-05-23 06:54:18 -04:00
ksys/phys: Add RagdollController (the real one, not RagdollInstance)
This commit is contained in:
@@ -12,6 +12,8 @@ add_library(hkStubs OBJECT
|
||||
Havok/Animation/Animation/Rig/hkaBoneAttachment.h
|
||||
Havok/Animation/Animation/Rig/hkaSkeleton.h
|
||||
Havok/Animation/Animation/Rig/hkaPose.h
|
||||
Havok/Animation/Physics2012Bridge/Controller/RigidBody/hkaKeyFrameHierarchyUtility.h
|
||||
Havok/Animation/Physics2012Bridge/Controller/RigidBody/hkaRagdollRigidBodyController.h
|
||||
Havok/Animation/Physics2012Bridge/Instance/hkaRagdollInstance.h
|
||||
|
||||
Havok/Common/Base/hkBase.h
|
||||
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
#pragma once
|
||||
|
||||
#include <Havok/Common/Base/hkBase.h>
|
||||
|
||||
class hkpRigidBody;
|
||||
|
||||
class hkaKeyFrameHierarchyUtility {
|
||||
public:
|
||||
HK_DECLARE_CLASS_ALLOCATOR(hkaKeyFrameHierarchyUtility)
|
||||
HK_DECLARE_REFLECTION()
|
||||
|
||||
struct ControlData {
|
||||
HK_DECLARE_CLASS_ALLOCATOR(ControlData)
|
||||
HK_DECLARE_REFLECTION()
|
||||
|
||||
hkReal m_hierarchyGain;
|
||||
hkReal m_velocityDamping;
|
||||
hkReal m_accelerationGain;
|
||||
hkReal m_velocityGain;
|
||||
hkReal m_positionGain;
|
||||
hkReal m_positionMaxLinearVelocity;
|
||||
hkReal m_positionMaxAngularVelocity;
|
||||
hkReal m_snapGain;
|
||||
hkReal m_snapMaxLinearVelocity;
|
||||
hkReal m_snapMaxAngularVelocity;
|
||||
hkReal m_snapMaxLinearDistance;
|
||||
hkReal m_snapMaxAngularDistance;
|
||||
|
||||
ControlData()
|
||||
: m_hierarchyGain(hkReal(0.17f)), m_velocityDamping(0), m_accelerationGain(1),
|
||||
m_velocityGain(hkReal(0.6f)), m_positionGain(hkReal(0.05f)),
|
||||
m_positionMaxLinearVelocity(hkReal(1.4f)), m_positionMaxAngularVelocity(hkReal(1.8f)),
|
||||
m_snapGain(hkReal(0.1f)), m_snapMaxLinearVelocity(hkReal(0.3f)),
|
||||
m_snapMaxAngularVelocity(hkReal(0.3f)), m_snapMaxLinearDistance(hkReal(0.03f)),
|
||||
m_snapMaxAngularDistance(hkReal(0.1f)) {}
|
||||
|
||||
explicit ControlData(hkFinishLoadedObjectFlag flag) {}
|
||||
|
||||
hkBool isValid() const;
|
||||
};
|
||||
|
||||
struct WorkElem {
|
||||
HK_DECLARE_CLASS_ALLOCATOR(WorkElem)
|
||||
|
||||
hkVector4 m_prevPosition;
|
||||
hkQuaternion m_prevRotation;
|
||||
hkVector4 m_prevLinearVelocity;
|
||||
hkVector4 m_prevAngularVelocity;
|
||||
};
|
||||
|
||||
struct KeyFrameData {
|
||||
HK_DECLARE_CLASS_ALLOCATOR(KeyFrameData)
|
||||
|
||||
hkQsTransform m_worldFromRoot;
|
||||
/// The desired pose in local space, one transform for each rigid body
|
||||
const hkQsTransform* m_desiredPoseLocalSpace;
|
||||
WorkElem* m_internalReferencePose;
|
||||
};
|
||||
|
||||
struct BodyData {
|
||||
HK_DECLARE_CLASS_ALLOCATOR(BodyData)
|
||||
|
||||
int m_numRigidBodies;
|
||||
hkpRigidBody* const* m_rigidBodies;
|
||||
const hkInt16* m_parentIndices;
|
||||
int* m_controlDataIndices = nullptr;
|
||||
const hkReal* m_boneWeights = nullptr;
|
||||
};
|
||||
|
||||
struct Output {
|
||||
HK_DECLARE_CLASS_ALLOCATOR(Output)
|
||||
|
||||
hkReal m_stressSquared;
|
||||
};
|
||||
|
||||
static void initialize(const hkpRigidBody* rb, WorkElem& workElem);
|
||||
|
||||
static void initialize(const BodyData& bodies, WorkElem* internalReferencePose);
|
||||
|
||||
static void applyKeyFrame(hkReal m_deltaTime, const KeyFrameData& pose, const BodyData& body,
|
||||
const ControlData* controlPalette, Output* outputArray = nullptr);
|
||||
};
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
|
||||
#include <Havok/Animation/Physics2012Bridge/Controller/RigidBody/hkaKeyFrameHierarchyUtility.h>
|
||||
#include <Havok/Common/Base/hkBase.h>
|
||||
|
||||
class hkaRagdollInstance;
|
||||
|
||||
class hkaRagdollRigidBodyController {
|
||||
public:
|
||||
HK_DECLARE_CLASS_ALLOCATOR(hkaRagdollRigidBodyController)
|
||||
|
||||
explicit hkaRagdollRigidBodyController(hkaRagdollInstance* ragdoll);
|
||||
~hkaRagdollRigidBodyController();
|
||||
|
||||
void driveToPose(hkReal deltaTime, const hkQsTransform* poseLocalSpace,
|
||||
const hkQsTransform& worldFromModel,
|
||||
hkaKeyFrameHierarchyUtility::Output* stressOut);
|
||||
|
||||
void reinitialize();
|
||||
void reinitialize(int boneIndex);
|
||||
|
||||
const hkaRagdollInstance* getRagdollInstance() const;
|
||||
|
||||
void setBoneWeights(const hkReal* boneWeights);
|
||||
|
||||
hkArray<hkaKeyFrameHierarchyUtility::ControlData> m_controlDataPalette;
|
||||
hkArray<int> m_bodyIndexToPaletteIndex;
|
||||
|
||||
protected:
|
||||
hkaKeyFrameHierarchyUtility::BodyData m_bodyData;
|
||||
hkArray<hkaKeyFrameHierarchyUtility::WorkElem> m_internalData;
|
||||
hkaRagdollInstance* m_ragdollInstance;
|
||||
hkArray<hkInt16> m_rbParentIndices;
|
||||
};
|
||||
Reference in New Issue
Block a user