summaryrefslogtreecommitdiff
path: root/movieobjects/dmedccmakefile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'movieobjects/dmedccmakefile.cpp')
-rw-r--r--movieobjects/dmedccmakefile.cpp323
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;
+}
+
+