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

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.8
  3. ** Copyright (C) 2003-2007, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** hge_tut06 - Creating menus
  7. */
  8. // Copy the files "menu.wav", "font1.fnt", "font1.png",
  9. // "bg.png" and "cursor.png" from the folder "precompiled"
  10. // to the folder with executable file. Also copy hge.dll
  11. // and bass.dll to the same folder.
  12. #include "....includehge.h"
  13. #include "....includehgefont.h"
  14. #include "....includehgegui.h"
  15. #include "menuitem.h"
  16. #include <math.h>
  17. // Pointer to the HGE interface.
  18. // Helper classes require this to work.
  19. HGE *hge=0;
  20. // Some resource handles
  21. HEFFECT snd;
  22. HTEXTURE tex;
  23. hgeQuad quad;
  24. // Pointers to the HGE objects we will use
  25. hgeGUI *gui;
  26. hgeFont *fnt;
  27. hgeSprite *spr;
  28. bool FrameFunc()
  29. {
  30. float dt=hge->Timer_GetDelta();
  31. static float t=0.0f;
  32. float tx,ty;
  33. int id;
  34. static int lastid=0;
  35. // If ESCAPE was pressed, tell the GUI to finish
  36. if(hge->Input_GetKeyState(HGEK_ESCAPE)) { lastid=5; gui->Leave(); }
  37. // We update the GUI and take an action if
  38. // one of the menu items was selected
  39. id=gui->Update(dt);
  40. if(id == -1)
  41. {
  42. switch(lastid)
  43. {
  44. case 1:
  45. case 2:
  46. case 3:
  47. case 4:
  48. gui->SetFocus(1);
  49. gui->Enter();
  50. break;
  51. case 5: return true;
  52. }
  53. }
  54. else if(id) { lastid=id; gui->Leave(); }
  55. // Here we update our background animation
  56. t+=dt;
  57. tx=50*cosf(t/60);
  58. ty=50*sinf(t/60);
  59. quad.v[0].tx=tx;        quad.v[0].ty=ty;
  60. quad.v[1].tx=tx+800/64; quad.v[1].ty=ty;
  61. quad.v[2].tx=tx+800/64; quad.v[2].ty=ty+600/64;
  62. quad.v[3].tx=tx;        quad.v[3].ty=ty+600/64;
  63. return false;
  64. }
  65. bool RenderFunc()
  66. {
  67. // Render graphics
  68. hge->Gfx_BeginScene();
  69. hge->Gfx_RenderQuad(&quad);
  70. gui->Render();
  71. fnt->SetColor(0xFFFFFFFF);
  72. fnt->printf(5, 5, HGETEXT_LEFT, "dt:%.3fnFPS:%d", hge->Timer_GetDelta(), hge->Timer_GetFPS());
  73. hge->Gfx_EndScene();
  74. return false;
  75. }
  76. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
  77. {
  78. hge = hgeCreate(HGE_VERSION);
  79. hge->System_SetState(HGE_LOGFILE, "hge_tut06.log");
  80. hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
  81. hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
  82. hge->System_SetState(HGE_TITLE, "HGE Tutorial 06 - Creating menus");
  83. hge->System_SetState(HGE_WINDOWED, true);
  84. hge->System_SetState(HGE_SCREENWIDTH, 800);
  85. hge->System_SetState(HGE_SCREENHEIGHT, 600);
  86. hge->System_SetState(HGE_SCREENBPP, 32);
  87. if(hge->System_Initiate())
  88. {
  89. // Load sound and textures
  90. quad.tex=hge->Texture_Load("bg.png");
  91. tex=hge->Texture_Load("cursor.png");
  92. snd=hge->Effect_Load("menu.wav");
  93. if(!quad.tex || !tex || !snd)
  94. {
  95. // If one of the data files is not found, display
  96. // an error message and shutdown.
  97. MessageBox(NULL, "Can't load BG.PNG, CURSOR.PNG or MENU.WAV", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
  98. hge->System_Shutdown();
  99. hge->Release();
  100. return 0;
  101. }
  102. // Set up the quad we will use for background animation
  103. quad.blend=BLEND_ALPHABLEND | BLEND_COLORMUL | BLEND_NOZWRITE;
  104. for(int i=0;i<4;i++)
  105. {
  106. // Set up z-coordinate of vertices
  107. quad.v[i].z=0.5f;
  108. // Set up color. The format of DWORD col is 0xAARRGGBB
  109. quad.v[i].col=0xFFFFFFFF;
  110. }
  111. quad.v[0].x=0; quad.v[0].y=0; 
  112. quad.v[1].x=800; quad.v[1].y=0; 
  113. quad.v[2].x=800; quad.v[2].y=600; 
  114. quad.v[3].x=0; quad.v[3].y=600; 
  115. // Load the font, create the cursor sprite
  116. fnt=new hgeFont("font1.fnt");
  117. spr=new hgeSprite(tex,0,0,32,32);
  118. // Create and initialize the GUI
  119. gui=new hgeGUI();
  120. gui->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Play"));
  121. gui->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Options"));
  122. gui->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Instructions"));
  123. gui->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Credits"));
  124. gui->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Exit"));
  125. gui->SetNavMode(HGEGUI_UPDOWN | HGEGUI_CYCLED);
  126. gui->SetCursor(spr);
  127. gui->SetFocus(1);
  128. gui->Enter();
  129. // Let's rock now!
  130. hge->System_Start();
  131. // Delete created objects and free loaded resources
  132. delete gui;
  133. delete fnt;
  134. delete spr;
  135. hge->Effect_Free(snd);
  136. hge->Texture_Free(tex);
  137. hge->Texture_Free(quad.tex);
  138. }
  139. // Clean up and shutdown
  140. hge->System_Shutdown();
  141. hge->Release();
  142. return 0;
  143. }