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

📄 core.h

📁 HGE 2D游戏引擎制作的一个演示
💻 H
字号:
#ifndef CORE_H
#define CORE_H

#include "define.h"

// 引擎版本
#define CORE_VERSION 0x0001

#define EXPORT
#define CALL

// 通用数据类型
//#ifndef DWORD
//typedef unsigned long       DWORD;
//typedef unsigned short      WORD;
//typedef unsigned char       BYTE;
//#endif

// 通用数学常量
#ifndef M_PI
#define M_PI	3.14159265358979323846f
#define M_PI_2	1.57079632679489661923f
#define M_PI_4	0.785398163397448309616f
#define M_1_PI	0.318309886183790671538f
#define M_2_PI	0.636619772367581343076f
#endif

// 引擎句柄类型
typedef DWORD HTEXTURE;			//纹理
typedef DWORD HTARGET;			//渲染目标
typedef DWORD HEFFECT;			//音效
typedef DWORD HMUSIC;			//音乐
typedef DWORD HSTREAM;			//压缩音频流
typedef DWORD HCHANNEL;			//活动音频频道(音轨)

// 支持颜色宏
#define ARGB(a,r,g,b)	((DWORD(a)<<24) + (DWORD(r)<<16) + (DWORD(g)<<8) + DWORD(b))
#define GETA(col)		((col)>>24)
#define GETR(col)		(((col)>>16) & 0xFF)
#define GETG(col)		(((col)>>8) & 0xFF)
#define GETB(col)		((col) & 0xFF)
#define SETA(col,a)		(((col) & 0x00FFFFFF) + (DWORD(a)<<24))
#define SETR(col,r)		(((col) & 0xFF00FFFF) + (DWORD(r)<<16))
#define SETG(col,g)		(((col) & 0xFFFF00FF) + (DWORD(g)<<8))
#define SETB(col,b)		(((col) & 0xFFFFFF00) + DWORD(b))

// 引擎混合常数
#define	BLEND_COLORADD		1
#define	BLEND_COLORMUL		0
#define	BLEND_ALPHABLEND	2
#define	BLEND_ALPHAADD		0
#define	BLEND_ZWRITE		4
#define	BLEND_NOZWRITE		0

#define BLEND_DEFAULT		(BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE)
#define BLEND_DEFAULT_Z		(BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_ZWRITE)

// CORE 基本类型常数
#define COREPRIM_LINES		2
#define COREPRIM_TRIPLES	3
#define COREPRIM_QUADS		4

// 引擎顶点结构
struct st_Vertex
{
	float			x, y;		// 屏幕坐标  
	float			z;			// Z-buffer(范围:0-1)
	DWORD			col;		// 颜色
	float			tx, ty;		// 纹理坐标
};

// 引擎三角结构
struct st_Triple
{
	st_Vertex		v[3];
	HTEXTURE		tex;
	int				blend;
};

// 引擎矩形结构
struct st_Quad
{
	st_Vertex		v[4];
	HTEXTURE		tex;
	int				blend;
};

class CORE
{
public:
	///////////////////////////// 接口创建与释放 /////////////////////////////
	virtual void		CALL Release() = 0;
	virtual char*		CALL GetAppPath() = 0;

	///////////////////////////// 系统操作 /////////////////////////////
	virtual bool		CALL System_Shutup() = 0;
	virtual void		CALL System_Shutdown() = 0;
	virtual char*		CALL System_GetErrorMessage() = 0;
	virtual bool		CALL System_Launch(const char *url) = 0;
	virtual void		CALL System_Snapshot(const char *filename=0) = 0;

	///////////////////////////// 引擎状态设置 /////////////////////////////
	virtual void		CALL System_SetZBuffer(bool bZBuffer = false) = 0;
	virtual void		CALL System_SetTextureFilter(bool bTextureFilter = true) = 0;
	virtual void		CALL System_SetUseSound(bool bUseSound = false) = 0;
	virtual void		CALL System_SetHWnd(HWND hWnd) = 0;
	virtual void		CALL System_SetScreen(int nWidth,int nHeight,int nBPP = 32) = 0;
	virtual void		CALL System_SetSampleRate(int nSampleRate = 44100) = 0;
	virtual void		CALL System_SetFXVolume(int nFXVolume = 100) = 0;
	virtual void		CALL System_SetMusicVolume(int nMusicVolume = 100) = 0;
	virtual void		CALL System_SetIniFile(char* lpszIniFile = NULL) = 0;
	virtual void		CALL System_SetWndRectStyle(RECT &rcWindow,LONG lStyle) = 0;

	///////////////////////////// 引擎状态获得 /////////////////////////////
	virtual bool		CALL System_GetZBuffer() = 0;
	virtual bool		CALL System_GetTextureFilter() = 0;
	virtual bool		CALL System_GetUseSound() = 0;
	virtual HWND		CALL System_GetHWnd() = 0;
	virtual int			CALL System_GetWidth() = 0;
	virtual int			CALL System_GetHeight() = 0;
	virtual int			CALL System_GetBPP() = 0;
	virtual int			CALL System_GetSampleRate() = 0;
	virtual int			CALL System_GetFXVolume() = 0;
	virtual int			CALL System_GetMusicVolume() = 0;
	virtual char*		CALL System_GetIniFile() = 0;

	///////////////////////////// 资源操作 /////////////////////////////
	virtual void*		CALL Resource_Load(const char *filename, DWORD *size=0) = 0;
	virtual void		CALL Resource_Free(void *res) = 0;
	virtual bool		CALL Resource_AttachPack(const char *filename, const char *password=0) = 0;
	virtual void		CALL Resource_RemovePack(const char *filename) = 0;
	virtual void		CALL Resource_RemoveAllPacks() = 0;
	virtual char*		CALL Resource_MakePath(const char *filename) = 0;
	virtual char*		CALL Resource_EnumFiles(const char *wildcard=0) = 0;
	virtual char*		CALL Resource_EnumFolders(const char *wildcard=0) = 0;

	///////////////////////////// 配置文件读取 /////////////////////////////
	virtual void		CALL Ini_SetInt(const char *section, const char *name, int value) = 0;
	virtual int 		CALL Ini_GetInt(const char *section, const char *name, int def_val) = 0;
	virtual void		CALL Ini_SetFloat(const char *section, const char *name, float value) = 0;
	virtual float		CALL Ini_GetFloat(const char *section, const char *name, float def_val) = 0;
	virtual void		CALL Ini_SetString(const char *section, const char *name, const char *value) = 0;
	virtual char*		CALL Ini_GetString(const char *section, const char *name, const char *def_val) = 0;

	///////////////////////////// 音效操作 /////////////////////////////
	virtual HEFFECT		CALL Effect_Load(const char *filename, DWORD size=0) = 0;
	virtual void		CALL Effect_Free(HEFFECT eff) = 0;
	virtual HCHANNEL	CALL Effect_Play(HEFFECT eff) = 0;
	virtual HCHANNEL	CALL Effect_PlayEx(HEFFECT eff, int volume=100, int pan=0, float pitch=1.0f, bool loop=false) = 0;

	///////////////////////////// 音乐操作 /////////////////////////////
	virtual HMUSIC		CALL Music_Load(const char *filename, DWORD size=0) = 0;
	virtual void		CALL Music_Free(HMUSIC mus) = 0;
	virtual HCHANNEL	CALL Music_Play(HMUSIC mus, bool loop) = 0;

	///////////////////////////// 压缩音频流操作 /////////////////////////////
	virtual HSTREAM		CALL Stream_Load(const char *filename, DWORD size=0) = 0;
	virtual void		CALL Stream_Free(HSTREAM stream) = 0;
	virtual HCHANNEL	CALL Stream_Play(HSTREAM stream, bool loop, int volume = 100) = 0;

	///////////////////////////// 活动音频频道(音轨)操作 /////////////////////////////
	virtual void		CALL Channel_SetPanning(HCHANNEL chn, int pan) = 0;
	virtual void		CALL Channel_SetVolume(HCHANNEL chn, int volume) = 0;
	virtual void		CALL Channel_SetPitch(HCHANNEL chn, float pitch) = 0;
	virtual void		CALL Channel_Pause(HCHANNEL chn) = 0;
	virtual void		CALL Channel_Resume(HCHANNEL chn) = 0;
	virtual void		CALL Channel_Stop(HCHANNEL chn) = 0;
	virtual void		CALL Channel_StopAll() = 0;
	virtual bool		CALL Channel_IsPlaying(HCHANNEL chn) = 0;
	virtual float		CALL Channel_GetLength(HCHANNEL chn) = 0;
	virtual float		CALL Channel_GetPos(HCHANNEL chn) = 0;
	virtual void		CALL Channel_SetPos(HCHANNEL chn, float fSeconds) = 0;

	///////////////////////////// 绘制操作 /////////////////////////////
	virtual bool		CALL Gfx_BeginScene(HTARGET target=0) = 0;
	virtual void		CALL Gfx_EndScene() = 0;
	virtual void		CALL Gfx_Clear(DWORD color) = 0;
	virtual void		CALL Gfx_RenderLine(float x1, float y1, float x2, float y2, DWORD color=0xFFFFFFFF, float z=0.5f) = 0;
	virtual void		CALL Gfx_RenderTriple(const st_Triple *triple) = 0;
	virtual void		CALL Gfx_RenderQuad(const st_Quad *quad) = 0;
	virtual st_Vertex*	CALL Gfx_StartBatch(int prim_type, HTEXTURE tex, int blend, int *max_prim) = 0;
	virtual void		CALL Gfx_FinishBatch(int nprim) = 0;
	virtual void		CALL Gfx_SetClipping(int x=0, int y=0, int w=0, int h=0) = 0;
	virtual void		CALL Gfx_SetTransform(float x=0, float y=0, float dx=0, float dy=0, float rot=0, float hscale=0, float vscale=0) = 0; 
	virtual void		CALL Gfx_Restore(RECT& rcWnd) = 0;
	///////////////////////////// 目标操作 /////////////////////////////
	virtual HTARGET		CALL Target_Create(int width, int height, bool zbuffer) = 0;
	virtual void		CALL Target_Free(HTARGET target) = 0;
	virtual HTEXTURE	CALL Target_GetTexture(HTARGET target) = 0;

	///////////////////////////// 纹理操作 /////////////////////////////
	virtual HTEXTURE	CALL Texture_Create(int width, int height) = 0;
	virtual HTEXTURE	CALL Texture_Load(const char *filename, DWORD size=0, bool bMipmap=false) = 0;
	virtual void		CALL Texture_Free(HTEXTURE tex) = 0;
	virtual int			CALL Texture_GetWidth(HTEXTURE tex, bool bOriginal=false) = 0;
	virtual int			CALL Texture_GetHeight(HTEXTURE tex, bool bOriginal=false) = 0;
	virtual DWORD*		CALL Texture_Lock(HTEXTURE tex, bool bReadOnly=true, int left=0, int top=0, int width=0, int height=0) = 0;
	virtual void		CALL Texture_Unlock(HTEXTURE tex) = 0;

	///////////////////////////// 随机数 /////////////////////////////
	virtual void		CALL Random_Seed(int seed=0) = 0;
	virtual int			CALL Random_Int(int min, int max) = 0;
	virtual float		CALL Random_Float(float min, float max) = 0;

	///////////////////////////// 引擎时间 /////////////////////////////
	virtual float		CALL Timer_GetDelta() = 0;
	virtual void		CALL Timer_SetDelta(float dt) = 0;
	virtual DWORD		CALL Timer_GetTime() = 0;
	virtual void		CALL Timer_SetTime() = 0;

};

#define BASECORE st_BASECORE
struct st_BASECORE
{
	HWND hWnd;
	RECT rcWnd;
	LONG lStyleWnd;
	int nWidth;
    int nHeight;
	int nBPP;
};

extern "C" { EXPORT CORE*	CALL CoreCreate(int ver); };
extern "C" { EXPORT BOOL	CALL CoreInitialize(BASECORE& init,char* lpszInifile); };
extern "C" { EXPORT BOOL	CALL CoreDestroy(int ver); };

#endif

⌨️ 快捷键说明

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