85 lines
2.3 KiB
C++
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
|