//////////////////////////////////////////////////////////////////////////
| 350 | |
| 351 | /////////////////////////////////////////////////////////////////////////////// |
| 352 | static bool readBone(SampleFileBuffer& buffer, Acclaim::Bone& bone) |
| 353 | { |
| 354 | using namespace Acclaim; |
| 355 | |
| 356 | int nbDOF = 0; |
| 357 | char token[MAX_TOKEN_LENGTH], dummy[MAX_TOKEN_LENGTH]; |
| 358 | |
| 359 | if (buffer.getNextTokenButMarker(token) == false) |
| 360 | return false; |
| 361 | |
| 362 | if (strcmp(token, "begin") != 0) |
| 363 | return false; |
| 364 | |
| 365 | while (buffer.getNextToken(token, false) == true) |
| 366 | { |
| 367 | if (strcmp(token, "id") == 0) |
| 368 | { |
| 369 | if (buffer.getNextInt(bone.mID) == false) return false; |
| 370 | } |
| 371 | else if (strcmp(token, "name") == 0) |
| 372 | { |
| 373 | if (buffer.getNextString(bone.mName) == false) return false; |
| 374 | } |
| 375 | else if (strcmp(token, "direction") == 0) |
| 376 | { |
| 377 | if (buffer.getNextVec3(bone.mDirection) == false) return false; |
| 378 | } |
| 379 | else if (strcmp(token, "length") == 0) |
| 380 | { |
| 381 | if (buffer.getNextFloat(bone.mLength) == false) return false; |
| 382 | } |
| 383 | else if (strcmp(token, "axis") == 0) |
| 384 | { |
| 385 | if (buffer.getNextVec3(bone.mAxis) == false) return false; |
| 386 | buffer.getNextToken(dummy, true); |
| 387 | } |
| 388 | else if (strcmp(token, "dof") == 0) |
| 389 | { |
| 390 | while ((buffer.getNextToken(dummy, true) == true)) |
| 391 | { |
| 392 | if (strcmp(dummy, "rx") == 0) |
| 393 | { |
| 394 | bone.mDOF |= BoneDOFFlag::eRX; |
| 395 | nbDOF++; |
| 396 | } |
| 397 | else if (strcmp(dummy, "ry") == 0) |
| 398 | { |
| 399 | bone.mDOF |= BoneDOFFlag::eRY; |
| 400 | nbDOF++; |
| 401 | } |
| 402 | else if (strcmp(dummy, "rz") == 0) |
| 403 | { |
| 404 | bone.mDOF |= BoneDOFFlag::eRZ; |
| 405 | nbDOF++; |
| 406 | } |
| 407 | else if (strcmp(dummy, "l") == 0) |
| 408 | { |
| 409 | bone.mDOF |= BoneDOFFlag::eLENGTH; |
no test coverage detected