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

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