From 1ae8a211bbe9baec261e801f7dbb0d86564baf4c Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 6 Nov 2013 17:34:40 -0800 Subject: [PATCH] Swap the palms if they're in the wrong order. --- interface/src/avatar/SkeletonModel.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 3528220622..55c47e7252 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -29,10 +29,11 @@ void SkeletonModel::simulate(float deltaTime) { Model::simulate(deltaTime); // find the active Leap palms, if any + HandData& hand = _owningAvatar->getHand(); int firstActivePalmIndex = -1; int secondActivePalmIndex = -1; - for (int i = 0; i < _owningAvatar->getHand().getNumPalms(); i++) { - if (_owningAvatar->getHand().getPalms()[i].isActive()) { + for (int i = 0; i < hand.getNumPalms(); i++) { + if (hand.getPalms()[i].isActive()) { if (firstActivePalmIndex == -1) { firstActivePalmIndex = i; } else { @@ -43,6 +44,7 @@ void SkeletonModel::simulate(float deltaTime) { } const float HAND_RESTORATION_RATE = 0.25f; + if (firstActivePalmIndex == -1) { // no Leap data; set hands from mouse if (_owningAvatar->getHandState() == HAND_STATE_NULL) { @@ -54,16 +56,17 @@ void SkeletonModel::simulate(float deltaTime) { } else if (secondActivePalmIndex == -1) { // right hand only - applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, - _owningAvatar->getHand().getPalms()[firstActivePalmIndex]); + applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, hand.getPalms()[firstActivePalmIndex]); restoreLeftHandPosition(HAND_RESTORATION_RATE); } else { - // both hands - applyPalmData(_geometry->getFBXGeometry().leftHandJointIndex, - _owningAvatar->getHand().getPalms()[firstActivePalmIndex]); - applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, - _owningAvatar->getHand().getPalms()[secondActivePalmIndex]); + // both hands; make sure left is first + if (hand.getPalms()[firstActivePalmIndex].getRawPosition().x > + hand.getPalms()[secondActivePalmIndex].getRawPosition().x) { + qSwap(firstActivePalmIndex, secondActivePalmIndex); + } + applyPalmData(_geometry->getFBXGeometry().leftHandJointIndex, hand.getPalms()[firstActivePalmIndex]); + applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, hand.getPalms()[secondActivePalmIndex]); } } @@ -119,7 +122,7 @@ bool SkeletonModel::render(float alpha) { void SkeletonModel::applyPalmData(int jointIndex, const PalmData& palm) { setJointPosition(jointIndex, palm.getPosition()); - setJointRotation(jointIndex, rotationBetween(IDENTITY_UP, palm.getNormal())); + setJointRotation(jointIndex, rotationBetween(_rotation * IDENTITY_UP, -palm.getNormal())); } void SkeletonModel::updateJointState(int index) {