diff options
Diffstat (limited to 'src/peds/PedIK.h')
-rw-r--r-- | src/peds/PedIK.h | 40 |
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"); |