//////////////////////////////////////////////////////////////////////////// // // Crytek Engine Source File. // Copyright (C), Crytek Studios, 2002. // ------------------------------------------------------------------------- // File name: baselibrarymanager.h // Version: v1.00 // Created: 10/6/2003 by Timur. // Compilers: Visual Studio.NET // Description: // ------------------------------------------------------------------------- // History: // //////////////////////////////////////////////////////////////////////////// #ifndef __baselibrarymanager_h__ #define __baselibrarymanager_h__ #pragma once #include "IDataBaseItem.h" #include "IDataBaseLibrary.h" #include "IDataBaseManager.h" class CBaseLibraryItem; class CBaseLibrary; /** Manages all Libraries and Items. */ class CBaseLibraryManager : public TRefCountBase, public IDocListener { public: CBaseLibraryManager(); ~CBaseLibraryManager(); //! Clear all libraries. virtual void ClearAll(); ////////////////////////////////////////////////////////////////////////// // IDocListener implementation. ////////////////////////////////////////////////////////////////////////// virtual void OnNewDocument(); virtual void OnLoadDocument(); virtual void OnCloseDocument(); virtual void OnMissionChange(); ////////////////////////////////////////////////////////////////////////// // Library items. ////////////////////////////////////////////////////////////////////////// //! Make a new item in specified library. virtual IDataBaseItem* CreateItem( IDataBaseLibrary *pLibrary ); //! Delete item from library and manager. virtual void DeleteItem( IDataBaseItem* pItem ); //! Find Item by its GUID. virtual IDataBaseItem* FindItem( REFGUID guid ) const; virtual IDataBaseItem* FindItemByName( const CString &fullItemName ); ////////////////////////////////////////////////////////////////////////// // Libraries. ////////////////////////////////////////////////////////////////////////// //! Add Item library. virtual IDataBaseLibrary* AddLibrary( const CString &library ); virtual void DeleteLibrary( const CString &library ); //! Get number of libraries. virtual int GetLibraryCount() const { return m_libs.size(); }; //! Get Item library by index. virtual IDataBaseLibrary* GetLibrary( int index ) const; //! Find Items Library by name. virtual IDataBaseLibrary* FindLibrary( const CString &library ); //! Load Items library. virtual IDataBaseLibrary* LoadLibrary( const CString &filename ); //! Save all modified libraries. virtual void SaveAllLibs(); //! Serialize property manager. virtual void Serialize( XmlNodeRef &node,bool bLoading ); //! Export items to game. virtual void Export( XmlNodeRef &node ) {}; //void AddNotifyListener( //! Returns unique name base on input name. virtual CString MakeUniqItemName( const CString &name ); virtual CString MakeFullItemName( IDataBaseLibrary *pLibrary,const CString &group,const CString &itemName ); //! Root node where this library will be saved. virtual CString GetRootNodeName() = 0; //! Path to libraries in this manager. virtual CString GetLibsPath() = 0; ////////////////////////////////////////////////////////////////////////// //! Validate library items for errors. void Validate(); ////////////////////////////////////////////////////////////////////////// void GatherUsedResources( CUsedResources &resources ); ////////////////////////////////////////////////////////////////////////// void RegisterItem( CBaseLibraryItem *pItem,REFGUID newGuid ); void RegisterItem( CBaseLibraryItem *pItem ); void UnregisterItem( CBaseLibraryItem *pItem ); protected: void SplitFullItemName( const CString &fullItemName,CString &libraryName,CString &itemName ); ////////////////////////////////////////////////////////////////////////// // Must be overriden. //! Makes a new Item. virtual CBaseLibraryItem* MakeNewItem() = 0; virtual CBaseLibrary* MakeNewLibrary() = 0; ////////////////////////////////////////////////////////////////////////// virtual void ReportDuplicateItem( CBaseLibraryItem *pItem,CBaseLibraryItem *pOldItem ); //! Array of all loaded entity items libraries. std::vector > m_libs; // There is always one current level library. TSmartPtr m_pLevelLibrary; // GUID to item map. typedef std::map,guid_less_predicate> ItemsMap; ItemsMap m_itemsMap; }; #endif // __baselibrarymanager_h__