コード例 #1
0
/*
================
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 );
}
コード例 #2
0
/*
================
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;
}
コード例 #3
0
/*
================
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 );

	
}