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.
163 lines
6.0 KiB
163 lines
6.0 KiB
//========= 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; |
|
} |
|
|
|
|