/* ** ASE_Process */ static void ASE_Process( void ) { while ( ASE_GetToken( qfalse ) ) { if ( !strcmp( s_token, "*3DSMAX_ASCIIEXPORT" ) || !strcmp( s_token, "*COMMENT" ) ) { ASE_SkipRestOfLine(); } else if ( !strcmp( s_token, "*SCENE" ) ) ASE_SkipEnclosingBraces(); else if ( !strcmp( s_token, "*MATERIAL_LIST" ) ) { VERBOSE( ("MATERIAL_LIST\n") ); ASE_ParseBracedBlock( ASE_KeyMATERIAL_LIST ); } else if ( !strcmp( s_token, "*GEOMOBJECT" ) ) { VERBOSE( ("GEOMOBJECT" ) ); ASE_ParseBracedBlock( ASE_KeyGEOMOBJECT ); if ( strstr( ase.objects[ase.currentObject].name, "Bip" ) || strstr( ase.objects[ase.currentObject].name, "ignore_" ) ) { ASE_FreeGeomObject( ase.currentObject ); VERBOSE( ( "(discarding BIP/ignore object)\n" ) ); } else if ( ( strstr( ase.objects[ase.currentObject].name, "h_" ) != ase.objects[ase.currentObject].name ) && ( strstr( ase.objects[ase.currentObject].name, "l_" ) != ase.objects[ase.currentObject].name ) && ( strstr( ase.objects[ase.currentObject].name, "u_" ) != ase.objects[ase.currentObject].name ) && ( strstr( ase.objects[ase.currentObject].name, "tag" ) != ase.objects[ase.currentObject].name ) && ase.grabAnims ) { VERBOSE( ( "(ignoring improperly labeled object '%s')\n", ase.objects[ase.currentObject].name ) ); ASE_FreeGeomObject( ase.currentObject ); } else { if ( ++ase.currentObject == MAX_ASE_OBJECTS ) { Error( "Too many GEOMOBJECTs" ); } } } else if ( s_token[0] ) { printf( "Unknown token '%s'\n", s_token ); } } if ( !ase.currentObject ) Error( "No animation data!" ); CollapseObjects(); }
/* ** ASE_Free */ void ASE_Free( void ) { int i; for ( i = 0; i < ase.currentObject; i++ ) { ASE_FreeGeomObject( i ); } }
/* ** ASE_Process */ static void ASE_Process( int type ) { while ( ASE_GetToken( qfalse ) ) { if ( !strcmp( s_token, "*3DSMAX_ASCIIEXPORT" ) || !strcmp( s_token, "*COMMENT" ) ) { ASE_SkipRestOfLine(); } else if ( !strcmp( s_token, "*SCENE" ) ) { ASE_SkipEnclosingBraces(); } else if ( !strcmp( s_token, "*HELPEROBJECT" ) ) { ASE_SkipEnclosingBraces(); } else if ( !strcmp( s_token, "*MATERIAL_LIST" ) ) { VERBOSE( ("MATERIAL_LIST\n") ); ASE_ParseBracedBlock( ASE_KeyMATERIAL_LIST ); } else if ( !strcmp( s_token, "*GEOMOBJECT" ) ) { VERBOSE( ("GEOMOBJECT" ) ); ASE_ParseBracedBlock( ASE_KeyGEOMOBJECT ); if (!ase.objects[ase.currentObject].anim.frames[0].numFaces) //we didn't get any faces of animation! { Error( "WARNING: ASE_Process no triangles grabbed for GEOMOBJECT \"%s\"!\n", ase.objects[ase.currentObject].name); } _strlwr(ase.objects[ase.currentObject].name); if ( strstr( ase.objects[ase.currentObject].name, "Bip" ) || strstr( ase.objects[ase.currentObject].name, "ignore_" ) ) { VERBOSE( ( "(discarding BIP/ignore object)\n" ) ); ASE_FreeGeomObject( ase.currentObject ); } else if ( (type /*== TYPE_PLAYER*/) && ( strstr( ase.objects[ase.currentObject].name, "h_" ) != ase.objects[ase.currentObject].name ) && ( strstr( ase.objects[ase.currentObject].name, "l_" ) != ase.objects[ase.currentObject].name ) && ( strstr( ase.objects[ase.currentObject].name, "u_" ) != ase.objects[ase.currentObject].name ) && ( strstr( ase.objects[ase.currentObject].name, "tag" ) != ase.objects[ase.currentObject].name ) && ase.grabAnims ) { VERBOSE( ( "(ignoring improperly labeled object '%s')\n", ase.objects[ase.currentObject].name ) ); ASE_FreeGeomObject( ase.currentObject ); } else { if ( ++ase.currentObject == MAX_ASE_OBJECTS ) { Error( "Too many GEOMOBJECTs" ); } } } else if ( s_token[0] ) { printf( "Unknown token '%s'\n", s_token ); } } if ( !ase.currentObject ) Error( "No animation data!" ); // CollapseObjects(); }