|
|
//========= 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; }
|