diff options
Diffstat (limited to 'movieobjects/dmedccmakefile.cpp')
| -rw-r--r-- | movieobjects/dmedccmakefile.cpp | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/movieobjects/dmedccmakefile.cpp b/movieobjects/dmedccmakefile.cpp new file mode 100644 index 0000000..458fd33 --- /dev/null +++ b/movieobjects/dmedccmakefile.cpp @@ -0,0 +1,323 @@ +//========= 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; +} + + |