SkelModelNode.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "SkelModelNode.h"
  2. #include "Parser.h"
  3. #include "SkelNode.h"
  4. #include "MeshSkelNodeCtrl.h"
  5. /// Create a skelNode and N meshNodes that have a meshSkelCtrl
  6. void SkelModelNode::init(const char* filename)
  7. {
  8. Scanner scanner;
  9. if(!scanner.loadFile(filename)) return;
  10. const Scanner::Token* token;
  11. //** SKELETON **
  12. token = &scanner.getNextToken();
  13. if(!(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "SKELETON")))
  14. {
  15. PARSE_ERR_EXPECTED("identifier SKELETON");
  16. return;
  17. }
  18. token = &scanner.getNextToken();
  19. if(token->getCode() != Scanner::TC_STRING)
  20. {
  21. PARSE_ERR_EXPECTED("string");
  22. return;
  23. }
  24. skelNode = new SkelNode;
  25. skelNode->init(token->getValue().getString());
  26. addChild(skelNode);
  27. //** MESHES **
  28. token = &scanner.getNextToken();
  29. if(!(token->getCode() == Scanner::TC_IDENTIFIER && !strcmp(token->getValue().getString(), "MESHES_NUM")))
  30. {
  31. PARSE_ERR_EXPECTED("identifier MESHES_NUM");
  32. return;
  33. }
  34. token = &scanner.getNextToken();
  35. if(token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT)
  36. {
  37. PARSE_ERR_EXPECTED("integer");
  38. return;
  39. }
  40. meshNodes.resize(token->getValue().getInt());
  41. for(uint i=0; i<meshNodes.size(); ++i)
  42. {
  43. token = &scanner.getNextToken();
  44. if(token->getCode() != Scanner::TC_STRING)
  45. {
  46. PARSE_ERR_EXPECTED("string");
  47. return;
  48. }
  49. meshNodes[i] = new MeshNode;
  50. meshNodes[i]->init(token->getValue().getString());
  51. skelNode->addChild(meshNodes[i]);
  52. meshNodes[i]->meshSkelCtrl = new MeshSkelNodeCtrl(skelNode, meshNodes[i]);
  53. }
  54. }