95 lines
3 KiB
C++
95 lines
3 KiB
C++
/**************************************************************************/
|
|
/* kinect_bridge.h */
|
|
/**************************************************************************/
|
|
/* This file is part of: */
|
|
/* AETHEX ENGINE */
|
|
/* https://aethex.foundation */
|
|
/**************************************************************************/
|
|
/* Copyright (c) 2026-present AeThex Labs. */
|
|
/* */
|
|
/* Kinect Bridge - Receives skeleton data via OSC for: */
|
|
/* - Foundry Onboarding Experience */
|
|
/* - GameForge Spatial IDE */
|
|
/**************************************************************************/
|
|
|
|
#ifndef AETHEX_KINECT_BRIDGE_H
|
|
#define AETHEX_KINECT_BRIDGE_H
|
|
|
|
#include "core/io/packet_peer_udp.h"
|
|
#include "core/io/udp_server.h"
|
|
#include "core/object/ref_counted.h"
|
|
#include "core/templates/vector.h"
|
|
#include "scene/main/node.h"
|
|
#include "kinect_skeleton.h"
|
|
#include "kinect_gesture_detector.h"
|
|
|
|
class KinectBridge : public Node {
|
|
GDCLASS(KinectBridge, Node);
|
|
|
|
public:
|
|
enum Mode {
|
|
MODE_FOUNDRY, // Onboarding identity forge
|
|
MODE_GAMEFORGE, // Spatial IDE navigation
|
|
};
|
|
|
|
private:
|
|
static KinectBridge *singleton;
|
|
|
|
// UDP receiver for OSC
|
|
Ref<PacketPeerUDP> udp_peer;
|
|
int listen_port = 9000;
|
|
bool is_running = false;
|
|
|
|
// Current mode
|
|
Mode current_mode = MODE_FOUNDRY;
|
|
|
|
// Skeleton data
|
|
Ref<KinectSkeleton> skeleton;
|
|
bool skeleton_detected = false;
|
|
|
|
// Gesture detection
|
|
Ref<KinectGestureDetector> gesture_detector;
|
|
|
|
// OSC parsing
|
|
void _process_osc_packet(const Vector<uint8_t> &p_data);
|
|
String _read_osc_string(const Vector<uint8_t> &p_data, int &r_offset);
|
|
int32_t _read_osc_int32(const Vector<uint8_t> &p_data, int &r_offset);
|
|
float _read_osc_float32(const Vector<uint8_t> &p_data, int &r_offset);
|
|
void _dispatch_osc_message(const String &p_address, const Array &p_args);
|
|
|
|
protected:
|
|
static void _bind_methods();
|
|
void _notification(int p_what);
|
|
|
|
public:
|
|
static KinectBridge *get_singleton();
|
|
|
|
// Server control
|
|
Error start(int p_port = 9000);
|
|
void stop();
|
|
bool is_active() const { return is_running; }
|
|
int get_port() const { return listen_port; }
|
|
|
|
// Mode
|
|
void set_mode(Mode p_mode);
|
|
Mode get_mode() const { return current_mode; }
|
|
|
|
// Skeleton access
|
|
Ref<KinectSkeleton> get_skeleton() const { return skeleton; }
|
|
bool is_skeleton_detected() const { return skeleton_detected; }
|
|
Vector3 get_joint_position(int p_joint_id) const;
|
|
|
|
// Gesture detector
|
|
Ref<KinectGestureDetector> get_gesture_detector() const { return gesture_detector; }
|
|
|
|
// Debug
|
|
void set_debug_mode(bool p_enabled);
|
|
bool is_debug_mode() const;
|
|
|
|
KinectBridge();
|
|
~KinectBridge();
|
|
};
|
|
|
|
VARIANT_ENUM_CAST(KinectBridge::Mode);
|
|
|
|
#endif // AETHEX_KINECT_BRIDGE_H
|