| 608 | } |
| 609 | |
| 610 | void TSShapeInstance::clearTransition(TSThread * thread) |
| 611 | { |
| 612 | if (!thread->transitionData.inTransition) |
| 613 | return; |
| 614 | |
| 615 | // if other transitions are still playing, |
| 616 | // make sure transforms are up to date |
| 617 | if (mTransitionThreads.size()>1) |
| 618 | animateNodeSubtrees(); |
| 619 | |
| 620 | // turn off transition... |
| 621 | thread->transitionData.inTransition = false; |
| 622 | |
| 623 | // remove us from transition list |
| 624 | S32 i; |
| 625 | if (mTransitionThreads.size() != 0) { |
| 626 | for (i=0; i<mTransitionThreads.size(); i++) |
| 627 | if (mTransitionThreads[i]==thread) |
| 628 | break; |
| 629 | AssertFatal(i!=mTransitionThreads.size(),"TSShapeInstance::clearTransition"); |
| 630 | mTransitionThreads.erase(i); |
| 631 | } |
| 632 | |
| 633 | // recompute transitionNodes |
| 634 | mTransitionRotationNodes.clearAll(); |
| 635 | mTransitionTranslationNodes.clearAll(); |
| 636 | mTransitionScaleNodes.clearAll(); |
| 637 | for (i=0; i<mTransitionThreads.size(); i++) |
| 638 | { |
| 639 | mTransitionRotationNodes.overlap(mTransitionThreads[i]->transitionData.oldRotationNodes); |
| 640 | mTransitionRotationNodes.overlap(mTransitionThreads[i]->getSequence()->rotationMatters); |
| 641 | |
| 642 | mTransitionTranslationNodes.overlap(mTransitionThreads[i]->transitionData.oldTranslationNodes); |
| 643 | mTransitionTranslationNodes.overlap(mTransitionThreads[i]->getSequence()->translationMatters); |
| 644 | |
| 645 | mTransitionScaleNodes.overlap(mTransitionThreads[i]->transitionData.oldScaleNodes); |
| 646 | mTransitionScaleNodes.overlap(mTransitionThreads[i]->getSequence()->scaleMatters); |
| 647 | } |
| 648 | |
| 649 | setDirty(ThreadDirty); |
| 650 | |
| 651 | updateTransitions(); |
| 652 | } |
| 653 | |
| 654 | void TSShapeInstance::updateTransitions() |
| 655 | { |
no test coverage detected