summaryrefslogtreecommitdiff
path: root/src/peds/PedIK.h
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
committerclaude-bot <[email protected]>2026-07-13 12:27:07 +0000
commit9f61c9e6ac6b1ac5692cf6352d2ebbd47a31a686 (patch)
treea84756b82513739a2672db3a1f0ec579db6d18ff /src/peds/PedIK.h
downloadre3-miami.tar.gz
re3-miami.zip
Import Cai1Hsu/re3 @ miami (reVC / GTA:VC decompilation)HEADmiami
Snapshot import (no upstream history) into git.ancap.in.ua/claude, per @lzcnt. Source: https://github.com/Cai1Hsu/re3 branch miami.
Diffstat (limited to 'src/peds/PedIK.h')
-rw-r--r--src/peds/PedIK.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/peds/PedIK.h b/src/peds/PedIK.h
new file mode 100644
index 0000000..ee719fe
--- /dev/null
+++ b/src/peds/PedIK.h
@@ -0,0 +1,66 @@
+#pragma once
+#include "common.h"
+#include "AnimBlendClumpData.h"
+
+struct LimbOrientation
+{
+ float yaw;
+ float pitch;
+};
+
+struct LimbMovementInfo {
+ float maxYaw;
+ float minYaw;
+ float yawD;
+ float maxPitch;
+ float minPitch;
+ float pitchD;
+};
+
+enum LimbMoveStatus {
+ ANGLES_SET_TO_MAX, // because given angles were unreachable
+ ONE_ANGLE_COULDNT_BE_SET_EXACTLY, // because it can't be reached in a jiffy
+ ANGLES_SET_EXACTLY
+};
+
+class CPed;
+
+class CPedIK
+{
+public:
+ enum {
+ GUN_POINTED_SUCCESSFULLY = 1, // set but unused
+ LOOKAROUND_HEAD_ONLY = 2,
+ AIMS_WITH_ARM = 4,
+ };
+
+ CPed *m_ped;
+ LimbOrientation m_headOrient;
+ LimbOrientation m_torsoOrient;
+ LimbOrientation m_upperArmOrient;
+ LimbOrientation m_lowerArmOrient;
+ int32 m_flags;
+
+ static LimbMovementInfo ms_torsoInfo;
+ static LimbMovementInfo ms_headInfo;
+ static LimbMovementInfo ms_headRestoreInfo;
+ static LimbMovementInfo ms_upperArmInfo;
+ static LimbMovementInfo ms_lowerArmInfo;
+
+ CPedIK(CPed *ped);
+ bool PointGunInDirection(float targetYaw, float targetPitch);
+ bool PointGunInDirectionUsingArm(float targetYaw, float targetPitch);
+ bool PointGunAtPosition(CVector const& position);
+ void GetComponentPosition(RwV3d &pos, uint32 node);
+ void RotateTorso(AnimBlendFrameData* animBlend, LimbOrientation* limb, bool changeRoll);
+ void ExtractYawAndPitchLocal(RwMatrix *mat, float *yaw, float *pitch);
+ void ExtractYawAndPitchLocalSkinned(AnimBlendFrameData *node, float *yaw, float *pitch);
+ void ExtractYawAndPitchWorld(RwMatrix *mat, float *yaw, float *pitch);
+ LimbMoveStatus MoveLimb(LimbOrientation &limb, float targetYaw, float targetPitch, LimbMovementInfo &moveInfo);
+ bool RestoreGunPosn(void);
+ bool LookInDirection(float targetYaw, float targetPitch);
+ bool LookAtPosition(CVector const& pos);
+ bool RestoreLookAt(void);
+};
+
+VALIDATE_SIZE(CPedIK, 0x28);