mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 22:27:05 +00:00
324 lines
9.4 KiB
C++
324 lines
9.4 KiB
C++
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Describes an asset: something that is compiled from sources,
|
||
|
// in potentially multiple steps, to a compiled resource
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
|
||
|
#include "movieobjects/dmedccmakefile.h"
|
||
|
#include "datamodel/dmelementfactoryhelper.h"
|
||
|
#include "tier2/fileutils.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Hook into datamodel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeSourceDCCFile, CDmeSourceDCCFile );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDmeSourceDCCFile::OnConstruction()
|
||
|
{
|
||
|
m_RootDCCObjects.Init( this, "rootDCCObjects" );
|
||
|
m_ExportType.InitAndSet( this, "exportType", 0 );
|
||
|
m_FrameStart.InitAndSet( this, "frameStart", 0.0f );
|
||
|
m_FrameEnd.InitAndSet( this, "frameEnd", 0.0f );
|
||
|
m_FrameIncrement.InitAndSet( this, "frameIncrement", 1.0f );
|
||
|
}
|
||
|
|
||
|
void CDmeSourceDCCFile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Hook into datamodel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeSourceMayaFile, CDmeSourceMayaFile );
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeSourceMayaModelFile, CDmeSourceMayaModelFile );
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeSourceMayaAnimationFile, CDmeSourceMayaAnimationFile );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDmeSourceMayaFile::OnConstruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeSourceMayaFile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeSourceMayaModelFile::OnConstruction()
|
||
|
{
|
||
|
m_ExportType = 0;
|
||
|
}
|
||
|
|
||
|
void CDmeSourceMayaModelFile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeSourceMayaAnimationFile::OnConstruction()
|
||
|
{
|
||
|
m_ExportType = 1;
|
||
|
}
|
||
|
|
||
|
void CDmeSourceMayaAnimationFile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Hook into datamodel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeSourceXSIFile, CDmeSourceXSIFile );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDmeSourceXSIFile::OnConstruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeSourceXSIFile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Hook into datamodel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeDCCMakefile, CDmeDCCMakefile );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDmeDCCMakefile::OnConstruction()
|
||
|
{
|
||
|
m_bFlushFile = false;
|
||
|
}
|
||
|
|
||
|
void CDmeDCCMakefile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Compile assets
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDmeDCCMakefile::GetOutputs( CUtlVector<CUtlString> &fullPaths )
|
||
|
{
|
||
|
fullPaths.RemoveAll();
|
||
|
|
||
|
char pOutputName[MAX_PATH];
|
||
|
Q_FileBase( GetFileName(), pOutputName, sizeof(pOutputName) );
|
||
|
if ( !pOutputName[0] )
|
||
|
return;
|
||
|
|
||
|
// FIXME: We need to come up with an appropriate directory structure for export
|
||
|
char pOutputDir[MAX_PATH];
|
||
|
GetMakefilePath( pOutputDir, sizeof(pOutputDir) );
|
||
|
if ( !pOutputDir[0] )
|
||
|
return;
|
||
|
|
||
|
Q_StripTrailingSlash( pOutputDir );
|
||
|
char pFullPath[MAX_PATH];
|
||
|
Q_snprintf( pFullPath, sizeof(pFullPath), "%s\\%s.dmx", pOutputDir, pOutputName );
|
||
|
fullPaths.AddToTail( pFullPath );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Creates, destroys the output element associated with this makefile
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CDmElement *CDmeDCCMakefile::CreateOutputElement( )
|
||
|
{
|
||
|
if ( m_bFlushFile )
|
||
|
{
|
||
|
m_bFlushFile = false;
|
||
|
if ( GetFileId() != DMFILEID_INVALID )
|
||
|
{
|
||
|
// NOTE: CDmeHandles will correctly re-hook up to the new makefile after load
|
||
|
// If the file fails to load, we have the copy. If the file correctly has the make in it
|
||
|
// it will replace this copy I made
|
||
|
CDmeHandle< CDmeDCCMakefile > hMakefileOld;
|
||
|
hMakefileOld = this;
|
||
|
|
||
|
// NOTE NOTE NOTE
|
||
|
// UnloadFile essentially calls delete this!
|
||
|
// So don't refer to any state in this DmElement after that
|
||
|
DmFileId_t fileId = GetFileId();
|
||
|
g_pDataModel->UnloadFile( fileId );
|
||
|
|
||
|
CDmElement *pRoot = NULL;
|
||
|
if ( g_pDataModel->RestoreFromFile( g_pDataModel->GetFileName( fileId ), NULL, NULL, &pRoot, CR_DELETE_OLD ) != DMFILEID_INVALID )
|
||
|
{
|
||
|
// NOTE: Unload/restore kills the this pointer, we need to redo this
|
||
|
if ( hMakefileOld.Get() )
|
||
|
{
|
||
|
hMakefileOld->SetDirty( false );
|
||
|
return hMakefileOld->CreateOutputElement();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// NOTE: We expect file backup prior to compile to avoid really fatal errors
|
||
|
// This case happens if the file failed to load. In this case, we must use
|
||
|
// the copy of the makefile
|
||
|
Assert( 0 );
|
||
|
return NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// The output element is the root element containing the makefile
|
||
|
return FindReferringElement< CDmElement >( this, "makefile" );
|
||
|
}
|
||
|
|
||
|
void CDmeDCCMakefile::DestroyOutputElement( CDmElement *pOutput )
|
||
|
{
|
||
|
m_bFlushFile = true;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Hook into datamodel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeMayaMakefile, CDmeMayaMakefile );
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeMayaModelMakefile, CDmeMayaModelMakefile );
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeMayaAnimationMakefile, CDmeMayaAnimationMakefile );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDmeMayaMakefile::OnConstruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeMayaMakefile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeMayaModelMakefile::OnConstruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeMayaModelMakefile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeMayaAnimationMakefile::OnConstruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeMayaAnimationMakefile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Returns source types
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static DmeMakefileType_t s_pMayaModelSourceTypes[] =
|
||
|
{
|
||
|
{ "DmeSourceMayaModelFile", "Maya Model File", true, "makefiledir:../maya", "*.ma;*.mb", "Maya File (*.ma,*.mb)" },
|
||
|
{ NULL, NULL, false, NULL, NULL, NULL },
|
||
|
};
|
||
|
|
||
|
DmeMakefileType_t* CDmeMayaModelMakefile::GetSourceTypes()
|
||
|
{
|
||
|
return s_pMayaModelSourceTypes;
|
||
|
}
|
||
|
|
||
|
static DmeMakefileType_t s_pMayaAnimationSourceTypes[] =
|
||
|
{
|
||
|
{ "DmeSourceMayaAnimationFile", "Maya Animation File", true, "makefiledir:../maya", "*.ma;*.mb", "Maya File (*.ma,*.mb)" },
|
||
|
{ NULL, NULL, false, NULL, NULL, NULL },
|
||
|
};
|
||
|
|
||
|
DmeMakefileType_t* CDmeMayaAnimationMakefile::GetSourceTypes()
|
||
|
{
|
||
|
return s_pMayaAnimationSourceTypes;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Makefile type
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static DmeMakefileType_t s_MayaModelMakefileType =
|
||
|
{
|
||
|
"DmeMayaModelMakefile", "Maya Model Component", true, "contentdir:models", "*.dmx", "DMX File (*.dmx)"
|
||
|
};
|
||
|
|
||
|
DmeMakefileType_t *CDmeMayaModelMakefile::GetMakefileType()
|
||
|
{
|
||
|
return &s_MayaModelMakefileType;
|
||
|
}
|
||
|
|
||
|
static DmeMakefileType_t s_MayaAnimationMakefileType =
|
||
|
{
|
||
|
"DmeMayaAnimationMakefile", "Maya Animation Component", true, "contentdir:models", "*.dmx", "DMX File (*.dmx)"
|
||
|
};
|
||
|
|
||
|
DmeMakefileType_t *CDmeMayaAnimationMakefile::GetMakefileType()
|
||
|
{
|
||
|
return &s_MayaAnimationMakefileType;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Hook into datamodel
|
||
|
//-----------------------------------------------------------------------------
|
||
|
IMPLEMENT_ELEMENT_FACTORY( DmeXSIMakefile, CDmeXSIMakefile );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDmeXSIMakefile::OnConstruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CDmeXSIMakefile::OnDestruction()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Returns source types
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static DmeMakefileType_t s_pXSISourceTypes[] =
|
||
|
{
|
||
|
{ "DmeSourceXSIFile", "XSI File", true, "makefiledir:../xsi", "*.xsi", "XSI File (*.xsi)" },
|
||
|
{ NULL, NULL, false, NULL, NULL, NULL },
|
||
|
};
|
||
|
|
||
|
DmeMakefileType_t* CDmeXSIMakefile::GetSourceTypes()
|
||
|
{
|
||
|
return s_pXSISourceTypes;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Makefile type
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static DmeMakefileType_t s_XSIMakefileType =
|
||
|
{
|
||
|
"DmeXSIMakefile", "XSI Model Component", true, "contentdir:models", "*.dmx", "DMX File (*.dmx)",
|
||
|
};
|
||
|
|
||
|
DmeMakefileType_t *CDmeXSIMakefile::GetMakefileType()
|
||
|
{
|
||
|
return &s_XSIMakefileType;
|
||
|
}
|
||
|
|
||
|
|