/* ================ idCollisionModelManagerLocal::WriteCollisionModelsToFile ================ */ void idCollisionModelManagerLocal::WriteCollisionModelsToFile( const char* filename, int firstModel, int lastModel, unsigned int mapFileCRC ) { int i; idFile* fp; idStr name; name = filename; name.SetFileExtension( CM_FILE_EXT ); common->Printf( "writing %s\n", name.c_str() ); fp = fileSystem->OpenFileWrite( name, "fs_basepath" ); if( !fp ) { common->Warning( "idCollisionModelManagerLocal::WriteCollisionModelsToFile: Error opening file %s\n", name.c_str() ); return; } // write file id and version fp->WriteFloatString( "%s \"%s\"\n\n", CM_FILEID, CM_FILEVERSION ); // write the map file crc fp->WriteFloatString( "%u\n\n", mapFileCRC ); // write the collision models for( i = firstModel; i < lastModel; i++ ) { WriteCollisionModel( fp, models[ i ] ); } fileSystem->CloseFile( fp ); }
/* ================ idCollisionModelManagerLocal::WriteCollisionModelForMapEntity ================ */ bool idCollisionModelManagerLocal::WriteCollisionModelForMapEntity( const idMapEntity *mapEnt, const char *filename, const bool testTraceModel ) { idFile *fp; idStr name; cm_model_t *model; SetupHash(); model = CollisionModelForMapEntity( mapEnt ); model->name = filename; name = filename; name.SetFileExtension( CM_FILE_EXT ); common->Printf( "writing %s\n", name.c_str() ); fp = fileSystem->OpenFileWrite( name, "fs_devpath" ); if( !fp ) { common->Printf( "idCollisionModelManagerLocal::WriteCollisionModelForMapEntity: Error opening file %s\n", name.c_str() ); FreeModel( model ); return false; } // write file id and version fp->WriteFloatString( "%s \"%s\"\n\n", CM_FILEID, CM_FILEVERSION ); // write the map file crc fp->WriteFloatString( "%u\n\n", 0 ); // write the collision model WriteCollisionModel( fp, model ); fileSystem->CloseFile( fp ); if( testTraceModel ) { idTraceModel trm; TrmFromModel( model, trm ); } FreeModel( model ); return true; }
/* ================ idCollisionModelManagerLocal::GenerateCollisionMapForModel ================ */ void idCollisionModelManagerLocal::GenerateCollisionMapForModel( const char *filename ) { idFile *fp; idStr name; cm_model_t *model; SetupHash(); model = LoadRenderModel( filename ); if(!model) { common->Warning("GenerateCollisionMapForModel: failed to generate CM for %s\n", filename); return; } model->name = filename; name = filename; name.SetFileExtension( CM_FILE_EXT ); common->Printf( "writing %s\n", name.c_str() ); fp = fileSystem->OpenFileWrite( name, "fs_devpath" ); if ( !fp ) { common->Printf( "idCollisionModelManagerLocal::WriteCollisionModelForMapEntity: Error opening file %s\n", name.c_str() ); FreeModel( model ); return; } // write file id and version fp->WriteFloatString( "%s \"%s\"\n\n", CM_FILEID, CM_FILEVERSION ); // write the map file crc fp->WriteFloatString( "%u\n\n", 0 ); // write the collision model WriteCollisionModel( fp, model ); fileSystem->CloseFile( fp ); FreeModel( model ); }