| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include "SkelAnim.h"
- #include "Scanner.h"
- #include "Parser.h"
- //======================================================================================================================
- // load =
- //======================================================================================================================
- bool SkelAnim::load( const char* filename )
- {
- Scanner scanner;
- if( !scanner.loadFile( filename ) ) return false;
- const Scanner::Token* token;
- // keyframes
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT )
- {
- PARSE_ERR_EXPECTED( "integer" );
- return false;
- }
- keyframes.resize( token->getValue().getInt() );
- if( !Parser::parseArrOfNumbers( scanner, false, false, keyframes.size(), &keyframes[0] ) ) return false;
- // bones num
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT )
- {
- PARSE_ERR_EXPECTED( "integer" );
- return false;
- }
- bones.resize( token->getValue().getInt() );
- // poses
- for( uint i=0; i<bones.size(); i++ )
- {
- // has anim?
- token = &scanner.getNextToken();
- if( token->getCode() != Scanner::TC_NUMBER || token->getDataType() != Scanner::DT_INT )
- {
- PARSE_ERR_EXPECTED( "integer" );
- return false;
- }
- // it has
- if( token->getValue().getInt() == 1 )
- {
- bones[i].keyframes.resize( keyframes.size() );
- for( uint j=0; j<keyframes.size(); ++j )
- {
- // parse the quat
- float tmp[4];
- if( !Parser::parseArrOfNumbers( scanner, false, true, 4, &tmp[0] ) ) return false;
- bones[i].keyframes[j].rotation = Quat( tmp[1], tmp[2], tmp[3], tmp[0] );
- // parse the vec3
- if( !Parser::parseArrOfNumbers( scanner, false, true, 3, &bones[i].keyframes[j].translation[0] ) ) return false;
- }
- }
- } // end for all bones
- framesNum = keyframes[ keyframes.size()-1 ] + 1;
- return true;
- }
|