mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 09:49:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,287 @@
|
||||
//========= 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/dmemdlmakefile.h"
|
||||
#include "movieobjects/dmedag.h"
|
||||
#include "movieobjects/dmemdl.h"
|
||||
#include "datamodel/dmelementfactoryhelper.h"
|
||||
#include "datacache/imdlcache.h"
|
||||
#include "filesystem.h"
|
||||
#include "tier3/tier3.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Hook into datamodel
|
||||
//-----------------------------------------------------------------------------
|
||||
IMPLEMENT_ELEMENT_FACTORY( DmeSourceSkin, CDmeSourceSkin );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CDmeSourceSkin::OnConstruction()
|
||||
{
|
||||
m_SkinName.Init( this, "skinName" );
|
||||
m_bFlipTriangles.Init( this, "flipTriangles" );
|
||||
m_flScale.InitAndSet( this, "scale", 1.0f );
|
||||
}
|
||||
|
||||
void CDmeSourceSkin::OnDestruction()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// These can be built from DCC makefiles
|
||||
//-----------------------------------------------------------------------------
|
||||
static const char *s_pSkinMakeFiles[] =
|
||||
{
|
||||
"DmeMayaModelMakefile",
|
||||
"DmeXSIModelMakefile",
|
||||
NULL
|
||||
};
|
||||
|
||||
const char **CDmeSourceSkin::GetSourceMakefileTypes()
|
||||
{
|
||||
return s_pSkinMakeFiles;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Hook into datamodel
|
||||
//-----------------------------------------------------------------------------
|
||||
IMPLEMENT_ELEMENT_FACTORY( DmeSourceCollisionModel, CDmeSourceCollisionModel );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CDmeSourceCollisionModel::OnConstruction()
|
||||
{
|
||||
}
|
||||
|
||||
void CDmeSourceCollisionModel::OnDestruction()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// These can be built from DCC makefiles
|
||||
//-----------------------------------------------------------------------------
|
||||
const char **CDmeSourceCollisionModel::GetSourceMakefileTypes()
|
||||
{
|
||||
return s_pSkinMakeFiles;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Hook into datamodel
|
||||
//-----------------------------------------------------------------------------
|
||||
IMPLEMENT_ELEMENT_FACTORY( DmeSourceAnimation, CDmeSourceAnimation );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CDmeSourceAnimation::OnConstruction()
|
||||
{
|
||||
m_AnimationName.Init( this, "animationName" );
|
||||
m_SourceAnimationName.Init( this, "sourceAnimationName" );
|
||||
}
|
||||
|
||||
void CDmeSourceAnimation::OnDestruction()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// These can be built from DCC makefiles
|
||||
//-----------------------------------------------------------------------------
|
||||
static const char *s_pAnimationMakeFiles[] =
|
||||
{
|
||||
"DmeMayaAnimationMakefile",
|
||||
"DmeXSIAnimationMakefile",
|
||||
NULL
|
||||
};
|
||||
|
||||
const char **CDmeSourceAnimation::GetSourceMakefileTypes()
|
||||
{
|
||||
return s_pAnimationMakeFiles;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Hook into datamodel
|
||||
//-----------------------------------------------------------------------------
|
||||
IMPLEMENT_ELEMENT_FACTORY( DmeMDLMakefile, CDmeMDLMakefile );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CDmeMDLMakefile::OnConstruction()
|
||||
{
|
||||
m_hMDL = CreateElement< CDmeMDL >( "MDLMakefile Preview" );
|
||||
m_bFlushMDL = false;
|
||||
}
|
||||
|
||||
void CDmeMDLMakefile::OnDestruction()
|
||||
{
|
||||
DestroyElement( m_hMDL.Get() );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns source types
|
||||
//-----------------------------------------------------------------------------
|
||||
static DmeMakefileType_t s_pSourceTypes[] =
|
||||
{
|
||||
{ "DmeSourceSkin", "Skin", true, "makefiledir:models\\dmx", "*.dmx", "Valve DMX File (*.dmx)" },
|
||||
{ "DmeSourceAnimation", "Animation", false, "makefiledir:animations\\dmx", "*.dmx", "Valve DMX File (*.dmx)" },
|
||||
{ "DmeSourceCollisionModel", "Collision Model", true, "makefiledir:models\\dmx", "*.dmx", "Valve DMX File (*.dmx)" },
|
||||
{ NULL, NULL, false, NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
DmeMakefileType_t* CDmeMDLMakefile::GetSourceTypes()
|
||||
{
|
||||
return s_pSourceTypes;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Makefile type
|
||||
//-----------------------------------------------------------------------------
|
||||
static DmeMakefileType_t s_MakefileType =
|
||||
{
|
||||
"DmeMDLMakefile", "Model", true, "contentdir:models", "*.dmx", "Valve Model MakeFile (*.dmx)"
|
||||
};
|
||||
|
||||
|
||||
DmeMakefileType_t *CDmeMDLMakefile::GetMakefileType()
|
||||
{
|
||||
return &s_MakefileType;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Add, remove sources
|
||||
//-----------------------------------------------------------------------------
|
||||
void CDmeMDLMakefile::SetSkin( const char *pFullPath )
|
||||
{
|
||||
RemoveAllSources( "DmeSourceSkin" );
|
||||
AddSource( "DmeSourceSkin", pFullPath );
|
||||
}
|
||||
|
||||
void CDmeMDLMakefile::AddAnimation( const char *pFullPath )
|
||||
{
|
||||
AddSource( "animation", pFullPath );
|
||||
}
|
||||
|
||||
void CDmeMDLMakefile::RemoveAnimation( const char *pFullPath )
|
||||
{
|
||||
RemoveSource( "animation", pFullPath );
|
||||
}
|
||||
|
||||
void CDmeMDLMakefile::RemoveAllAnimations( )
|
||||
{
|
||||
RemoveAllSources( "animation" );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Inherited classes should re-implement these methods
|
||||
//-----------------------------------------------------------------------------
|
||||
CDmElement *CDmeMDLMakefile::CreateOutputElement( )
|
||||
{
|
||||
if ( m_bFlushMDL )
|
||||
{
|
||||
// Flush the model out of the cache; detach it from the MDL
|
||||
MDLHandle_t h = m_hMDL->GetMDL();
|
||||
if ( h != MDLHANDLE_INVALID )
|
||||
{
|
||||
g_pMDLCache->Flush( h );
|
||||
}
|
||||
m_bFlushMDL = false;
|
||||
}
|
||||
m_hMDL->SetMDL( MDLHANDLE_INVALID );
|
||||
|
||||
// FIXME: Should we ask the tool (studiomdl) for this?
|
||||
// Should we have output type names? Not sure yet..
|
||||
// Doing the simplest thing first.
|
||||
char pOutputName[MAX_PATH];
|
||||
Q_FileBase( GetFileName(), pOutputName, sizeof(pOutputName) );
|
||||
if ( !pOutputName[0] )
|
||||
return m_hMDL.Get();
|
||||
|
||||
char pOutputDir[MAX_PATH];
|
||||
GetOutputDirectory( pOutputDir, sizeof(pOutputDir) );
|
||||
if ( !pOutputDir[0] )
|
||||
return m_hMDL.Get();
|
||||
|
||||
Q_StripTrailingSlash( pOutputDir );
|
||||
char pFullPath[MAX_PATH];
|
||||
Q_snprintf( pFullPath, sizeof(pFullPath), "%s\\%s.mdl", pOutputDir, pOutputName );
|
||||
|
||||
char pRelativePath[MAX_PATH];
|
||||
g_pFullFileSystem->FullPathToRelativePathEx( pFullPath, "GAME", pRelativePath, sizeof( pRelativePath ) );
|
||||
|
||||
MDLHandle_t h = g_pMDLCache->FindMDL( pRelativePath );
|
||||
m_hMDL->SetMDL( h );
|
||||
return m_hMDL.Get();
|
||||
}
|
||||
|
||||
void CDmeMDLMakefile::DestroyOutputElement( CDmElement *pOutput )
|
||||
{
|
||||
m_bFlushMDL = true;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Compile assets
|
||||
//-----------------------------------------------------------------------------
|
||||
static const char *s_pOutputExtensions[] =
|
||||
{
|
||||
"dx80.vtx",
|
||||
"dx90.vtx",
|
||||
"sw.vtx",
|
||||
"mdl",
|
||||
"vvd",
|
||||
"phy",
|
||||
NULL
|
||||
};
|
||||
|
||||
void CDmeMDLMakefile::GetOutputs( CUtlVector<CUtlString> &fullPaths )
|
||||
{
|
||||
fullPaths.RemoveAll();
|
||||
|
||||
// FIXME: Should we ask the tool (studiomdl) for this?
|
||||
// Should we have output type names? Not sure yet..
|
||||
// Doing the simplest thing first.
|
||||
char pOutputName[MAX_PATH];
|
||||
Q_FileBase( GetFileName(), pOutputName, sizeof(pOutputName) );
|
||||
if ( !pOutputName[0] )
|
||||
return;
|
||||
|
||||
char pOutputDir[MAX_PATH];
|
||||
GetOutputDirectory( pOutputDir, sizeof(pOutputDir) );
|
||||
if ( !pOutputDir[0] )
|
||||
return;
|
||||
|
||||
Q_StripTrailingSlash( pOutputDir );
|
||||
char pFullPath[MAX_PATH];
|
||||
for ( int i = 0; s_pOutputExtensions[i]; ++i )
|
||||
{
|
||||
Q_snprintf( pFullPath, sizeof(pFullPath), "%s\\%s.%s", pOutputDir, pOutputName, s_pOutputExtensions[i] );
|
||||
fullPaths.AddToTail( pFullPath );
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user