Client.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include "Client.h"
  2. #include <iostream>
  3. using namespace std;
  4. Client::Client() : world(&chunkProvider)
  5. {
  6. position.set(0, 0, -2);
  7. shader.setCamera(position.getX(), position.getY(), position.getZ(), 0, 0);
  8. shader.storeCamera();
  9. keyManager.map(KEY_LEFT, GLFW_KEY_A);
  10. keyManager.map(KEY_RIGHT, GLFW_KEY_D);
  11. keyManager.map(KEY_UP, GLFW_KEY_W);
  12. keyManager.map(KEY_DOWN, GLFW_KEY_S);
  13. keyManager.map(KEY_JUMP, GLFW_KEY_SPACE);
  14. keyManager.map(KEY_SNEAK, GLFW_KEY_LEFT_SHIFT);
  15. keyManager.map(KEY_CAM_LEFT, GLFW_KEY_H);
  16. keyManager.map(KEY_CAM_RIGHT, GLFW_KEY_K);
  17. keyManager.map(KEY_CAM_UP, GLFW_KEY_U);
  18. keyManager.map(KEY_CAM_DOWN, GLFW_KEY_J);
  19. keyManager.map(KEY_CAM_TEST, GLFW_KEY_T);
  20. mouseManager.map(MOUSE_LEFT, GLFW_MOUSE_BUTTON_1);
  21. world.registerChunkListener(&chunkRenderer);
  22. world.updateDirtyChunks();
  23. }
  24. Client::~Client()
  25. {
  26. }
  27. void Client::tick()
  28. {
  29. tps.update();
  30. if(keyManager.isDown(KEY_CAM_TEST))
  31. {
  32. Engine::setLineMode(true);
  33. }
  34. else
  35. {
  36. Engine::setLineMode(false);
  37. }
  38. shader.storeCamera();
  39. float factor = 0.5f;
  40. if(keyManager.isDown(KEY_LEFT))
  41. {
  42. position.addMul(shader.getLeft(), factor);
  43. }
  44. if(keyManager.isDown(KEY_RIGHT))
  45. {
  46. position.addMul(shader.getRight(), factor);
  47. }
  48. if(keyManager.isDown(KEY_UP))
  49. {
  50. position.addMul(shader.getFront(), factor);
  51. }
  52. if(keyManager.isDown(KEY_DOWN))
  53. {
  54. position.addMul(shader.getBack(), factor);
  55. }
  56. if(keyManager.isDown(KEY_JUMP))
  57. {
  58. position.addMul(shader.getUp(), factor);
  59. }
  60. if(keyManager.isDown(KEY_SNEAK))
  61. {
  62. position.addMul(shader.getDown(), factor);
  63. }
  64. if(keyManager.isDown(KEY_CAM_LEFT))
  65. {
  66. lengthAngle += 2;
  67. }
  68. if(keyManager.isDown(KEY_CAM_RIGHT))
  69. {
  70. lengthAngle -= 2;
  71. }
  72. if(keyManager.isDown(KEY_CAM_UP) && widthAngle < 88)
  73. {
  74. widthAngle += 2;
  75. }
  76. if(keyManager.isDown(KEY_CAM_DOWN) && widthAngle > -88)
  77. {
  78. widthAngle -= 2;
  79. }
  80. shader.setCamera(position.getX(), position.getY(), position.getZ(), lengthAngle, widthAngle);
  81. mouseManager.tick();
  82. keyManager.tick();
  83. }
  84. void Client::renderTick(float lag)
  85. {
  86. fps.update();
  87. shader.set3DMode(lag);
  88. shader.setToIdentity();
  89. shader.updateModelMatrix();
  90. shader.setColorEnabled(true);
  91. shader.setTextureEnabled(false);
  92. shader.setUseBlending(false);
  93. shader.setNormalsEnabled(true);
  94. chunkRenderer.renderTick(shader, directRenderer, lag);
  95. shader.set2DMode();
  96. shader.setToIdentity();
  97. shader.updateModelMatrix();
  98. shader.setTextMode();
  99. string wusi;
  100. wusi = "FPS: " + to_string(fps.getUpdatesPerSecond());
  101. directRenderer.drawString(10, 10, true, wusi);
  102. }
  103. void Client::onKeyEvent(int key, int scancode, int action, int mods)
  104. {
  105. if(action == GLFW_PRESS)
  106. {
  107. keyManager.press(key);
  108. }
  109. else if(action == GLFW_RELEASE)
  110. {
  111. keyManager.release(key);
  112. }
  113. }
  114. void Client::onMouseClick(int button, int action, int mods)
  115. {
  116. if(action == GLFW_PRESS)
  117. {
  118. mouseManager.press(button);
  119. }
  120. else if(action == GLFW_RELEASE)
  121. {
  122. mouseManager.release(button);
  123. }
  124. }