Client.cpp 3.2 KB

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