📄 resourcemanager.h
字号:
/**********************************************
资源管理器类
**********************************************/
#pragma once
#include "baseobject.h"
#include "RenderSprite.h"
#include "XmlParser.h"
#include "IDManager.h"
#define MAX_RESNAME 32 ///资源名最大长度
// 资源数据结构
struct st_Resource
{
union ///资源联合句柄
{
HTEXTURE hTexture; ///纹理句柄
HTARGET hTarget; ///目标
HEFFECT hEffect; ///音效
HMUSIC hMusic; ///音乐
HSTREAM hStream; ///流
HCHANNEL hChannel; ///通道
};
char szResName[MAX_RESNAME]; ///资源名
char szFileName[_MAX_PATH]; ///资源文件路径
};
// 动画项数据
class AniItem :
public RenderSprite
{
public:
AniItem(CORE* pCORE);
~AniItem(void);
public:
float PosX; ///相对GUI对象绘制的X坐标
float PosY; ///相对GUI对象绘制的Y坐标
float Rot; ///旋转角度(默认为0.0)
float Scale; ///缩放比例(默认为1.0)
WORD Waittime; ///显示时间(单位为毫秒)
public:
void InitAniItem(HTEXTURE tex, float x, float y, float w, float h);
void SetAniItem(float x,float y,float r,float s,BYTE a,WORD t = 1);
void RenderAniItem(float x,float y);
void Clone(AniItem& aniitem);
};
// 动画数据
struct st_Ani
{
char szResName[MAX_RESNAME];
char szFileName[_MAX_PATH]; ///资源文件路径
WORD CurAniItem; ///当前播放的动画项
int Repeat; ///动画需要重复播放多少次?
int CurRepeat; ///当前已经重复播放了多少次?
WORD Step; ///每个时间片递增几帧?为1是正常播放,加大可以实现跳帧,负值可以倒着放
DWORD Starttime; ///开始时间
vector <AniItem*> AniItemArray; ///动画项池
public:
void InitData(); ///初始化数据
void FreeAllAniItem(); ///释放所有动画项
size_t GetAniItemCount(); ///获取当前动画的动画项总数
AniItem *GetCurAniItem(); ///获取当前动画项指针
AniItem *GetAniItem(WORD id); ///获取指定动画项指针
void Play(int nRepeat); ///播放动画
void Updata(float dt); ///刷新动画项,检查是否可以进入下一项
void GotoNextFrame();
void Clone(st_Ani* pAni);
};
// 资源类型
enum RESTYPE
{
RESTYPE_TEX = 0,
RESTYPE_ANI = 1,
RESTYPE_ANIITEM = 2,
RESTYPE_SND = 3
};
// 资源管理器
class ResourceManager :
public BaseObject
{
public:
ResourceManager(void);
~ResourceManager(void);
static HWND m_hLoadWnd; ///该窗口会收到加载进度比例
protected:
CORE* m_pCORE; ///CORE指针
HWND m_hMainWnd; ///主窗口句柄
bool m_bActivity; ///是否活跃状态
bool m_bFromScriptLoad; ///判断是否从脚本加载
public:
bool InitResManager(CORE* pCORE); ///创建资源管理器
bool DestroyResManager(); ///销毁资源管理器
bool LoadResourceFromScript(char* lpszScriptFile); ///从脚本加载所有资源
bool LoadAniFromScript(char* lpszScriptFile,st_Ani *pAni); ///读取一个动画项
bool LoadTexFromFile(char* lpszFile,const char* lpszName); ///直接从文件加载一个纹理资源
bool LoadAniFromFile(char* lpszFile,const char* lpszName); ///直接从文件加载一个动画资源
bool LoadSndFromFile(char* lpszFile,const char* lpszName); ///直接从文件加载一个声音资源
bool LoadTexFromRC(LONG rcID,LPTSTR lpType,const char* lpszName); ///从IDE资源视图的列表中加载一个纹理视图
bool LoadSndFromRC(LONG rcID,LPTSTR lpType,const char* lpszName); ///从IDE资源视图的列表中加载一个纹理声音
public:
char* GetFullPath(char* lpszPath);
protected:
vector <st_Resource*> m_pTexArray; ///图片资源池
vector <st_Resource*> m_pSndArray; ///声音资源池
vector <st_Ani*> m_pAniArray; ///动画资源池
IDManager* m_pTempAniID; ///临时资源ID
public:
bool AddTex(st_Resource* pnewtex); ///添加一个图片资源
bool AddSnd(st_Resource* pnewsnd); ///添加一个声音资源
bool AddAni(st_Ani* pnewani); ///添加一个动画资源
bool AddAniItem(st_Ani* pani,AniItem* paniitem); ///给一个动画资源添加一个动画项
size_t GetTexCount(); ///获取图片资源总数
size_t GetSndCount(); ///获取声音资源总数
size_t GetAniCount(); ///获取动画资源总数
float GetTexWidth(char* lpszName); ///获取指定图片宽
float GetTexHeight(char* lpszName); ///获取指定图片高
st_Resource* GetTexPtrFromID(size_t id); ///获取指定ID图片资源
st_Resource* GetSndPtrFromID(size_t id); ///获取指定ID声音资源
st_Ani* GetAniPtrFromID(size_t id); ///获取指定ID动画资源
st_Resource* GetTexPtrFromName(char* lpszName); ///获取指定名字图片资源
st_Resource* GetSndPtrFromName(char* lpszName); ///获取指定名字声音资源
st_Ani* GetAniPtrFromName(char* lpszName); ///获取指定名字动画资源
st_Resource* CreateTempTex(int w,int h,DWORD col=0xffffffff); ///创建一个指定宽高颜色的临时透明图片资源
WORD GetTempAniID(st_Ani* pAni); ///获取一个临时动画的ID
st_Ani* GetTempAniPtr(WORD id); ///根据id获得一个临时动画指针
void RecoveTempAniID(WORD id); ///回收一个ID
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -