⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resmgr.h

📁 PC网络游戏的编程
💻 H
字号:
// 资源管理代码
// 作者: Janhail Luo
// 最后整理: 2003-03-03
//////////////////////////////////////////////////////////////////////
#ifndef _RESMGR_H_
#define _RESMGR_H_

#include <string>
#include <list>
#include <map>
using namespace std;

class CResMgr;

// 资源对象的基类
class CResObject
{
    friend class CResMgr;

public:
    // 构造函数
    CResObject();

    // 析构函数
    virtual ~CResObject();

    // 创建一个资源对象
    //     pResName为需要创建的对象的名字
    void CreateObject(const char* pResName);

    // 销毁当前的资源对象
    void DestroyObject();

    // 取得数据指针
    void* GetData();

    // 取得对象名字
    const char* GetName();

protected:
    // 创建一个对象的时候,会调用这个函数
    //     pResName为需要创建的对象的名字
    // 返回创建的对象的指针
    virtual void* OnCreateObject(const char* pResName) = 0;

    // 当销毁当前对象的时候会调用这个函数
    virtual void OnDestroyObject();

protected:
    void* m_pData;              // 保存对象数据的指针
    const char* m_pName;        // 当前对象的名字
    static CResMgr* m_pResMgr;  // 对象管理实例的指针
};

// 资源管理类
class CResMgr
{
    friend class CResObject;

protected:
    // 构造函数
    CResMgr();

    // 析构函数
    ~CResMgr();

protected:
    // 注册一个对象到使用资源的列表中
    //     pResObj 是需要注册的对象的指针
    //     pName 是需要注册的对象的名字
    // 如果当前对象已经注册,就把对象加入到使用资源的列表中
    //     同时修改对象的数据,使名字和数据指针指向当前资源
    // 如果当前对象没有注册,就创建一个对象
    //     同时把这个对象加入使用资源的列表中
    void RegisterRes(CResObject* pResObj, const char* pName);

    // 把已经注册的对象注销
    void UnregisterRes(CResObject* pResObj);

    // 检查是否已经没有资源对象
    // 如果没有资源对象就返回true
    // 否则返回false
    bool Empty();

protected:
    struct SItem
    {
        void* pData;                // 数据指针
        list<CResObject*> objList;  // 对象列表
    };

protected:
    map<string, SItem>  m_Item;     // 资源列表
};

#endif // _RESMGR_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -