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->code == Scanner::TC_IDENTIFIER && !strcmp( token->value.string, "SKELETON" )) )
  14. {
  15. PARSE_ERR_EXPECTED( "identifier SKELETON" );
  16. return;
  17. }
  18. token = &scanner.getNextToken();
  19. if( token->code != Scanner::TC_STRING )
  20. {
  21. PARSE_ERR_EXPECTED( "string" );
  22. return;
  23. }
  24. skelNode = new SkelNode;
  25. skelNode->init( token->value.string );
  26. addChild( skelNode );
  27. //** MESHES **
  28. token = &scanner.getNextToken();
  29. if( !(token->code == Scanner::TC_IDENTIFIER && !strcmp( token->value.string, "MESHES_NUM" )) )
  30. {
  31. PARSE_ERR_EXPECTED( "identifier MESHES_NUM" );
  32. return;
  33. }
  34. token = &scanner.getNextToken();
  35. if( token->code != Scanner::TC_NUMBER || token->type != Scanner::DT_INT )
  36. {
  37. PARSE_ERR_EXPECTED( "integer" );
  38. return;
  39. }
  40. meshNodes.resize( token->value.int_ );
  41. for( uint i=0; i<meshNodes.size(); ++i )
  42. {
  43. token = &scanner.getNextToken();
  44. if( token->code != Scanner::TC_STRING )
  45. {
  46. PARSE_ERR_EXPECTED( "string" );
  47. return;
  48. }
  49. meshNodes[i] = new MeshNode;
  50. meshNodes[i]->init( token->value.string );
  51. skelNode->addChild( meshNodes[i] );
  52. meshNodes[i]->meshSkelCtrl = new MeshSkelNodeCtrl( skelNode, meshNodes[i] );
  53. }
  54. }