forked from metin2/client
1
0
Fork 0
client/EterLib/ResourceManager.h

73 lines
2.4 KiB
C++

#pragma once
#include "Resource.h"
#include "FileLoaderThread.h"
#include <set>
#include <map>
#include <string>
class CResourceManager : public CSingleton<CResourceManager>
{
public:
CResourceManager();
virtual ~CResourceManager();
void LoadStaticCache(const char* c_szFileName);
void DestroyDeletingList();
void Destroy();
void BeginThreadLoading();
void EndThreadLoading();
CResource * InsertResourcePointer(DWORD dwFileCRC, CResource* pResource);
CResource * FindResourcePointer(DWORD dwFileCRC);
CResource * GetResourcePointer(const char * c_szFileName);
CResource * GetTypeResourcePointer(const char * c_szFileName, int iType=-1);
// Ãß°¡
bool isResourcePointerData(DWORD dwFileCRC);
void RegisterResourceNewFunctionPointer(const char* c_szFileExt, CResource* (*pResNewFunc)(const char* c_szFileName));
void RegisterResourceNewFunctionByTypePointer(int iType, CResource* (*pNewFunc) (const char* c_szFileName));
void DumpFileListToTextFile(const char* c_szFileName);
bool IsFileExist(const char * c_szFileName);
void Update();
void ReserveDeletingResource(CResource * pResource);
public:
void ProcessBackgroundLoading();
void PushBackgroundLoadingSet(std::set<std::string> & LoadingSet);
protected:
void __DestroyDeletingResourceMap();
void __DestroyResourceMap();
void __DestroyCacheMap();
DWORD __GetFileCRC(const char * c_szFileName, const char ** c_pszLowerFile = NULL);
protected:
typedef std::map<DWORD, CResource *> TResourcePointerMap;
typedef std::map<std::string, CResource* (*)(const char*)> TResourceNewFunctionPointerMap;
typedef std::map<int, CResource* (*)(const char*)> TResourceNewFunctionByTypePointerMap;
typedef std::map<CResource *, DWORD> TResourceDeletingMap;
typedef std::map<DWORD, std::string> TResourceRequestMap;
typedef std::map<long, CResource*> TResourceRefDecreaseWaitingMap;
protected:
TResourcePointerMap m_pCacheMap;
TResourcePointerMap m_pResMap;
TResourceNewFunctionPointerMap m_pResNewFuncMap;
TResourceNewFunctionByTypePointerMap m_pResNewFuncByTypeMap;
TResourceDeletingMap m_ResourceDeletingMap;
TResourceRequestMap m_RequestMap; // ¾²·¹µå·Î ·Îµù ¿äûÇÑ ¸®½ºÆ®
TResourceRequestMap m_WaitingMap;
TResourceRefDecreaseWaitingMap m_pResRefDecreaseWaitingMap;
static CFileLoaderThread ms_loadingThread;
};
extern int g_iLoadingDelayTime;