Swap the palms if they're in the wrong order.

This commit is contained in:
Andrzej Kapolka 2013-11-06 17:34:40 -08:00
parent afd3f6937c
commit 1ae8a211bb

View file

@ -29,10 +29,11 @@ void SkeletonModel::simulate(float deltaTime) {
Model::simulate(deltaTime); Model::simulate(deltaTime);
// find the active Leap palms, if any // find the active Leap palms, if any
HandData& hand = _owningAvatar->getHand();
int firstActivePalmIndex = -1; int firstActivePalmIndex = -1;
int secondActivePalmIndex = -1; int secondActivePalmIndex = -1;
for (int i = 0; i < _owningAvatar->getHand().getNumPalms(); i++) { for (int i = 0; i < hand.getNumPalms(); i++) {
if (_owningAvatar->getHand().getPalms()[i].isActive()) { if (hand.getPalms()[i].isActive()) {
if (firstActivePalmIndex == -1) { if (firstActivePalmIndex == -1) {
firstActivePalmIndex = i; firstActivePalmIndex = i;
} else { } else {
@ -43,6 +44,7 @@ void SkeletonModel::simulate(float deltaTime) {
} }
const float HAND_RESTORATION_RATE = 0.25f; const float HAND_RESTORATION_RATE = 0.25f;
if (firstActivePalmIndex == -1) { if (firstActivePalmIndex == -1) {
// no Leap data; set hands from mouse // no Leap data; set hands from mouse
if (_owningAvatar->getHandState() == HAND_STATE_NULL) { if (_owningAvatar->getHandState() == HAND_STATE_NULL) {
@ -54,16 +56,17 @@ void SkeletonModel::simulate(float deltaTime) {
} else if (secondActivePalmIndex == -1) { } else if (secondActivePalmIndex == -1) {
// right hand only // right hand only
applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, hand.getPalms()[firstActivePalmIndex]);
_owningAvatar->getHand().getPalms()[firstActivePalmIndex]);
restoreLeftHandPosition(HAND_RESTORATION_RATE); restoreLeftHandPosition(HAND_RESTORATION_RATE);
} else { } else {
// both hands // both hands; make sure left is first
applyPalmData(_geometry->getFBXGeometry().leftHandJointIndex, if (hand.getPalms()[firstActivePalmIndex].getRawPosition().x >
_owningAvatar->getHand().getPalms()[firstActivePalmIndex]); hand.getPalms()[secondActivePalmIndex].getRawPosition().x) {
applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, qSwap(firstActivePalmIndex, secondActivePalmIndex);
_owningAvatar->getHand().getPalms()[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) { void SkeletonModel::applyPalmData(int jointIndex, const PalmData& palm) {
setJointPosition(jointIndex, palm.getPosition()); setJointPosition(jointIndex, palm.getPosition());
setJointRotation(jointIndex, rotationBetween(IDENTITY_UP, palm.getNormal())); setJointRotation(jointIndex, rotationBetween(_rotation * IDENTITY_UP, -palm.getNormal()));
} }
void SkeletonModel::updateJointState(int index) { void SkeletonModel::updateJointState(int index) {