godot-ultraleap-plugin/src/hand.h
rodolpheh 8b932e3a3c Try to improve stability in editor
The more I made changes, the more it crashed. Got it to a point where
it doesn't crash when starting the editor, but it will crash when
exciting.
2023-11-08 22:47:41 +00:00

115 lines
3.5 KiB
C++

#ifndef ULTRALEAP_HAND_H
#define ULTRALEAP_HAND_H
#include <godot_cpp/classes/global_constants.hpp>
#include <godot_cpp/classes/ref.hpp>
#include <godot_cpp/classes/resource.hpp>
#include <godot_cpp/core/binder_common.hpp>
#include <godot_cpp/variant/utility_functions.hpp>
#include <LeapC.h>
#include "digit.h"
#include "palm.h"
#include "bone.h"
#include "types.h"
using namespace godot;
class UltraleapHand : public Resource {
GDCLASS(UltraleapHand, Resource);
public:
UltraleapTypes::Chirality type;
float confidence;
uint64_t visible_time;
float pinch_distance;
float grab_angle;
float pinch_strength;
float grab_strength;
UltraleapDigit* digits[5] = {
memnew(UltraleapDigit),
memnew(UltraleapDigit),
memnew(UltraleapDigit),
memnew(UltraleapDigit),
memnew(UltraleapDigit)
};
UltraleapBone* arm = memnew(UltraleapBone);
UltraleapPalm* palm = memnew(UltraleapPalm);
// Getters / Setters
float get_confidence() { return confidence; }
void set_confidence(float value) { confidence = value; }
float get_pinch_distance() { return pinch_distance; }
void set_pinch_distance(float value) { pinch_distance = value; }
float get_pinch_strength() { return pinch_strength; }
void set_pinch_strength(float value) { pinch_strength = value; }
float get_grab_angle() { return grab_angle; }
void set_grab_angle(float value) { grab_angle = value; }
float get_grab_strength() { return grab_strength; }
void set_grab_strength(float value) { grab_strength = value; }
uint64_t get_visible_time() { return visible_time; }
void set_visible_time(uint64_t value) { visible_time = value; }
UltraleapTypes::Chirality get_type() { return type; }
void set_type(UltraleapTypes::Chirality value) { type = value; }
Variant get_thumb() { return digits_ref[0]; }
void set_thumb(Variant value) { digits_ref[0] = value; }
Variant get_index() { return digits_ref[1]; }
void set_index(Variant value) { digits_ref[1] = value; }
Variant get_middle() { return digits_ref[2]; }
void set_middle(Variant value) { digits_ref[2] = value; }
Variant get_ring() { return digits_ref[3]; }
void set_ring(Variant value) { digits_ref[3] = value; }
Variant get_pinky() { return digits_ref[4]; }
void set_pinky(Variant value) { digits_ref[4] = value; }
Variant get_arm() { return arm_ref; }
void set_arm(Variant value) { arm_ref = value; }
Variant get_palm() { return palm_ref; }
void set_palm(Variant value) { palm_ref = value; }
Array get_digits() {
if (digits_array.size() == 0) {
digits_array.append(digits_ref[0]);
digits_array.append(digits_ref[1]);
digits_array.append(digits_ref[2]);
digits_array.append(digits_ref[3]);
digits_array.append(digits_ref[4]);
}
return digits_array;
}
void set_digits(Array digits) { digits_array = digits; }
static void fill_hand_data(Ref<UltraleapHand> ul_hand, LEAP_HAND* hand);
protected:
static void _bind_methods();
private:
Ref<UltraleapBone> arm_ref = Ref<UltraleapBone>(arm);
Ref<UltraleapPalm> palm_ref = Ref<UltraleapPalm>(palm);
Array digits_array = Array();
Ref<UltraleapDigit> digits_ref[5] = {
Ref<UltraleapDigit>(digits[0]),
Ref<UltraleapDigit>(digits[1]),
Ref<UltraleapDigit>(digits[2]),
Ref<UltraleapDigit>(digits[3]),
Ref<UltraleapDigit>(digits[4])
};
};
#endif