hge_impl.h
上传用户:maxiaolivb
上传日期:2022-06-07
资源大小:915k
文件大小:10k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.5
  3. ** Copyright (C) 2003-2004, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** Common core implementation header
  7. */
  8. #ifndef HGE_IMPL_H
  9. #define HGE_IMPL_H
  10. #include "....includehge.h"
  11. #include <stdio.h>
  12. #include <d3d8.h>
  13. #include <d3dx8.h>
  14. //#define DEMO
  15. #define D3DFVF_HGEVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1)
  16. #define VERTEX_BUFFER_SIZE 4000
  17. struct CRenderTargetList
  18. {
  19. int width;
  20. int height;
  21. IDirect3DTexture8* pTex;
  22. IDirect3DSurface8* pDepth;
  23. CRenderTargetList* next;
  24. };
  25. struct CTextureList
  26. {
  27. HTEXTURE tex;
  28. int width;
  29. int height;
  30. CTextureList* next;
  31. };
  32. struct CResourceList
  33. {
  34. char filename[_MAX_PATH];
  35. char password[64];
  36. CResourceList* next;
  37. };
  38. struct CStreamList
  39. {
  40. HSTREAM hstream;
  41. void* data;
  42. CStreamList* next;
  43. };
  44. struct CInputEventList
  45. {
  46. hgeInputEvent event;
  47. CInputEventList* next;
  48. };
  49. void DInit();
  50. void DDone();
  51. bool DFrame();
  52. /*
  53. ** HGE Interface implementation
  54. */
  55. class HGE_Impl : public HGE
  56. {
  57. //////////////////////////////此处为扩展HGE而添加//////////////////////////////
  58. public:
  59. /// 标准初始化
  60. virtual bool CALL G_GfxInit(){return _GfxInit();};
  61. /// SOUND初始化
  62. virtual bool CALL G_SoundInit(){return _SoundInit();};
  63. /// 清楚队列
  64. virtual void CALL G_ClearQueue(){_ClearQueue();};
  65. /// 添加消息
  66. virtual void CALL G_BuildEvent(int type, int key, int scan, int flags, int x, int y){_BuildEvent(type,key,scan,flags,x,y);};
  67. /// 重设SIZE
  68. virtual void CALL G_Resize(int width, int height){_Resize(width,height);};
  69. /// 焦点改变
  70. virtual void CALL G_FocusChange(bool bAct){_FocusChange(bAct);};
  71. ///////////////////////////////////////////////////////////////////////////////
  72. public:
  73. virtual void CALL Release();
  74. virtual bool CALL System_Initiate();
  75. virtual void CALL System_Shutdown();
  76. virtual bool CALL System_Start();
  77. virtual void CALL System_SetStateBool  (hgeBoolState   state, bool        value);
  78. virtual void CALL System_SetStateFunc  (hgeFuncState   state, hgeCallback value);
  79. virtual void CALL System_SetStateHwnd  (hgeHwndState   state, HWND        value);
  80. virtual void CALL System_SetStateInt   (hgeIntState    state, int         value);
  81. virtual void CALL System_SetStateString(hgeStringState state, const char *value);
  82. virtual bool CALL System_GetStateBool  (hgeBoolState  );
  83. virtual hgeCallback CALL System_GetStateFunc  (hgeFuncState  );
  84. virtual HWND CALL System_GetStateHwnd  (hgeHwndState  );
  85. virtual int CALL System_GetStateInt   (hgeIntState   );
  86. virtual const char* CALL System_GetStateString(hgeStringState);
  87. virtual char* CALL System_GetErrorMessage();
  88. virtual void CALL System_Log(const char *format, ...);
  89. virtual bool CALL System_Launch(const char *url);
  90. virtual void CALL System_Snapshot(const char *filename=0);
  91. virtual void* CALL Resource_Load(const char *filename, DWORD *size=0);
  92. virtual void CALL Resource_Free(void *res);
  93. virtual bool CALL Resource_AttachPack(const char *filename, const char *password=0);
  94. virtual void CALL Resource_RemovePack(const char *filename);
  95. virtual void CALL Resource_RemoveAllPacks();
  96. virtual char* CALL Resource_MakePath(const char *filename);
  97. virtual char* CALL Resource_EnumFiles(const char *wildcard=0);
  98. virtual char* CALL Resource_EnumFolders(const char *wildcard=0);
  99. virtual void CALL Ini_SetInt(const char *section, const char *name, int value);
  100. virtual int  CALL Ini_GetInt(const char *section, const char *name, int def_val);
  101. virtual void CALL Ini_SetFloat(const char *section, const char *name, float value);
  102. virtual float CALL Ini_GetFloat(const char *section, const char *name, float def_val);
  103. virtual void CALL Ini_SetString(const char *section, const char *name, const char *value);
  104. virtual char* CALL Ini_GetString(const char *section, const char *name, const char *def_val);
  105. virtual void CALL Random_Seed(int seed=0);
  106. virtual int CALL Random_Int(int min, int max);
  107. virtual float CALL Random_Float(float min, float max);
  108. virtual float CALL Timer_GetTime();
  109. virtual float CALL Timer_GetDelta();
  110. virtual int CALL Timer_GetFPS();
  111. virtual HEFFECT CALL Effect_Load(const char *filename, DWORD size=0);
  112. virtual void CALL Effect_Free(HEFFECT eff);
  113. virtual HCHANNEL CALL  Effect_Play(HEFFECT eff);
  114. virtual HCHANNEL CALL  Effect_PlayEx(HEFFECT eff, int volume=100, int pan=0, float pitch=1.0f, bool loop=false);
  115. virtual HMUSIC CALL  Music_Load(const char *filename, DWORD size=0);
  116. virtual void CALL Music_Free(HMUSIC mus);
  117. virtual HCHANNEL CALL  Music_Play(HMUSIC mus, bool loop);
  118. virtual HSTREAM CALL Stream_Load(const char *filename, DWORD size=0);
  119. virtual void CALL Stream_Free(HSTREAM stream);
  120. virtual HCHANNEL CALL Stream_Play(HSTREAM stream, bool loop, int volume = 100);
  121. virtual void CALL  Channel_SetPanning(HCHANNEL chn, int pan);
  122. virtual void CALL  Channel_SetVolume(HCHANNEL chn, int volume);
  123. virtual void CALL  Channel_SetPitch(HCHANNEL chn, float pitch);
  124. virtual void CALL  Channel_Pause(HCHANNEL chn);
  125. virtual void CALL  Channel_Resume(HCHANNEL chn);
  126. virtual void CALL  Channel_Stop(HCHANNEL chn);
  127. virtual void CALL  Channel_StopAll();
  128. virtual bool CALL Channel_IsPlaying(HCHANNEL chn);
  129. virtual float CALL Channel_GetLength(HCHANNEL chn);
  130. virtual float CALL Channel_GetPos(HCHANNEL chn);
  131. virtual void CALL Channel_SetPos(HCHANNEL chn, float fSeconds);
  132. virtual void CALL Input_GetMousePos(float *x, float *y);
  133. virtual void CALL Input_SetMousePos(float x, float y);
  134. virtual int CALL Input_GetMouseWheel();
  135. virtual bool CALL Input_IsMouseOver();
  136. virtual bool CALL Input_GetKeyState(int key);
  137. virtual char* CALL Input_GetKeyName(int key);
  138. virtual int CALL Input_GetKey();
  139. virtual int CALL Input_GetChar();
  140. virtual bool CALL Input_GetEvent(hgeInputEvent *event);
  141. virtual bool CALL Gfx_BeginScene(HTARGET target=0);
  142. virtual void CALL Gfx_EndScene();
  143. virtual void CALL Gfx_Clear(DWORD color);
  144. virtual void CALL Gfx_RenderLine(float x1, float y1, float x2, float y2, DWORD color=0xFFFFFFFF, float z=0.5f);
  145. virtual void CALL Gfx_RenderTriple(const hgeTriple *triple);
  146. virtual void CALL Gfx_RenderQuad(const hgeQuad *quad);
  147. virtual hgeVertex* CALL Gfx_StartBatch(int prim_type, HTEXTURE tex, int blend, int *max_prim);
  148. virtual void CALL Gfx_FinishBatch(int nprim);
  149. virtual void CALL Gfx_SetClipping(int x=0, int y=0, int w=0, int h=0);
  150. 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); 
  151. virtual HTARGET CALL Target_Create(int width, int height, bool zbuffer);
  152. virtual void CALL Target_Free(HTARGET target);
  153. virtual HTEXTURE CALL Target_GetTexture(HTARGET target);
  154. virtual HTEXTURE CALL Texture_Create(int width, int height);
  155. virtual HTEXTURE CALL Texture_Load(const char *filename, DWORD size=0, bool bMipmap=false);
  156. virtual void CALL Texture_Free(HTEXTURE tex);
  157. virtual int CALL Texture_GetWidth(HTEXTURE tex, bool bOriginal=false);
  158. virtual int CALL Texture_GetHeight(HTEXTURE tex, bool bOriginal=false);
  159. virtual DWORD* CALL Texture_Lock(HTEXTURE tex, bool bReadOnly=true, int left=0, int top=0, int width=0, int height=0);
  160. virtual void CALL Texture_Unlock(HTEXTURE tex);
  161. //////// Implementation ////////
  162. static HGE_Impl* _Interface_Get();
  163. void _FocusChange(bool bAct);
  164. void _PostError(char *error);
  165. HINSTANCE hInstance;
  166. HWND hwnd;
  167. bool bActive;
  168. char szError[256];
  169. char szAppPath[_MAX_PATH];
  170. char szIniString[256];
  171. // System States
  172. bool (*procFrameFunc)();
  173. bool (*procRenderFunc)();
  174. bool (*procFocusLostFunc)();
  175. bool (*procFocusGainFunc)();
  176. bool (*procExitFunc)();
  177. const char* szIcon;
  178. char szWinTitle[256];
  179. int nScreenWidth;
  180. int nScreenHeight;
  181. int nScreenBPP;
  182. bool bWindowed;
  183. bool bZBuffer;
  184. bool bTextureFilter;
  185. char szIniFile[_MAX_PATH];
  186. char szLogFile[_MAX_PATH];
  187. bool bUseSound;
  188. int nSampleRate;
  189. int nFXVolume;
  190. int nMusVolume;
  191. int nHGEFPS;
  192. bool bHideMouse;
  193. bool bDontSuspend;
  194. HWND hwndParent;
  195. #ifdef DEMO
  196. int nDMO;
  197. #endif
  198. // Graphics
  199. D3DPRESENT_PARAMETERS*  d3dpp;
  200. D3DPRESENT_PARAMETERS   d3dppW;
  201. RECT rectW;
  202. LONG styleW;
  203. D3DPRESENT_PARAMETERS   d3dppFS;
  204. RECT rectFS;
  205. LONG styleFS;
  206. IDirect3D8* pD3D;
  207. IDirect3DDevice8* pD3DDevice;
  208. IDirect3DVertexBuffer8* pVB;
  209. IDirect3DIndexBuffer8* pIB;
  210. IDirect3DSurface8* pScreenSurf;
  211. IDirect3DSurface8* pScreenDepth;
  212. CRenderTargetList* pTargets;
  213. CRenderTargetList* pCurTarget;
  214. D3DXMATRIX matView;
  215. D3DXMATRIX matProj;
  216. CTextureList* textures;
  217. hgeVertex* VertArray;
  218. int nPrim;
  219. int CurPrimType;
  220. int CurBlendMode;
  221. HTEXTURE CurTexture;
  222. bool _GfxInit();
  223. void _GfxDone();
  224. void _GfxRestore();
  225. void _AdjustWindow();
  226. void _Resize(int width, int height);
  227. bool _init_lost();
  228. void _render_batch(bool bEndScene=false);
  229. int _format_id(D3DFORMAT fmt);
  230. void _SetBlendMode(int blend);
  231. void _SetProjectionMatrix(int width, int height);
  232. // Audio
  233. HINSTANCE hBass;
  234. bool bSilent;
  235. CStreamList* streams;
  236. bool _SoundInit();
  237. void _SoundDone();
  238. void _SetMusVolume(int vol);
  239. void _SetFXVolume(int vol);
  240. // Input
  241. int VKey;
  242. int Char;
  243. int Zpos;
  244. float Xpos;
  245. float Ypos;
  246. bool bMouseOver;
  247. bool bCaptured;
  248. CInputEventList* queue;
  249. void _ClearQueue();
  250. void _BuildEvent(int type, int key, int scan, int flags, int x, int y);
  251. // Resource
  252. char szTmpFilename[256];
  253. CResourceList* res;
  254. HANDLE hSearch;
  255. WIN32_FIND_DATA SearchData;
  256. // Timer
  257. float fTime;
  258. float fDeltaTime;
  259. DWORD nFixedDelta;
  260. int nFPS;
  261. DWORD t0, t0fps, dt;
  262. int cfps;
  263. private:
  264. HGE_Impl();
  265. };
  266. extern HGE_Impl* pHGE;
  267. #endif