Files
FC1/Editor/BaseLibraryManager.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

131 lines
4.4 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// 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<IDataBaseManager>, 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<TSmartPtr<CBaseLibrary> > m_libs;
// There is always one current level library.
TSmartPtr<CBaseLibrary> m_pLevelLibrary;
// GUID to item map.
typedef std::map<GUID,TSmartPtr<CBaseLibraryItem>,guid_less_predicate> ItemsMap;
ItemsMap m_itemsMap;
};
#endif // __baselibrarymanager_h__