summaryrefslogtreecommitdiffstats
path: root/src/peds/PedIK.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/peds/PedIK.h')
-rw-r--r--src/peds/PedIK.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/peds/PedIK.h b/src/peds/PedIK.h
new file mode 100644
index 00000000..e17d52eb
--- /dev/null
+++ b/src/peds/PedIK.h
@@ -0,0 +1,40 @@
+#pragma once
+#include "common.h"
+#include "PedModelInfo.h"
+#include "AnimBlendClumpData.h"
+
+struct LimbOrientation
+{
+ float phi;
+ float theta;
+};
+
+class CPed;
+
+class CPedIK
+{
+public:
+ // TODO
+ enum {
+ FLAG_1 = 1,
+ FLAG_2 = 2, // related to looking somewhere
+ FLAG_4 = 4, // aims with arm
+ };
+
+ CPed *m_ped;
+ LimbOrientation m_headOrient;
+ LimbOrientation m_torsoOrient;
+ LimbOrientation m_upperArmOrient;
+ LimbOrientation m_lowerArmOrient;
+ int32 m_flags;
+
+ CPedIK(CPed *ped);
+ bool PointGunInDirection(float phi, float theta);
+ bool PointGunAtPosition(CVector *position);
+ void GetComponentPosition(RwV3d *pos, PedNode node);
+ static RwMatrix *GetWorldMatrix(RwFrame *source, RwMatrix *destination);
+ void RotateTorso(AnimBlendFrameData* animBlend, LimbOrientation* limb, bool changeRoll);
+ void ExtractYawAndPitchLocal(RwMatrixTag*, float*, float*);
+ void ExtractYawAndPitchWorld(RwMatrixTag*, float*, float*);
+};
+static_assert(sizeof(CPedIK) == 0x28, "CPedIK: error");