Fix OriginHands not liking the new structure (null-able)
This commit is contained in:
parent
bb714cb9c0
commit
1dc4d054a6
|
@ -11,9 +11,8 @@ func _ready():
|
|||
var scene : PackedScene = preload("res://models/Origin.tscn")
|
||||
|
||||
dry_run = true
|
||||
var new_frame : UltraleapFrame = UltraleapFrame.new()
|
||||
var n : int = set_hand(new_frame.left_hand, 0)
|
||||
n = set_hand(new_frame.right_hand, n)
|
||||
var n : int = set_hand(UltraleapHand.new(), 0)
|
||||
n = set_hand(UltraleapHand.new(), n)
|
||||
dry_run = false
|
||||
|
||||
print(str(n) + " bones")
|
||||
|
@ -25,6 +24,7 @@ func _ready():
|
|||
instance.name = "Joint" + str(i)
|
||||
gizmos.append(instance)
|
||||
|
||||
|
||||
func _process(_delta):
|
||||
var n : int = 0
|
||||
|
||||
|
@ -45,10 +45,13 @@ func _process(_delta):
|
|||
n = set_hand(interpolated_frame.right_hand, n)
|
||||
return
|
||||
|
||||
n = set_hand(tracking.get_last_frame().left_hand, n)
|
||||
n = set_hand(tracking.get_last_frame().right_hand, n)
|
||||
n = set_hand(frame.left_hand, n)
|
||||
n = set_hand(frame.right_hand, n)
|
||||
|
||||
func set_hand(hand : UltraleapHand, index : int) -> int:
|
||||
if hand == null:
|
||||
hand = UltraleapHand.new()
|
||||
|
||||
index = set_finger("thumb", hand, index)
|
||||
index = set_finger("index", hand, index)
|
||||
index = set_finger("middle", hand, index)
|
||||
|
@ -60,6 +63,9 @@ func set_hand(hand : UltraleapHand, index : int) -> int:
|
|||
|
||||
func set_finger(finger_name : String, hand : UltraleapHand, index : int) -> int:
|
||||
var finger : UltraleapDigit = hand.get(finger_name)
|
||||
|
||||
if finger == null:
|
||||
finger = UltraleapDigit.new()
|
||||
|
||||
if finger_name != "thumb":
|
||||
index = set_bone("metacarpal", finger, index)
|
||||
|
@ -74,9 +80,14 @@ func set_bone(bone_name : String, finger : UltraleapDigit, index : int):
|
|||
if dry_run:
|
||||
return index + 1
|
||||
|
||||
var bone : UltraleapBone = finger.get(bone_name)
|
||||
|
||||
if bone == null:
|
||||
bone = UltraleapBone.new()
|
||||
|
||||
var bone_transform : Transform3D = tracking.global_transform * Transform3D(
|
||||
Basis(finger.get(bone_name).rotation),
|
||||
finger.get(bone_name).prev_joint
|
||||
Basis(bone.rotation),
|
||||
bone.prev_joint
|
||||
)
|
||||
|
||||
gizmos[index].global_transform = bone_transform
|
||||
|
@ -85,10 +96,15 @@ func set_bone(bone_name : String, finger : UltraleapDigit, index : int):
|
|||
func set_tip(finger : UltraleapDigit, index : int) -> int:
|
||||
if dry_run:
|
||||
return index + 1
|
||||
|
||||
var tip : UltraleapBone = finger.get("distal")
|
||||
|
||||
if tip == null:
|
||||
tip = UltraleapBone.new()
|
||||
|
||||
var tip_transform : Transform3D = tracking.global_transform * Transform3D(
|
||||
Basis(finger.get("distal").rotation),
|
||||
finger.get("distal").next_joint
|
||||
Basis(tip.rotation),
|
||||
tip.next_joint
|
||||
)
|
||||
|
||||
gizmos[index].global_transform = tip_transform
|
||||
|
@ -99,6 +115,9 @@ func set_arm(hand : UltraleapHand, index : int) -> int:
|
|||
return index + 2
|
||||
|
||||
var arm : UltraleapBone = hand.arm
|
||||
|
||||
if arm == null:
|
||||
arm = UltraleapBone.new()
|
||||
|
||||
var wrist_transform : Transform3D = tracking.global_transform * Transform3D(
|
||||
Basis(arm.rotation),
|
||||
|
|
|
@ -81,13 +81,6 @@ void UltraleapFrame::_bind_methods() {
|
|||
}
|
||||
|
||||
void UltraleapFrame::fill_frame_data(Ref<UltraleapFrame> ul_frame, const LEAP_TRACKING_EVENT* frame) {
|
||||
if (ul_frame->get_left_hand() == NULL) {
|
||||
ul_frame->set_left_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
|
||||
}
|
||||
if (ul_frame->get_right_hand() == NULL) {
|
||||
ul_frame->set_right_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
|
||||
}
|
||||
|
||||
ul_frame->id = frame->tracking_frame_id;
|
||||
ul_frame->framerate = frame->framerate;
|
||||
ul_frame->is_left_hand_visible = false;
|
||||
|
@ -96,10 +89,16 @@ void UltraleapFrame::fill_frame_data(Ref<UltraleapFrame> ul_frame, const LEAP_TR
|
|||
for (size_t i = 0; i < frame->nHands; i++)
|
||||
{
|
||||
if (frame->pHands[i].type == eLeapHandType_Left) {
|
||||
if (ul_frame->get_left_hand() == NULL) {
|
||||
ul_frame->set_left_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
|
||||
}
|
||||
UltraleapHand::fill_hand_data(ul_frame->get_left_hand(), &frame->pHands[i]);
|
||||
ul_frame->is_left_hand_visible = true;
|
||||
}
|
||||
else {
|
||||
if (ul_frame->get_right_hand() == NULL) {
|
||||
ul_frame->set_right_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
|
||||
}
|
||||
UltraleapHand::fill_hand_data(ul_frame->get_right_hand(), &frame->pHands[i]);
|
||||
ul_frame->is_right_hand_visible = true;
|
||||
}
|
||||
|
|
10
src/hand.cpp
10
src/hand.cpp
|
@ -233,11 +233,11 @@ void UltraleapHand::fill_hand_data(Ref<UltraleapHand> ul_hand, LEAP_HAND* hand)
|
|||
if (ul_hand->arm_ref == NULL) {
|
||||
ul_hand->arm_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
ul_hand->palm_ref = Ref<UltraleapPalm>(memnew(UltraleapPalm));
|
||||
ul_hand->thumb = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->index = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->middle = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->ring = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->pinky = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->set_thumb(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
|
||||
ul_hand->set_index(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
|
||||
ul_hand->set_middle(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
|
||||
ul_hand->set_ring(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
|
||||
ul_hand->set_pinky(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
|
||||
}
|
||||
|
||||
ul_hand->type = hand->type == eLeapHandType_Left ? UltraleapTypes::Chirality::Left : UltraleapTypes::Chirality::Right;
|
||||
|
|
|
@ -30,14 +30,6 @@ public:
|
|||
float pinch_strength;
|
||||
float grab_strength;
|
||||
|
||||
UltraleapDigit* digits[5] = {
|
||||
memnew(UltraleapDigit),
|
||||
memnew(UltraleapDigit),
|
||||
memnew(UltraleapDigit),
|
||||
memnew(UltraleapDigit),
|
||||
memnew(UltraleapDigit)
|
||||
};
|
||||
|
||||
// Getters / Setters
|
||||
float get_confidence() { return confidence; }
|
||||
void set_confidence(float value) { confidence = value; }
|
||||
|
|
Loading…
Reference in New Issue