//////////////////////////////////////////////////////////////////////////// // // Crytek Engine Source File. // Copyright (C), Crytek Studios, 2002. // ------------------------------------------------------------------------- // File name: objectloader.h // Version: v1.00 // Created: 15/8/2002 by Timur. // Compilers: Visual Studio.NET // Description: // ------------------------------------------------------------------------- // History: // //////////////////////////////////////////////////////////////////////////// #ifndef __objectloader_h__ #define __objectloader_h__ #if _MSC_VER > 1000 #pragma once #endif #include "ErrorReport.h" /** CObjectLoader used to load Bas Object and resolve ObjectId references while loading. */ class CObjectArchive { public: XmlNodeRef node; //!< Current archive node. bool bLoading; bool bUndo; CObjectArchive( IObjectManager *objMan,XmlNodeRef xmlRoot,bool loading ); ~CObjectArchive(); //! Resolve callback with only one parameter of CBaseObject. typedef Functor1 ResolveObjRefFunctor1; //! Resolve callback with two parameters one is pointer to CBaseObject and second use data integer. typedef Functor2 ResolveObjRefFunctor2; /** Register Object id. @param objectId Original object id from the file. @param realObjectId Changed object id. */ //void RegisterObjectId( int objectId,int realObjectId ); //! Set object resolve callback, it will be called once object with specified Id is loaded. void SetResolveCallback( CBaseObject *fromObject,REFGUID objectId,ResolveObjRefFunctor1 &func ); //! Set object resolve callback, it will be called once object with specified Id is loaded. void SetResolveCallback( CBaseObject *fromObject,REFGUID objectId,ResolveObjRefFunctor2 &func,uint userData ); //! Resolve all object ids and call callbacks on resolved objects. void ResolveObjects(); // Save object to archive. void SaveObject( CBaseObject *pObject ); //! Load multiple objects from archive. void LoadObjects( XmlNodeRef &rootObjectsNode ); //! Load one object from archive. CBaseObject* LoadObject( XmlNodeRef &objNode,CBaseObject *pPrevObject=NULL ); //! If true new loaded objects will be assigned new GUIDs. void MakeNewIds( bool bEnable ); //! Remap object ids. void RemapID( REFGUID oldId,REFGUID newId ); //! Report error during loading. void ReportError( CErrorRecord &err ); //! Assigner different error report class. void SetErrorReport( CErrorReport *errReport ); //! Display collected error reports. void ShowErrors(); private: IObjectManager* m_objectManager; struct Callback { ResolveObjRefFunctor1 func1; ResolveObjRefFunctor2 func2; uint userData; TSmartPtr fromObject; Callback() { func1 = 0; func2 = 0; userData = 0; }; }; typedef std::multimap Callbacks; Callbacks m_resolveCallbacks; // Set of all saved objects to this archive. typedef std::set ObjectsSet; ObjectsSet m_objectsSet; typedef std::multimap OrderedObjects; OrderedObjects m_orderedObjects; // Loaded objects IDs, used for remapping of GUIDs. std::map m_IdRemap; //! If true new loaded objects will be assigned new GUIDs. bool m_bMakeNewIds; CErrorReport *m_pCurrentErrorReport; }; #endif // __objectloader_h__