godot-ultraleap-plugin/src/digit.cpp

137 lines
4.3 KiB
C++

#include "digit.h"
#include "types.h"
#include <godot_cpp/core/class_db.hpp>
#include <godot_cpp/classes/global_constants.hpp>
#include <godot_cpp/variant/utility_functions.hpp>
#include <godot_cpp/variant/vector3.hpp>
#include <godot_cpp/variant/quaternion.hpp>
#include <LeapC.h>
using namespace godot;
void UltraleapDigit::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_type"), &UltraleapDigit::get_type);
ClassDB::bind_method(D_METHOD("set_type", "type"), &UltraleapDigit::set_type);
ClassDB::bind_method(D_METHOD("get_metacarpal"), &UltraleapDigit::get_metacarpal);
ClassDB::bind_method(D_METHOD("set_metacarpal", "metacarpal"), &UltraleapDigit::set_metacarpal);
ClassDB::bind_method(D_METHOD("get_proximal"), &UltraleapDigit::get_proximal);
ClassDB::bind_method(D_METHOD("set_proximal", "proximal"), &UltraleapDigit::set_proximal);
ClassDB::bind_method(D_METHOD("get_intermediate"), &UltraleapDigit::get_intermediate);
ClassDB::bind_method(D_METHOD("set_intermediate", "intermediate"), &UltraleapDigit::set_intermediate);
ClassDB::bind_method(D_METHOD("get_distal"), &UltraleapDigit::get_distal);
ClassDB::bind_method(D_METHOD("set_distal", "distal"), &UltraleapDigit::set_distal);
ClassDB::bind_method(D_METHOD("get_is_extended"), &UltraleapDigit::get_is_extended);
ClassDB::bind_method(D_METHOD("set_is_extended", "is_extended"), &UltraleapDigit::set_is_extended);
ClassDB::bind_method(D_METHOD("get_bones"), &UltraleapDigit::get_bones);
ClassDB::add_property(
"UltraleapDigit",
PropertyInfo(
Variant::INT,
"type",
PROPERTY_HINT_ENUM,
"Thumb,Index,Middle,Ring,Pinky,None"
),
"set_type",
"get_type"
);
ClassDB::add_property(
"UltraleapDigit",
PropertyInfo(
Variant::OBJECT,
"metacarpal",
PROPERTY_HINT_RESOURCE_TYPE,
"UltraleapBone"
),
"set_metacarpal",
"get_metacarpal"
);
ClassDB::add_property(
"UltraleapDigit",
PropertyInfo(
Variant::OBJECT,
"proximal",
PROPERTY_HINT_RESOURCE_TYPE,
"UltraleapBone"
),
"set_proximal",
"get_proximal"
);
ClassDB::add_property(
"UltraleapDigit",
PropertyInfo(
Variant::OBJECT,
"intermediate",
PROPERTY_HINT_RESOURCE_TYPE,
"UltraleapBone"
),
"set_intermediate",
"get_intermediate"
);
ClassDB::add_property(
"UltraleapDigit",
PropertyInfo(
Variant::OBJECT,
"distal",
PROPERTY_HINT_RESOURCE_TYPE,
"UltraleapBone"
),
"set_distal",
"get_distal"
);
ClassDB::add_property(
"UltraleapDigit",
PropertyInfo(
Variant::BOOL,
"is_extended"
),
"set_is_extended",
"get_is_extended"
);
ClassDB::add_property(
"UltraleapDigit",
PropertyInfo(
Variant::ARRAY,
"bones",
PROPERTY_HINT_ARRAY_TYPE,
"UltraleapBone",
PROPERTY_USAGE_READ_ONLY | PROPERTY_USAGE_EDITOR
),
"",
"get_bones"
);
}
void UltraleapDigit::fill_digit_data(Ref<UltraleapDigit> ul_digit, LEAP_DIGIT* digit, FingerType type) {
if (ul_digit->metacarpal_ref == NULL) {
ul_digit->metacarpal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
ul_digit->proximal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
ul_digit->intermediate_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
ul_digit->distal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
}
ul_digit->is_extended = digit->is_extended == 1;
ul_digit->type = type;
UltraleapBone::fill_bone_data(ul_digit->metacarpal_ref, &digit->metacarpal, UltraleapBone::BoneType::Metacarpal);
UltraleapBone::fill_bone_data(ul_digit->proximal_ref, &digit->proximal, UltraleapBone::BoneType::Proximal);
UltraleapBone::fill_bone_data(ul_digit->intermediate_ref, &digit->intermediate, UltraleapBone::BoneType::Intermediate);
UltraleapBone::fill_bone_data(ul_digit->distal_ref, &digit->distal, UltraleapBone::BoneType::Distal);
}