| 289 | } |
| 290 | |
| 291 | void TSShapeInstance::updateTransitionNodeTransforms(TSIntegerSet& transitionNodes) |
| 292 | { |
| 293 | // handle transitions |
| 294 | transitionNodes.clearAll(); |
| 295 | transitionNodes.overlap(mTransitionRotationNodes); |
| 296 | transitionNodes.overlap(mTransitionTranslationNodes); |
| 297 | transitionNodes.overlap(mTransitionScaleNodes); |
| 298 | transitionNodes.takeAway(mHandsOffNodes); |
| 299 | |
| 300 | // Decompose transforms for nodes affected by the transition. Only need to do |
| 301 | // for blended or scale-animated nodes, as all others are already up to date |
| 302 | for (S32 i=transitionNodes.start(); i<MAX_TS_SET_SIZE; transitionNodes.next(i)) |
| 303 | { |
| 304 | if (smNodeLocalTransformDirty.test(i)) |
| 305 | { |
| 306 | if (scaleCurrentlyAnimated()) |
| 307 | { |
| 308 | // @todo:No support for scale yet => need to do proper affine decomposition here |
| 309 | smNodeCurrentTranslations[i] = smNodeLocalTransforms[i].getPosition(); |
| 310 | smNodeCurrentRotations[i].set(smNodeLocalTransforms[i]); |
| 311 | } |
| 312 | else |
| 313 | { |
| 314 | // Scale is identity => can do a cheap decomposition |
| 315 | smNodeCurrentTranslations[i] = smNodeLocalTransforms[i].getPosition(); |
| 316 | smNodeCurrentRotations[i].set(smNodeLocalTransforms[i]); |
| 317 | } |
| 318 | } |
| 319 | } |
| 320 | } |
| 321 | |
| 322 | void TSShapeInstance::handleTransitionNodes(S32 a, S32 b) |
| 323 | { |