//////////////////////////////////////////////////////////////////////////
| 315 | |
| 316 | /////////////////////////////////////////////////////////////////////////////// |
| 317 | bool |
| 318 | Character::getFramePose(PxTransform &rootTransform, SampleArray<PxVec3> &positions, SampleArray<PxU32> &indexBuffers) |
| 319 | { |
| 320 | if (mCurrentMotion == NULL) |
| 321 | return false; |
| 322 | |
| 323 | PxU32 frameNo = PxU32(mFrameTime); |
| 324 | if (frameNo >= mCurrentMotion->mNbFrames) |
| 325 | return false; |
| 326 | |
| 327 | positions.resize(mNbBones+1); |
| 328 | |
| 329 | // copy precomputed bone position in local space |
| 330 | positions[0] = PxVec3(0.0f); // root position |
| 331 | for (PxU32 i = 0; i < mNbBones; i++) |
| 332 | positions[i+1] = mCurrentBoneTransform[i].p; |
| 333 | |
| 334 | // copy capsule index data |
| 335 | indexBuffers.resize(mASFData->mNbBones * 2); |
| 336 | for (PxU32 i = 0; i < mASFData->mNbBones; i++) |
| 337 | { |
| 338 | Acclaim::Bone& bone = mASFData->mBones[i]; |
| 339 | indexBuffers[i*2] = bone.mID; |
| 340 | indexBuffers[i*2+1] = (bone.mParent) ? bone.mParent->mID : 0; |
| 341 | } |
| 342 | |
| 343 | // compute root transform |
| 344 | rootTransform = mCharacterPose.transform(mCurrentRootTransform); |
| 345 | |
| 346 | return true; |
| 347 | } |
| 348 | |
| 349 | ////////////////////////////////////////////////////////////////////////////// |
| 350 | bool Character::move(PxReal speed, bool jump, bool active ) |