AeThex-Engine-Core/engine/modules/aethex_kinect/kinect_skeleton.h

85 lines
2.3 KiB
C++

/**************************************************************************/
/* kinect_skeleton.h */
/**************************************************************************/
/* This file is part of: */
/* AETHEX ENGINE */
/* https://aethex.foundation */
/**************************************************************************/
/* Copyright (c) 2026-present AeThex Labs. */
/**************************************************************************/
#ifndef AETHEX_KINECT_SKELETON_H
#define AETHEX_KINECT_SKELETON_H
#include "core/object/ref_counted.h"
#include "core/variant/dictionary.h"
// Kinect v1 joint IDs (20 joints)
class KinectSkeleton : public RefCounted {
GDCLASS(KinectSkeleton, RefCounted);
public:
enum JointID {
JOINT_HIP_CENTER = 0,
JOINT_SPINE = 1,
JOINT_SHOULDER_CENTER = 2,
JOINT_HEAD = 3,
JOINT_SHOULDER_LEFT = 4,
JOINT_ELBOW_LEFT = 5,
JOINT_WRIST_LEFT = 6,
JOINT_HAND_LEFT = 7,
JOINT_SHOULDER_RIGHT = 8,
JOINT_ELBOW_RIGHT = 9,
JOINT_WRIST_RIGHT = 10,
JOINT_HAND_RIGHT = 11,
JOINT_HIP_LEFT = 12,
JOINT_KNEE_LEFT = 13,
JOINT_ANKLE_LEFT = 14,
JOINT_FOOT_LEFT = 15,
JOINT_HIP_RIGHT = 16,
JOINT_KNEE_RIGHT = 17,
JOINT_ANKLE_RIGHT = 18,
JOINT_FOOT_RIGHT = 19,
JOINT_COUNT = 20
};
enum TrackingState {
TRACKING_NOT_TRACKED = 0,
TRACKING_INFERRED = 1,
TRACKING_TRACKED = 2
};
private:
struct JointData {
Vector3 position;
int tracking_state = TRACKING_NOT_TRACKED;
};
JointData joints[JOINT_COUNT];
protected:
static void _bind_methods();
public:
// Joint access
void set_joint(int p_joint_id, const Vector3 &p_position, int p_tracking_state);
Vector3 get_joint_position(int p_joint_id) const;
int get_joint_tracking_state(int p_joint_id) const;
bool is_joint_tracked(int p_joint_id) const;
// Bulk access
Dictionary get_all_joints() const;
// Joint names
static String get_joint_name(int p_joint_id);
// Bone connections (for visualization)
static PackedInt32Array get_bone_connections();
KinectSkeleton();
};
VARIANT_ENUM_CAST(KinectSkeleton::JointID);
VARIANT_ENUM_CAST(KinectSkeleton::TrackingState);
#endif // AETHEX_KINECT_SKELETON_H