hge_tut05.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_tut05 - Using distortion mesh
  7. */
  8. // Copy the files "particles.png", "menu.wav",
  9. // "font1.fnt", "font1.png" and "trail.psi" from
  10. // the folder "precompiled" to the folder with
  11. // executable file. Also copy hge.dll and bass.dll
  12. // to the same folder.
  13. #include "....includehge.h"
  14. #include "....includehgefont.h"
  15. #include "....includehgedistort.h"
  16. #include <math.h>
  17. // Pointer to the HGE interface.
  18. // Helper classes require this to work.
  19. HGE *hge=0;
  20. HTEXTURE tex;
  21. // Pointers to the HGE objects we will use
  22. hgeDistortionMesh* dis;
  23. hgeFont* fnt;
  24. // Some "gameplay" variables
  25. const int nRows=16;
  26. const int nCols=16;
  27. const float cellw=512.0f/(nCols-1);
  28. const float cellh=512.0f/(nRows-1);
  29. const float meshx=144;
  30. const float meshy=44;
  31. bool FrameFunc()
  32. {
  33. float dt=hge->Timer_GetDelta();
  34. static float t=0.0f;
  35. static int trans=0;
  36. int i, j, col;
  37. float r, a, dx, dy;
  38. t+=dt;
  39. // Process keys
  40. switch(hge->Input_GetKey())
  41. {
  42. case HGEK_ESCAPE:
  43. return true;
  44. case HGEK_SPACE:
  45. if(++trans > 2) trans=0;
  46. dis->Clear(0xFF000000);
  47. break;
  48. }
  49. // Calculate new displacements and coloring for one of the three effects
  50. switch(trans)
  51. {
  52. case 0: for(i=1;i<nRows-1;i++)
  53. for(j=1;j<nCols-1;j++)
  54. {
  55. dis->SetDisplacement(j,i,cosf(t*10+(i+j)/2)*5,sinf(t*10+(i+j)/2)*5,HGEDISP_NODE);
  56. }
  57. break;
  58. case 1: for(i=0;i<nRows;i++)
  59. for(j=1;j<nCols-1;j++)
  60. {
  61. dis->SetDisplacement(j,i,cosf(t*5+j/2)*15,0,HGEDISP_NODE);
  62. col=int((cosf(t*5+(i+j)/2)+1)*35);
  63. dis->SetColor(j,i,0xFF<<24 | col<<16 | col<<8 | col);
  64. }
  65. break;
  66. case 2: for(i=0;i<nRows;i++)
  67. for(j=0;j<nCols;j++)
  68. {
  69. r=sqrtf(powf(j-(float)nCols/2,2)+powf(i-(float)nRows/2,2));
  70. a=r*cosf(t*2)*0.1f;
  71. dx=sinf(a)*(i*cellh-256)+cosf(a)*(j*cellw-256);
  72. dy=cosf(a)*(i*cellh-256)-sinf(a)*(j*cellw-256);
  73. dis->SetDisplacement(j,i,dx,dy,HGEDISP_CENTER);
  74. col=int((cos(r+t*4)+1)*40);
  75. dis->SetColor(j,i,0xFF<<24 | col<<16 | (col/2)<<8);
  76. }
  77. break;
  78. }
  79. return false;
  80. }
  81. bool RenderFunc()
  82. {
  83. // Render graphics
  84. hge->Gfx_BeginScene();
  85. hge->Gfx_Clear(0);
  86. dis->Render(meshx, meshy);
  87. fnt->printf(5, 5, HGETEXT_LEFT, "dt:%.3fnFPS:%dnnUse yournSPACE!", hge->Timer_GetDelta(), hge->Timer_GetFPS());
  88. hge->Gfx_EndScene();
  89. return false;
  90. }
  91. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
  92. {
  93. hge = hgeCreate(HGE_VERSION);
  94. hge->System_SetState(HGE_LOGFILE, "hge_tut05.log");
  95. hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
  96. hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
  97. hge->System_SetState(HGE_TITLE, "HGE Tutorial 05 - Using distortion mesh");
  98. hge->System_SetState(HGE_WINDOWED, true);
  99. hge->System_SetState(HGE_SCREENWIDTH, 800);
  100. hge->System_SetState(HGE_SCREENHEIGHT, 600);
  101. hge->System_SetState(HGE_SCREENBPP, 32);
  102. hge->System_SetState(HGE_USESOUND, false);
  103. if(hge->System_Initiate()) {
  104. // Load sound and texture
  105. tex=hge->Texture_Load("texture.jpg");
  106. if(!tex)
  107. {
  108. // If one of the data files is not found, display
  109. // an error message and shutdown.
  110. MessageBox(NULL, "Can't load TEXTURE.JPG", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
  111. hge->System_Shutdown();
  112. hge->Release();
  113. return 0;
  114. }
  115. // Create a distortion mesh
  116. dis=new hgeDistortionMesh(nCols, nRows);
  117. dis->SetTexture(tex);
  118. dis->SetTextureRect(0,0,512,512);
  119. dis->SetBlendMode(BLEND_COLORADD | BLEND_ALPHABLEND | BLEND_ZWRITE);
  120. dis->Clear(0xFF000000);
  121. // Load a font
  122. fnt=new hgeFont("font1.fnt");
  123. // Let's rock now!
  124. hge->System_Start();
  125. // Delete created objects and free loaded resources
  126. delete fnt;
  127. delete dis;
  128. hge->Texture_Free(tex);
  129. }
  130. // Clean up and shutdown
  131. hge->System_Shutdown();
  132. hge->Release();
  133. return 0;
  134. }