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

📄 resourcemanager.h

📁 HGE 2D游戏引擎制作的一个演示
💻 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 + -