hge.h & hge_impl.h |
hge.h是给用户的,所以在这里会列出所有的用户能使用的接口。
hge_impl.h是引擎的具体实现,在这里除了给用户的接口实现之外还有额外的实现过程中的具体的其他函数与属性。
hge.h和hge_impl.h中,根据我们前面所说的模块来进行划分。在这里将系统划分为几个模块,然而并不需要全部记下来了,因为后面遇到的时候我们在会过来看模块中包含的接口,也就是我们需要看的接口就可以了。
system module |
在这个模块中,就是一个引擎的运行的过程。在HGE引擎的运行中,也是在这部分:填写WNDCLASS(HGE中是这个,但是现在我们可以考虑用WNDCLASSEX);注册类RegisterClassEx;生成窗口CreateWindow;显示窗口ShowWindow。
system module |
virtual bool CALL System_Initiate() = 0; virtual void CALL System_Shutdown() = 0; virtual bool CALL System_Start() = 0; virtual char* CALL System_GetErrorMessage() = 0; virtual void CALL System_Log(const char *format, ...) = 0; virtual bool CALL System_Launch(const char *url) = 0; virtual void CALL System_Snapshot(const char *filename=0) = 0; |
void _FocusChange(bool bAct); void _PostError(char *error); void _AdjustWindow(); void _Resize(int width, int height); |
上面提供的接口中,System开头的是引擎提供给外部的可调用的接口,这些接口刚好可以表现出一个引擎运行的所有过程。如前面一篇最后画出引擎的运行的方案。
在第一个接口System_Initiate中,窗口的创建就在这部分。再接下来的过程中,我要将窗口这部分抽出来。所以在下面的这些下面的这些内部接口会使用。
这些内部接口中,_AdjustWindow和_Resize是关于窗口的,暂时先提出来;_PostError是System_Log的一个封装,提供给内部记录所有的引擎的过程中的错误、初始化、dx参数的属性的记录,这些都是属于杂项的部分,在这里先提出来,并实现,是为了更好的记录引擎的创建的中会遇到的问题。
Input Module |
这个模块中,HGE的输入模块是在window的按键、鼠标的监控中实现的。没有用到Direct Input。
Input Module |
virtual void CALL Input_GetMousePos(float *x, float *y) = 0; virtual void CALL Input_SetMousePos(float x, float y) = 0; virtual int CALL Input_GetMouseWheel() = 0; virtual bool CALL Input_IsMouseOver() = 0; virtual bool CALL Input_KeyDown(int key) = 0; virtual bool CALL Input_KeyUp(int key) = 0; virtual bool CALL Input_GetKeyState(int key) = 0; virtual char* CALL Input_GetKeyName(int key) = 0; virtual int CALL Input_GetKey() = 0; virtual int CALL Input_GetChar() = 0; virtual bool CALL Input_GetEvent(hgeInputEvent *event) = 0; |
void _UpdateMouse(); void _InputInit(); void _ClearQueue(); void _BuildEvent(int type, int key, int scan, int flags, int x, int y); |
对外的接口提供给用户查询按键、鼠标的信息,并且获取输入事件;内部的实现的接口,则如果接口一般:初始化输入模块;更新鼠标;创造输入事件;清理已有的输入事件。
Resource Module |
这个模块负责从硬盘把所有的数据都加载到程序中,方便程序的其他模块调用这些数据。
Resource Module |
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) = 0; virtual char* CALL Resource_EnumFiles(const char *wildcard=0) = 0; virtual char* CALL Resource_EnumFolders(const char *wildcard=0) = 0; |
// nothing |
Graphics Module |
这个模块是引擎中最核心的模块,在这里要完成对DX的初始化,然后设定DX的固定流水线,最后使用DX绘制图形。
Graphics Module |
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 hgeTriple *triple) = 0; virtual void CALL Gfx_RenderQuad(const hgeQuad *quad) = 0; virtual hgeVertex* 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 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 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; |
bool _GfxInit(); void _GfxDone(); bool _GfxRestore(); void _AdjustWindow(); void _Resize(int width, int height); bool _init_lost(); void _render_batch(bool bEndScene=false); int _format_id(D3DFORMAT fmt); void _SetBlendMode(int blend); void _SetProjectionMatrix(int width, int height); |
对外的接口中分为三个部分:DX的初始、设置;图形的纹理的加载;渲染目标的管理。
内部的接口中实现了对DX的初始化,渲染方式等。这里原来window的接口中,放在这里是因为在dx的改变中会相应的改变窗口的设定。
图形渲染系统是引擎中最主要的部分,在这里对外提供的功能能然该用户直接在组合这些功能之后得到自己需要的结果。而引擎要做的就是将DX的初始化,以及渲染前需要做的设定设定好。说到底,引擎要做的就是将游戏运行中的一切步骤都处理完。啊!处理完?是的,将渲染要做的都处理完。那么,引擎自然就会选择默认的参数来设定一些属性。啊咧,设定了默认属性?是的,如果要自己修改属性,那就提供接口给用户让用户自己能修改。
Sound Module |
在这个模块中处理引擎中音频部分。
Sound Module |
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 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 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, int volume = 100, int order = -1, int row = -1) = 0; virtual void CALL Music_SetAmplification(HMUSIC music, int ampl) = 0; virtual int CALL Music_GetAmplification(HMUSIC music) = 0; virtual int CALL Music_GetLength(HMUSIC music) = 0; virtual void CALL Music_SetPos(HMUSIC music, int order, int row) = 0; virtual bool CALL Music_GetPos(HMUSIC music, int *order, int *row) = 0; virtual void CALL Music_SetInstrVolume(HMUSIC music, int instr, int volume) = 0; virtual int CALL Music_GetInstrVolume(HMUSIC music, int instr) = 0; virtual void CALL Music_SetChannelVolume(HMUSIC music, int channel, int volume) = 0; virtual int CALL Music_GetChannelVolume(HMUSIC music, int channel) = 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_PauseAll() = 0; virtual void CALL Channel_ResumeAll() = 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 void CALL Channel_SlideTo(HCHANNEL channel, float time, int volume, int pan = -101, float pitch = -1) = 0; virtual bool CALL Channel_IsSliding(HCHANNEL channel) = 0; |
bool _SoundInit(); void _SoundDone(); void _SetMusVolume(int vol); void _SetStreamVolume(int vol); void _SetFXVolume(int vol); |
外部接口提供了音效、音乐、流等的音乐的处理。
内部接口实现的真个模块的初始化;结束的清理;音量大小的设置。
Others |
剩下的其他部分则是引擎中默默付出的部分,前面的实现其实就已经完成了对整个引擎的相关的渲染等过程。
Timer |
virtual float CALL Timer_GetTime() = 0; virtual float CALL Timer_GetDelta() = 0; virtual int CALL Timer_GetFPS() = 0;
Ini module |
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;
Random |
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;
Paramter Setter |
inline void System_SetState(hgeBoolState state, bool value) { System_SetStateBool (state, value); } inline void System_SetState(hgeFuncState state, hgeCallback value) { System_SetStateFunc (state, value); } inline void System_SetState(hgeHwndState state, HWND value) { System_SetStateHwnd (state, value); } inline void System_SetState(hgeIntState state, int value) { System_SetStateInt (state, value); } inline void System_SetState(hgeStringState state, const char *value) { System_SetStateString(state, value); } inline bool System_GetState(hgeBoolState state) { return System_GetStateBool (state); } inline hgeCallback System_GetState(hgeFuncState state) { return System_GetStateFunc (state); } inline HWND System_GetState(hgeHwndState state) { return System_GetStateHwnd (state); } inline int System_GetState(hgeIntState state) { return System_GetStateInt (state); } inline const char* System_GetState(hgeStringState state) { return System_GetStateString(state); }
Power |
void _InitPowerStatus(); void _UpdatePowerStatus(); void _DonePowerStatus();