SkelAnim.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "anki/resource/SkelAnim.h"
  2. namespace anki {
  3. //==============================================================================
  4. void SkelAnim::load(const char* filename)
  5. {
  6. #if 0
  7. scanner::Scanner scanner(filename);
  8. const scanner::Token* token;
  9. // keyframes
  10. token = &scanner.getNextToken();
  11. if(token->getCode() != scanner::TC_NUMBER ||
  12. token->getDataType() != scanner::DT_INT)
  13. {
  14. throw PARSER_EXCEPTION_EXPECTED("integer");
  15. }
  16. keyframes.resize(token->getValue().getInt());
  17. parser::parseArrOfNumbers(scanner, false, false, keyframes.size(),
  18. &keyframes[0]);
  19. // bones num
  20. token = &scanner.getNextToken();
  21. if(token->getCode() != scanner::TC_NUMBER ||
  22. token->getDataType() != scanner::DT_INT)
  23. {
  24. throw PARSER_EXCEPTION_EXPECTED("integer");
  25. }
  26. boneAnims.resize(token->getValue().getInt());
  27. // poses
  28. for(uint i = 0; i < boneAnims.size(); i++)
  29. {
  30. // has anim?
  31. token = &scanner.getNextToken();
  32. if(token->getCode() != scanner::TC_NUMBER ||
  33. token->getDataType() != scanner::DT_INT)
  34. {
  35. throw PARSER_EXCEPTION_EXPECTED("integer");
  36. }
  37. // it has
  38. if(token->getValue().getInt() == 1)
  39. {
  40. for(uint j = 0; j < keyframes.size(); ++j)
  41. {
  42. // parse the quat
  43. float tmp[4];
  44. parser::parseArrOfNumbers(scanner, false, true, 4, &tmp[0]);
  45. // parse the vec3
  46. Vec3 trs;
  47. parser::parseArrOfNumbers(scanner, false, true, 3, &trs[0]);
  48. boneAnims[i].bonePoses.push_back(BonePose(Quat(tmp[1], tmp[2],
  49. tmp[3], tmp[0]), trs));
  50. }
  51. }
  52. } // end for all bones
  53. framesNum = keyframes[keyframes.size() - 1] + 1;
  54. #endif
  55. }
  56. } // end namespace