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

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.54
  3. ** Copyright (C) 2003-2004, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** System layer API
  7. */
  8. #ifndef HGE_H
  9. #define HGE_H
  10. #include <windows.h>
  11. #define HGE_VERSION 0x160
  12. #ifdef HGEDLL
  13. #define EXPORT  __declspec(dllexport)
  14. #else
  15. #define EXPORT
  16. #endif
  17. #define CALL  __stdcall
  18. #ifdef __BORLANDC__
  19.  #define floorf (float)floor
  20.  #define sqrtf (float)sqrt
  21.  #define acosf (float)acos
  22.  #define atan2f (float)atan2
  23.  #define cosf (float)cos
  24.  #define sinf (float)sin
  25.  #define powf (float)pow
  26.  #define fabsf (float)fabs
  27. #endif
  28. /*
  29. ** Common data types
  30. */
  31. #ifndef DWORD
  32. typedef unsigned long       DWORD;
  33. typedef unsigned short      WORD;
  34. typedef unsigned char       BYTE;
  35. #endif
  36. /*
  37. ** Common math constants
  38. */
  39. #ifndef M_PI
  40. #define M_PI 3.14159265358979323846f
  41. #define M_PI_2 1.57079632679489661923f
  42. #define M_PI_4 0.785398163397448309616f
  43. #define M_1_PI 0.318309886183790671538f
  44. #define M_2_PI 0.636619772367581343076f
  45. #endif
  46. /*
  47. ** HGE Handle types
  48. */
  49. typedef DWORD HTEXTURE;
  50. typedef DWORD HTARGET;
  51. typedef DWORD HEFFECT;
  52. typedef DWORD HMUSIC;
  53. typedef DWORD HSTREAM;
  54. typedef DWORD HCHANNEL;
  55. /*
  56. ** Hardware color macros
  57. */
  58. #define ARGB(a,r,g,b) ((DWORD(a)<<24) + (DWORD(r)<<16) + (DWORD(g)<<8) + DWORD(b))
  59. #define GETA(col) ((col)>>24)
  60. #define GETR(col) (((col)>>16) & 0xFF)
  61. #define GETG(col) (((col)>>8) & 0xFF)
  62. #define GETB(col) ((col) & 0xFF)
  63. #define SETA(col,a) (((col) & 0x00FFFFFF) + (DWORD(a)<<24))
  64. #define SETR(col,r) (((col) & 0xFF00FFFF) + (DWORD(r)<<16))
  65. #define SETG(col,g) (((col) & 0xFFFF00FF) + (DWORD(g)<<8))
  66. #define SETB(col,b) (((col) & 0xFFFFFF00) + DWORD(b))
  67. /*
  68. ** HGE Blending constants
  69. */
  70. #define BLEND_COLORADD 1
  71. #define BLEND_COLORMUL 0
  72. #define BLEND_ALPHABLEND 2
  73. #define BLEND_ALPHAADD 0
  74. #define BLEND_ZWRITE 4
  75. #define BLEND_NOZWRITE 0
  76. #define BLEND_DEFAULT (BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_NOZWRITE)
  77. #define BLEND_DEFAULT_Z (BLEND_COLORMUL | BLEND_ALPHABLEND | BLEND_ZWRITE)
  78. /*
  79. ** HGE System state constants
  80. */
  81. enum hgeBoolState
  82. {
  83. HGE_WINDOWED = 11,   // bool run in window? (default: false)
  84. HGE_ZBUFFER = 12,   // bool use z-buffer? (default: false)
  85. HGE_TEXTUREFILTER = 13,   // bool texture filtering? (default: true)
  86. HGE_USESOUND = 18,   // bool use BASS for sound? (default: true)
  87. HGE_DONTSUSPEND = 24, // bool focus lost:suspend? (default: false)
  88. HGE_HIDEMOUSE = 25, // bool hide system cursor? (default: true)
  89. HGEBOOLSTATE_FORCE_DWORD = 0x7FFFFFFF
  90. };
  91. enum hgeFuncState
  92. {
  93. HGE_FRAMEFUNC = 1,    // bool*() frame function (default: NULL) (you MUST set this)
  94. HGE_RENDERFUNC = 2,    // bool*() render function (default: NULL)
  95. HGE_FOCUSLOSTFUNC = 3,    // bool*() focus lost function (default: NULL)
  96. HGE_FOCUSGAINFUNC = 4,    // bool*() focus gain function (default: NULL)
  97. HGE_EXITFUNC = 5,    // bool*() exit function (default: NULL)
  98. HGEFUNCSTATE_FORCE_DWORD = 0x7FFFFFFF
  99. };
  100. enum hgeHwndState
  101. {
  102. HGE_HWND = 26, // int window handle: read only
  103. HGE_HWNDPARENT = 27, // int parent win handle (default: 0)
  104. HGEHWNDSTATE_FORCE_DWORD = 0x7FFFFFFF
  105. };
  106. enum hgeIntState
  107. {
  108. HGE_SCREENWIDTH = 8,    // int screen width (default: 800)
  109. HGE_SCREENHEIGHT = 9,    // int screen height (default: 600)
  110. HGE_SCREENBPP = 10,   // int screen bitdepth (default: 32) (desktop bpp in windowed mode)
  111. HGE_SAMPLERATE = 19,   // int sample rate (default: 44100)
  112. HGE_FXVOLUME = 20,   // int global fx volume (default: 100)
  113. HGE_MUSVOLUME = 21,   // int global music volume (default: 100)
  114. HGE_FPS = 23, // int fixed fps (default: HGEFPS_UNLIMITED)
  115. HGEINTSTATE_FORCE_DWORD = 0x7FFFFFF
  116. };
  117. enum hgeStringState
  118. {
  119. HGE_ICON = 6,    // char* icon resource (default: NULL)
  120. HGE_TITLE = 7,    // char* window title (default: "HGE")
  121. HGE_INIFILE = 15,   // char* ini file (default: NULL) (meaning no file)
  122. HGE_LOGFILE = 16,   // char* log file (default: NULL) (meaning no file)
  123. HGESTRINGSTATE_FORCE_DWORD = 0x7FFFFFFF
  124. };
  125. /*
  126. ** Callback protoype used by HGE
  127. */
  128. typedef bool (*hgeCallback)();
  129. /*
  130. ** HGE_FPS system state special constants
  131. */
  132. #define HGEFPS_UNLIMITED 0
  133. #define HGEFPS_VSYNC -1
  134. /*
  135. ** HGE Primitive type constants
  136. */
  137. #define HGEPRIM_LINES 2
  138. #define HGEPRIM_TRIPLES 3
  139. #define HGEPRIM_QUADS 4
  140. /*
  141. ** HGE Vertex structure
  142. */
  143. struct hgeVertex
  144. {
  145. float x, y; // screen position    
  146. float z; // Z-buffer depth 0..1
  147. DWORD col; // color
  148. float tx, ty; // texture coordinates
  149. };
  150. /*
  151. ** HGE Triple structure
  152. */
  153. struct hgeTriple
  154. {
  155. hgeVertex v[3];
  156. HTEXTURE tex;
  157. int blend;
  158. };
  159. /*
  160. ** HGE Quad structure
  161. */
  162. struct hgeQuad
  163. {
  164. hgeVertex v[4];
  165. HTEXTURE tex;
  166. int blend;
  167. };
  168. /*
  169. ** HGE Input Event structure
  170. */
  171. struct hgeInputEvent
  172. {
  173. int type; // event type
  174. int key; // key code
  175. int flags; // event flags
  176. int chr; // character code
  177. int wheel; // wheel shift
  178. float x; // mouse cursor x-coordinate
  179. float y; // mouse cursor y-coordinate
  180. };
  181. /*
  182. ** HGE Input Event type constants
  183. */
  184. #define INPUT_KEYDOWN 1
  185. #define INPUT_KEYUP 2
  186. #define INPUT_MBUTTONDOWN 3
  187. #define INPUT_MBUTTONUP 4
  188. #define INPUT_MOUSEMOVE 5
  189. #define INPUT_MOUSEWHEEL 6
  190. /*
  191. ** HGE Input Event flags
  192. */
  193. #define HGEINP_SHIFT 1
  194. #define HGEINP_CTRL 2
  195. #define HGEINP_ALT 4
  196. #define HGEINP_CAPSLOCK 8
  197. #define HGEINP_SCROLLLOCK 16
  198. #define HGEINP_NUMLOCK 32
  199. #define HGEINP_REPEAT 64
  200. /*
  201. ** HGE Interface class
  202. */
  203. class HGE
  204. {
  205. public:
  206. virtual void CALL Release() = 0;
  207. virtual bool CALL System_Initiate() = 0;
  208. virtual void CALL System_Shutdown() = 0;
  209. virtual bool CALL System_Start() = 0;
  210. virtual char* CALL System_GetErrorMessage() = 0;
  211. virtual void CALL System_Log(const char *format, ...) = 0;
  212. virtual bool CALL System_Launch(const char *url) = 0;
  213. virtual void CALL System_Snapshot(const char *filename=0) = 0;
  214. private:
  215. virtual void CALL System_SetStateBool  (hgeBoolState   state, bool        value) = 0;
  216. virtual void CALL System_SetStateFunc  (hgeFuncState   state, hgeCallback value) = 0;
  217. virtual void CALL System_SetStateHwnd  (hgeHwndState   state, HWND        value) = 0;
  218. virtual void CALL System_SetStateInt   (hgeIntState    state, int         value) = 0;
  219. virtual void CALL System_SetStateString(hgeStringState state, const char *value) = 0;
  220. virtual bool CALL System_GetStateBool  (hgeBoolState   state) = 0;
  221. virtual hgeCallback CALL System_GetStateFunc  (hgeFuncState   state) = 0;
  222. virtual HWND CALL System_GetStateHwnd  (hgeHwndState   state) = 0;
  223. virtual int CALL System_GetStateInt   (hgeIntState    state) = 0;
  224. virtual const char* CALL System_GetStateString(hgeStringState state) = 0;
  225. public:
  226. inline void System_SetState(hgeBoolState   state, bool        value) { System_SetStateBool  (state, value); }
  227. inline void System_SetState(hgeFuncState   state, hgeCallback value) { System_SetStateFunc  (state, value); }
  228. inline void System_SetState(hgeHwndState   state, HWND        value) { System_SetStateHwnd  (state, value); }
  229. inline void System_SetState(hgeIntState    state, int         value) { System_SetStateInt   (state, value); }
  230. inline void System_SetState(hgeStringState state, const char *value) { System_SetStateString(state, value); }
  231. inline bool System_GetState(hgeBoolState   state) { return System_GetStateBool  (state); }
  232. inline hgeCallback System_GetState(hgeFuncState   state) { return System_GetStateFunc  (state); }
  233. inline HWND System_GetState(hgeHwndState   state) { return System_GetStateHwnd  (state); }
  234. inline int System_GetState(hgeIntState    state) { return System_GetStateInt   (state); }
  235. inline const char* System_GetState(hgeStringState state) { return System_GetStateString(state); }
  236. virtual void* CALL Resource_Load(const char *filename, DWORD *size=0) = 0;
  237. virtual void CALL Resource_Free(void *res) = 0;
  238. virtual bool CALL Resource_AttachPack(const char *filename, const char *password=0) = 0;
  239. virtual void CALL Resource_RemovePack(const char *filename) = 0;
  240. virtual void CALL Resource_RemoveAllPacks() = 0;
  241. virtual char* CALL Resource_MakePath(const char *filename) = 0;
  242. virtual char* CALL Resource_EnumFiles(const char *wildcard=0) = 0;
  243. virtual char* CALL Resource_EnumFolders(const char *wildcard=0) = 0;
  244. virtual void CALL Ini_SetInt(const char *section, const char *name, int value) = 0;
  245. virtual int CALL Ini_GetInt(const char *section, const char *name, int def_val) = 0;
  246. virtual void CALL Ini_SetFloat(const char *section, const char *name, float value) = 0;
  247. virtual float CALL Ini_GetFloat(const char *section, const char *name, float def_val) = 0;
  248. virtual void CALL Ini_SetString(const char *section, const char *name, const char *value) = 0;
  249. virtual char* CALL Ini_GetString(const char *section, const char *name, const char *def_val) = 0;
  250. virtual void CALL Random_Seed(int seed=0) = 0;
  251. virtual int CALL Random_Int(int min, int max) = 0;
  252. virtual float CALL Random_Float(float min, float max) = 0;
  253. virtual float CALL Timer_GetTime() = 0;
  254. virtual float CALL Timer_GetDelta() = 0;
  255. virtual int CALL Timer_GetFPS() = 0;
  256. virtual HEFFECT CALL Effect_Load(const char *filename, DWORD size=0) = 0;
  257. virtual void CALL Effect_Free(HEFFECT eff) = 0;
  258. virtual HCHANNEL CALL  Effect_Play(HEFFECT eff) = 0;
  259. virtual HCHANNEL CALL Effect_PlayEx(HEFFECT eff, int volume=100, int pan=0, float pitch=1.0f, bool loop=false) = 0;
  260. virtual HMUSIC CALL Music_Load(const char *filename, DWORD size=0) = 0;
  261. virtual void CALL Music_Free(HMUSIC mus) = 0;
  262. virtual HCHANNEL CALL Music_Play(HMUSIC mus, bool loop) = 0;
  263. virtual HSTREAM CALL Stream_Load(const char *filename, DWORD size=0) = 0;
  264. virtual void CALL Stream_Free(HSTREAM stream) = 0;
  265. virtual HCHANNEL CALL Stream_Play(HSTREAM stream, bool loop, int volume = 100) = 0;
  266. virtual void CALL Channel_SetPanning(HCHANNEL chn, int pan) = 0;
  267. virtual void CALL  Channel_SetVolume(HCHANNEL chn, int volume) = 0;
  268. virtual void CALL  Channel_SetPitch(HCHANNEL chn, float pitch) = 0;
  269. virtual void CALL  Channel_Pause(HCHANNEL chn) = 0;
  270. virtual void CALL  Channel_Resume(HCHANNEL chn) = 0;
  271. virtual void CALL  Channel_Stop(HCHANNEL chn) = 0;
  272. virtual void CALL  Channel_StopAll() = 0;
  273. virtual bool CALL Channel_IsPlaying(HCHANNEL chn) = 0;
  274. virtual float CALL Channel_GetLength(HCHANNEL chn) = 0;
  275. virtual float CALL Channel_GetPos(HCHANNEL chn) = 0;
  276. virtual void CALL Channel_SetPos(HCHANNEL chn, float fSeconds) = 0;
  277. virtual void CALL Input_GetMousePos(float *x, float *y) = 0;
  278. virtual void CALL Input_SetMousePos(float x, float y) = 0;
  279. virtual int CALL Input_GetMouseWheel() = 0;
  280. virtual bool CALL Input_IsMouseOver() = 0;
  281. virtual bool CALL Input_GetKeyState(int key) = 0;
  282. virtual char* CALL Input_GetKeyName(int key) = 0;
  283. virtual int CALL Input_GetKey() = 0;
  284. virtual int CALL Input_GetChar() = 0;
  285. virtual bool CALL Input_GetEvent(hgeInputEvent *event) = 0;
  286. virtual bool CALL Gfx_BeginScene(HTARGET target=0) = 0;
  287. virtual void CALL Gfx_EndScene() = 0;
  288. virtual void CALL Gfx_Clear(DWORD color) = 0;
  289. virtual void CALL Gfx_RenderLine(float x1, float y1, float x2, float y2, DWORD color=0xFFFFFFFF, float z=0.5f) = 0;
  290. virtual void CALL Gfx_RenderTriple(const hgeTriple *triple) = 0;
  291. virtual void CALL Gfx_RenderQuad(const hgeQuad *quad) = 0;
  292. virtual hgeVertex* CALL Gfx_StartBatch(int prim_type, HTEXTURE tex, int blend, int *max_prim) = 0;
  293. virtual void CALL Gfx_FinishBatch(int nprim) = 0;
  294. virtual void CALL Gfx_SetClipping(int x=0, int y=0, int w=0, int h=0) = 0;
  295. 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; 
  296. virtual HTARGET CALL Target_Create(int width, int height, bool zbuffer) = 0;
  297. virtual void CALL Target_Free(HTARGET target) = 0;
  298. virtual HTEXTURE CALL Target_GetTexture(HTARGET target) = 0;
  299. virtual HTEXTURE CALL Texture_Create(int width, int height) = 0;
  300. virtual HTEXTURE CALL Texture_Load(const char *filename, DWORD size=0, bool bMipmap=false) = 0;
  301. virtual void CALL Texture_Free(HTEXTURE tex) = 0;
  302. virtual int CALL Texture_GetWidth(HTEXTURE tex, bool bOriginal=false) = 0;
  303. virtual int CALL Texture_GetHeight(HTEXTURE tex, bool bOriginal=false) = 0;
  304. virtual DWORD* CALL Texture_Lock(HTEXTURE tex, bool bReadOnly=true, int left=0, int top=0, int width=0, int height=0) = 0;
  305. virtual void CALL Texture_Unlock(HTEXTURE tex) = 0;
  306. };
  307. extern "C" { EXPORT HGE * CALL hgeCreate(int ver); }
  308. /*
  309. ** HGE Virtual-key codes
  310. */
  311. #define HGEK_LBUTTON 0x01
  312. #define HGEK_RBUTTON 0x02
  313. #define HGEK_MBUTTON 0x04
  314. #define HGEK_ESCAPE 0x1B
  315. #define HGEK_BACKSPACE 0x08
  316. #define HGEK_TAB 0x09
  317. #define HGEK_ENTER 0x0D
  318. #define HGEK_SPACE 0x20
  319. #define HGEK_SHIFT 0x10
  320. #define HGEK_CTRL 0x11
  321. #define HGEK_ALT 0x12
  322. #define HGEK_LWIN 0x5B
  323. #define HGEK_RWIN 0x5C
  324. #define HGEK_APPS 0x5D
  325. #define HGEK_PAUSE 0x13
  326. #define HGEK_CAPSLOCK 0x14
  327. #define HGEK_NUMLOCK 0x90
  328. #define HGEK_SCROLLLOCK 0x91
  329. #define HGEK_PGUP 0x21
  330. #define HGEK_PGDN 0x22
  331. #define HGEK_HOME 0x24
  332. #define HGEK_END 0x23
  333. #define HGEK_INSERT 0x2D
  334. #define HGEK_DELETE 0x2E
  335. #define HGEK_LEFT 0x25
  336. #define HGEK_UP 0x26
  337. #define HGEK_RIGHT 0x27
  338. #define HGEK_DOWN 0x28
  339. #define HGEK_0 0x30
  340. #define HGEK_1 0x31
  341. #define HGEK_2 0x32
  342. #define HGEK_3 0x33
  343. #define HGEK_4 0x34
  344. #define HGEK_5 0x35
  345. #define HGEK_6 0x36
  346. #define HGEK_7 0x37
  347. #define HGEK_8 0x38
  348. #define HGEK_9 0x39
  349. #define HGEK_A 0x41
  350. #define HGEK_B 0x42
  351. #define HGEK_C 0x43
  352. #define HGEK_D 0x44
  353. #define HGEK_E 0x45
  354. #define HGEK_F 0x46
  355. #define HGEK_G 0x47
  356. #define HGEK_H 0x48
  357. #define HGEK_I 0x49
  358. #define HGEK_J 0x4A
  359. #define HGEK_K 0x4B
  360. #define HGEK_L 0x4C
  361. #define HGEK_M 0x4D
  362. #define HGEK_N 0x4E
  363. #define HGEK_O 0x4F
  364. #define HGEK_P 0x50
  365. #define HGEK_Q 0x51
  366. #define HGEK_R 0x52
  367. #define HGEK_S 0x53
  368. #define HGEK_T 0x54
  369. #define HGEK_U 0x55
  370. #define HGEK_V 0x56
  371. #define HGEK_W 0x57
  372. #define HGEK_X 0x58
  373. #define HGEK_Y 0x59
  374. #define HGEK_Z 0x5A
  375. #define HGEK_GRAVE 0xC0
  376. #define HGEK_MINUS 0xBD
  377. #define HGEK_EQUALS 0xBB
  378. #define HGEK_BACKSLASH 0xDC
  379. #define HGEK_LBRACKET 0xDB
  380. #define HGEK_RBRACKET 0xDD
  381. #define HGEK_SEMICOLON 0xBA
  382. #define HGEK_APOSTROPHE 0xDE
  383. #define HGEK_COMMA 0xBC
  384. #define HGEK_PERIOD 0xBE
  385. #define HGEK_SLASH 0xBF
  386. #define HGEK_NUMPAD0 0x60
  387. #define HGEK_NUMPAD1 0x61
  388. #define HGEK_NUMPAD2 0x62
  389. #define HGEK_NUMPAD3 0x63
  390. #define HGEK_NUMPAD4 0x64
  391. #define HGEK_NUMPAD5 0x65
  392. #define HGEK_NUMPAD6 0x66
  393. #define HGEK_NUMPAD7 0x67
  394. #define HGEK_NUMPAD8 0x68
  395. #define HGEK_NUMPAD9 0x69
  396. #define HGEK_MULTIPLY 0x6A
  397. #define HGEK_DIVIDE 0x6F
  398. #define HGEK_ADD 0x6B
  399. #define HGEK_SUBTRACT 0x6D
  400. #define HGEK_DECIMAL 0x6E
  401. #define HGEK_F1 0x70
  402. #define HGEK_F2 0x71
  403. #define HGEK_F3 0x72
  404. #define HGEK_F4 0x73
  405. #define HGEK_F5 0x74
  406. #define HGEK_F6 0x75
  407. #define HGEK_F7 0x76
  408. #define HGEK_F8 0x77
  409. #define HGEK_F9 0x78
  410. #define HGEK_F10 0x79
  411. #define HGEK_F11 0x7A
  412. #define HGEK_F12 0x7B
  413. #endif