You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
6.0 KiB
164 lines
6.0 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// The copyright to the contents herein is the property of Valve, L.L.C.
|
||
|
// The contents may be used and/or copied only with the written permission of
|
||
|
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
|
||
|
// the agreement/contract under which the contents have been supplied.
|
||
|
//
|
||
|
// $Header: $
|
||
|
// $NoKeywords: $
|
||
|
//
|
||
|
// Converts from any one DMX file format to another
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
#include "dmserializers.h"
|
||
|
#include "dmserializers/idmserializers.h"
|
||
|
#include "appframework/iappsystem.h"
|
||
|
#include "filesystem.h"
|
||
|
#include "datamodel/idatamodel.h"
|
||
|
#include "datamodel/dmelementfactoryhelper.h"
|
||
|
#include "tier2/tier2.h"
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// format updater macros
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#define DECLARE_FORMAT_UPDATER( _name, _description, _extension, _version, _encoding ) \
|
||
|
class CDmFormatUpdater_ ## _name : public IDmFormatUpdater \
|
||
|
{ \
|
||
|
public: \
|
||
|
CDmFormatUpdater_ ## _name() {} \
|
||
|
virtual const char *GetName() const { return #_name; } \
|
||
|
virtual const char *GetDescription() const { return _description; } \
|
||
|
virtual const char *GetExtension() const { return _extension; } \
|
||
|
virtual const char *GetDefaultEncoding() const { return _encoding; } \
|
||
|
virtual int GetCurrentVersion() const { return _version; } \
|
||
|
virtual bool Update( CDmElement **pRoot, int nSourceVersion ) { return true; } \
|
||
|
}; \
|
||
|
static CDmFormatUpdater_ ## _name s_FormatUpdater ## _name; \
|
||
|
void InstallFormatUpdater_ ## _name( IDataModel *pFactory ) \
|
||
|
{ \
|
||
|
pFactory->AddFormatUpdater( &s_FormatUpdater ## _name ); \
|
||
|
}
|
||
|
|
||
|
#define INSTALL_FORMAT_UPDATER( _name ) InstallFormatUpdater_ ## _name( g_pDataModel )
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// format updaters
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
DECLARE_FORMAT_UPDATER( dmx, "Generic DMX", "dmx", 1, "binary" )
|
||
|
DECLARE_FORMAT_UPDATER( movieobjects, "Generic MovieObjects", "dmx", 1, "binary" )
|
||
|
DECLARE_FORMAT_UPDATER( sfm, "Generic SFM", "dmx", 1, "binary" )
|
||
|
DECLARE_FORMAT_UPDATER( sfm_session, "SFM Session", "dmx", 1, "binary" )
|
||
|
DECLARE_FORMAT_UPDATER( sfm_trackgroup, "SFM TrackGroup", "dmx", 1, "binary" )
|
||
|
DECLARE_FORMAT_UPDATER( pcf, "Particle Configuration File", "dmx", 1, "binary" )
|
||
|
DECLARE_FORMAT_UPDATER( preset, "Preset File", "dmx", 1, "keyvalues2" )
|
||
|
DECLARE_FORMAT_UPDATER( facial_animation, "Facial Animation File", "dmx", 1, "binary" )
|
||
|
DECLARE_FORMAT_UPDATER( model, "DMX Model", "dmx", 1, "binary" )
|
||
|
//DECLARE_FORMAT_UPDATER( animation, "DMX Animation", "dmx", 1, "binary" )
|
||
|
//DECLARE_FORMAT_UPDATER( dcc_makefile, "DMX Makefile", "dmx", 1, "keyvalues2" )
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// The application object
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CDmSerializers : public CBaseAppSystem< IDmSerializers >
|
||
|
{
|
||
|
typedef CBaseAppSystem< IDmSerializers > BaseClass;
|
||
|
|
||
|
public:
|
||
|
// Inherited from IAppSystem
|
||
|
virtual bool Connect( CreateInterfaceFn factory );
|
||
|
virtual void *QueryInterface( const char *pInterfaceName );
|
||
|
virtual InitReturnVal_t Init();
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Singleton interface
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static CDmSerializers g_DmSerializers;
|
||
|
IDmSerializers *g_pDmSerializers = &g_DmSerializers;
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Here's where the app systems get to learn about each other
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDmSerializers::Connect( CreateInterfaceFn factory )
|
||
|
{
|
||
|
if ( !BaseClass::Connect( factory ) )
|
||
|
return false;
|
||
|
|
||
|
if ( !factory( FILESYSTEM_INTERFACE_VERSION, NULL ) )
|
||
|
{
|
||
|
Warning( "DmSerializers needs the file system to function" );
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Here's the main point where all DM element classes get installed
|
||
|
// Necessary to do it here so all type symbols for all DME classes are set
|
||
|
// up prior to install
|
||
|
InstallDmElementFactories( );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Here's where systems can access other interfaces implemented by this object
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void *CDmSerializers::QueryInterface( const char *pInterfaceName )
|
||
|
{
|
||
|
if ( !V_strcmp( pInterfaceName, DMSERIALIZERS_INTERFACE_VERSION ) )
|
||
|
return (IDmSerializers*)this;
|
||
|
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Init, shutdown
|
||
|
//-----------------------------------------------------------------------------
|
||
|
InitReturnVal_t CDmSerializers::Init()
|
||
|
{
|
||
|
InitReturnVal_t nRetVal = BaseClass::Init();
|
||
|
if ( nRetVal != INIT_OK )
|
||
|
return nRetVal;
|
||
|
|
||
|
// Install non-dmx importers
|
||
|
InstallActBusyImporter( g_pDataModel );
|
||
|
InstallVMTImporter( g_pDataModel );
|
||
|
InstallVMFImporter( g_pDataModel );
|
||
|
|
||
|
// Install legacy dmx importers
|
||
|
InstallSFMV1Importer( g_pDataModel );
|
||
|
InstallSFMV2Importer( g_pDataModel );
|
||
|
InstallSFMV3Importer( g_pDataModel );
|
||
|
InstallSFMV4Importer( g_pDataModel );
|
||
|
InstallSFMV5Importer( g_pDataModel );
|
||
|
InstallSFMV6Importer( g_pDataModel );
|
||
|
InstallSFMV7Importer( g_pDataModel );
|
||
|
InstallSFMV8Importer( g_pDataModel );
|
||
|
InstallSFMV9Importer( g_pDataModel );
|
||
|
|
||
|
// install dmx format updaters
|
||
|
INSTALL_FORMAT_UPDATER( dmx );
|
||
|
INSTALL_FORMAT_UPDATER( movieobjects );
|
||
|
INSTALL_FORMAT_UPDATER( sfm );
|
||
|
INSTALL_FORMAT_UPDATER( sfm_session );
|
||
|
INSTALL_FORMAT_UPDATER( sfm_trackgroup );
|
||
|
INSTALL_FORMAT_UPDATER( pcf );
|
||
|
INSTALL_FORMAT_UPDATER( preset );
|
||
|
INSTALL_FORMAT_UPDATER( facial_animation );
|
||
|
INSTALL_FORMAT_UPDATER( model );
|
||
|
// INSTALL_FORMAT_UPDATER( animation );
|
||
|
// INSTALL_FORMAT_UPDATER( dcc_makefile );
|
||
|
|
||
|
return INIT_OK;
|
||
|
}
|
||
|
|