hge_impl.h
上传用户:jnfxsk
上传日期:2022-06-16
资源大小:3675k
文件大小:11k
源码类别:

游戏引擎

开发平台:

Visual C++

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