mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-04-21 01:00:52 +00:00
Export OBJ files along with exportFGD command
This commit is contained in:
parent
4d7468e812
commit
1867452c40
3 changed files with 80 additions and 19 deletions
|
@ -1073,6 +1073,12 @@ idMD5Anim::CheckModelHierarchy
|
|||
*/
|
||||
void idMD5Anim::CheckModelHierarchy( const idRenderModel* model ) const
|
||||
{
|
||||
// RB
|
||||
if( com_editors & EDITOR_EXPORTDEFS )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( jointInfo.Num() != model->NumJoints() )
|
||||
{
|
||||
if( !fileSystem->InProductionMode() )
|
||||
|
|
|
@ -2066,6 +2066,7 @@ typedef struct evar_s
|
|||
void idDeclManagerLocal::ExportDeclsToTrenchBroom_f( const idCmdArgs& args )
|
||||
{
|
||||
extern idCVar postLoadExportModels;
|
||||
extern idCVar postLoadExportModelName;
|
||||
|
||||
// avoid media cache
|
||||
com_editors |= EDITOR_EXPORTDEFS;
|
||||
|
@ -2322,8 +2323,6 @@ void idDeclManagerLocal::ExportDeclsToTrenchBroom_f( const idCmdArgs& args )
|
|||
int32( bounds[1].x ), int32( bounds[1].y ), int32( bounds[1].z ) );
|
||||
}
|
||||
|
||||
file->Printf( "= %s : \"%s\"\n", decl->GetName(), text.c_str() );
|
||||
|
||||
// collect editor specific spawn flags
|
||||
idList<evar_t> evars;
|
||||
|
||||
|
@ -2342,8 +2341,6 @@ void idDeclManagerLocal::ExportDeclsToTrenchBroom_f( const idCmdArgs& args )
|
|||
}
|
||||
}
|
||||
|
||||
file->Printf( "[\n" );
|
||||
|
||||
idDict dictToWrite;
|
||||
|
||||
for( int i = 0; i < decl->dict.GetNumKeyVals(); i++ )
|
||||
|
@ -2396,7 +2393,7 @@ void idDeclManagerLocal::ExportDeclsToTrenchBroom_f( const idCmdArgs& args )
|
|||
}
|
||||
}
|
||||
|
||||
#if 1
|
||||
// add editor_vars that aren't already covered by the default vars
|
||||
for( int i = 0; i < evars.Num(); i++ )
|
||||
{
|
||||
const evar_t* ev = &evars[ i ];
|
||||
|
@ -2407,7 +2404,47 @@ void idDeclManagerLocal::ExportDeclsToTrenchBroom_f( const idCmdArgs& args )
|
|||
dictToWrite.Set( ev->name, ev->desc );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// export models as OBJ
|
||||
bool writeModel = false;
|
||||
idStrStatic< MAX_OSPATH > exportedModelFileName;
|
||||
|
||||
kv = dictToWrite.MatchPrefix( "model" );
|
||||
while( kv )
|
||||
{
|
||||
if( kv->GetValue().Length() )
|
||||
{
|
||||
declManager->MediaPrint( "Precaching model %s\n", kv->GetValue().c_str() );
|
||||
|
||||
// precache model/animations
|
||||
const idDecl* modelDef = declManager->FindType( DECL_MODELDEF, kv->GetValue(), false );
|
||||
if( modelDef == NULL )
|
||||
{
|
||||
// there is no modelDef so use direct path
|
||||
renderModelManager->FindModel( kv->GetValue() );
|
||||
}
|
||||
|
||||
// HACK
|
||||
writeModel = true;
|
||||
|
||||
exportedModelFileName = postLoadExportModelName.GetString();
|
||||
//exportedFileName = "_tb/";
|
||||
//exportedFileName.AppendPath( modelDef->GetModelName() );
|
||||
//exportedFileName.SetFileExtension( ".obj" );
|
||||
|
||||
//dictToWrite.Set( kv->GetKey(), exportedFileName );
|
||||
}
|
||||
|
||||
kv = dictToWrite.MatchPrefix( "model", kv );
|
||||
}
|
||||
|
||||
if( writeModel )
|
||||
{
|
||||
file->Printf( "model({ \"path\": \"%s\" }) ", exportedModelFileName.c_str() );
|
||||
}
|
||||
|
||||
file->Printf( "= %s : \"%s\"\n", decl->GetName(), text.c_str() );
|
||||
file->Printf( "[\n" );
|
||||
|
||||
for( int i = 0; i < dictToWrite.GetNumKeyVals(); i++ )
|
||||
{
|
||||
|
@ -2483,16 +2520,7 @@ void idDeclManagerLocal::ExportDeclsToTrenchBroom_f( const idCmdArgs& args )
|
|||
|
||||
file->Printf( "]\n\n" );
|
||||
|
||||
/*
|
||||
if( i == ( count - 1 ) )
|
||||
{
|
||||
file->Printf( "\t\t}\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
file->Printf( "\t\t},\n" );
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
file->Flush();
|
||||
|
@ -2508,8 +2536,6 @@ void idDeclManagerLocal::ExportDeclsToTrenchBroom_f( const idCmdArgs& args )
|
|||
|
||||
postLoadExportModels.SetBool( false );
|
||||
|
||||
|
||||
|
||||
declManagerLocal.Reload( true );
|
||||
}
|
||||
// RB end
|
||||
|
|
|
@ -37,6 +37,7 @@ idCVar preload_MapModels( "preload_MapModels", "1", CVAR_SYSTEM | CVAR_BOOL, "pr
|
|||
|
||||
// RB begin
|
||||
idCVar postLoadExportModels( "postLoadExportModels", "0", CVAR_BOOL | CVAR_RENDERER, "export models after loading to OBJ model format" );
|
||||
idCVar postLoadExportModelName( "postLoadExportModelName", "", CVAR_SYSTEM | CVAR_RENDERER, "" );
|
||||
// RB end
|
||||
|
||||
class idRenderModelManagerLocal : public idRenderModelManager
|
||||
|
@ -330,7 +331,27 @@ idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool
|
|||
// in memory as well
|
||||
model->TouchData();
|
||||
}
|
||||
|
||||
model->SetLevelLoadReferenced( true );
|
||||
|
||||
// RB ugly HACK set postLoadExportModelName for exportFGB
|
||||
if( postLoadExportModels.GetBool() && ( model != defaultModel && model != beamModel && model != spriteModel ) )
|
||||
{
|
||||
idStrStatic< MAX_OSPATH > exportedFileName;
|
||||
|
||||
exportedFileName = "exported/rendermodels/";
|
||||
|
||||
if( com_editors & EDITOR_EXPORTDEFS )
|
||||
{
|
||||
exportedFileName = "_tb/";
|
||||
}
|
||||
|
||||
exportedFileName.AppendPath( canonical );
|
||||
exportedFileName.SetFileExtension( ".obj" );
|
||||
|
||||
postLoadExportModelName.SetString( exportedFileName );
|
||||
}
|
||||
|
||||
return model;
|
||||
}
|
||||
}
|
||||
|
@ -367,7 +388,6 @@ idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool
|
|||
|
||||
if( model != NULL )
|
||||
{
|
||||
|
||||
generatedFileName = "generated/rendermodels/";
|
||||
generatedFileName.AppendPath( canonical );
|
||||
generatedFileName.SetFileExtension( va( "b%s", extension.c_str() ) );
|
||||
|
@ -447,12 +467,21 @@ idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool
|
|||
idStrStatic< MAX_OSPATH > exportedFileName;
|
||||
|
||||
exportedFileName = "exported/rendermodels/";
|
||||
|
||||
if( com_editors & EDITOR_EXPORTDEFS )
|
||||
{
|
||||
exportedFileName = "_tb/";
|
||||
}
|
||||
|
||||
exportedFileName.AppendPath( canonical );
|
||||
exportedFileName.SetFileExtension( ".obj" );
|
||||
|
||||
ID_TIME_T sourceTimeStamp = fileSystem->GetTimestamp( canonical );
|
||||
ID_TIME_T timeStamp = fileSystem->GetTimestamp( exportedFileName );
|
||||
|
||||
// ugly HACK
|
||||
postLoadExportModelName.SetString( exportedFileName );
|
||||
|
||||
// TODO only update if generated has changed
|
||||
|
||||
//if( timeStamp == FILE_NOT_FOUND_TIMESTAMP )
|
||||
|
|
Loading…
Reference in a new issue