MeshEffect.hpp
上传用户:zhj2929
上传日期:2022-07-23
资源大小:28772k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #ifndef _MESH_EFFECT_H_
  2. #define _MESH_EFFECT_H_
  3. #include "../../JGE/include/JDistortionMesh.h"
  4. #define MESH_EFFECT1 0
  5. #define MESH_EFFECT2 1
  6. class MeshEffect
  7. {
  8. private:
  9. float mMax;
  10. JDistortionMesh* mDistortionMesh;
  11. float mAlpha;
  12. float mTime;
  13. int mMode;
  14. int mCols;
  15. int mRows;
  16. float mX;
  17. float mY;
  18. public:
  19. MeshEffect(JTexture* tex, float x, float y, float width, float height, int cols=16, int rows=16) 
  20. {
  21.   mDistortionMesh = new JDistortionMesh(tex, x, y, width, height, cols, rows);
  22. mMax = 32.0f;
  23. mTime = 0.0f;
  24. mMode = MESH_EFFECT1;
  25. mCols = cols;
  26. mRows = rows;
  27. }
  28. ~MeshEffect() 
  29. {
  30. delete mDistortionMesh;
  31. }
  32. void SetMode(int mode)
  33. {
  34. mMode = mode;
  35. }
  36. void SetMax(float max) 
  37. {
  38. mMax = max;
  39. }
  40. void SetAlpha(float alpha)
  41. {
  42. mAlpha = alpha;
  43. }
  44. void SetPosition(float x, float y)
  45. {
  46. mX = x;
  47. mY = y;
  48. }
  49. void Update(float dt)
  50. {
  51. int i, j, col;
  52. mTime += (dt/1000.0f);
  53. int alpha = (int)mAlpha;
  54. float xDis, yDis;
  55. switch(mMode)
  56. {
  57. case MESH_EFFECT1:
  58. for(i=1;i<mRows-1;i++)
  59. for(j=1;j<mCols-1;j++)
  60. {
  61. xDis = cosf(mTime*10+(i+j)/2)*5;
  62. yDis = sinf(mTime*10+(i+j)/2)*5;
  63. if (xDis >= 0.0f)
  64. {
  65. if (xDis > mMax)
  66. xDis = mMax;
  67. }
  68. else
  69. {
  70. if (xDis < -mMax)
  71. xDis = -mMax;
  72. }
  73. if (yDis >= 0.0f)
  74. {
  75. if (yDis > mMax)
  76. yDis = mMax;
  77. }
  78. else
  79. {
  80. if (yDis < -mMax)
  81. yDis = -mMax;
  82. }
  83. mDistortionMesh->SetDisplacement(j,i,xDis,yDis);
  84. mDistortionMesh->SetColor(j,i,ARGB(alpha,0,0,0));
  85. }
  86. break;
  87. case MESH_EFFECT2:
  88. for(i=0;i<mRows;i++)
  89. for(j=1;j<mCols-1;j++)
  90. {
  91. xDis = cosf(mTime*5+j/2)*15;
  92. if (xDis >= 0.0f)
  93. {
  94. if (xDis > mMax)
  95. xDis = mMax;
  96. }
  97. else
  98. {
  99. if (xDis < -mMax)
  100. xDis = -mMax;
  101. }
  102. mDistortionMesh->SetDisplacement(j,i,xDis,0);
  103. col=int((cosf(mTime*5+(i+j)/2)+1)*35);
  104. mDistortionMesh->SetColor(j,i,ARGB(alpha,col,col,col));
  105. }
  106. break;
  107. }
  108. }
  109. void Render() 
  110. {
  111. mDistortionMesh->Render(mX, mY);
  112. }
  113. };
  114. #endif