Game.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include <sstream>
  2. #include "client/Game.h"
  3. Game::Game(const Keys& keys, const MouseButtons& buttons, const Camera& camera, Ray& ray) : keys(keys), buttons(buttons),
  4. camera(camera), ray(ray), lengthAngle(20.0f), widthAngle(35.0f), texture("resources/textures.png") {
  5. for(int x = -6; x <= 6; x++) {
  6. for(int y = -6; y <= 6; y++) {
  7. for(int z = -6; z <= 6; z++) {
  8. if(x * x + y * y + z * z < 16) {
  9. addCube(x - 3, y - 5, z - 10,
  10. x * x + (y - 1) * (y - 1) + z * z >= 16,
  11. x * x + (y + 1) * (y + 1) + z * z >= 16 && !(x == 0 && y == 3 && z == 0),
  12. (x - 1) * (x - 1) + y * y + z * z >= 16,
  13. (x + 1) * (x + 1) + y * y + z * z >= 16,
  14. x * x + y * y + (z + 1) * (z + 1) >= 16,
  15. x * x + y * y + (z - 1) * (z - 1) >= 16);
  16. }
  17. }
  18. }
  19. }
  20. addCube(-3, -1, -10, false, true, true, true, true, true);
  21. //pos.set(-3, 0, -10);
  22. m.build();
  23. }
  24. void Game::addCube(float x, float y, float z, bool bottom, bool top, bool left, bool right, bool front, bool back) {
  25. const float ERROR = 1.0f / 1024.0f;
  26. if(bottom) {
  27. m.add( {x - ERROR, y - ERROR, z - ERROR, 0.125f, 0.0f, 0, -1, 0});
  28. m.add( {x + 1 + ERROR, y - ERROR, z - ERROR, 0.1875f, 0.0f, 0, -1, 0});
  29. m.add( {x - ERROR, y - ERROR, z + 1 + ERROR, 0.125f, 0.0625f, 0, -1, 0});
  30. m.add( {x + 1 + ERROR, y - ERROR, z - ERROR, 0.1875f, 0.0f, 0, -1, 0});
  31. m.add( {x + 1 + ERROR, y - ERROR, z + 1 + ERROR, 0.1875f, 0.0625f, 0, -1, 0});
  32. m.add( {x - ERROR, y - ERROR, z + 1 + ERROR, 0.125f, 0.0625f, 0, -1, 0});
  33. }
  34. if(top) {
  35. m.add( {x - ERROR, y + 1 + ERROR, z - ERROR, 0.25f, 0.0f, 0, 1, 0});
  36. m.add( {x - ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.25f, 0.0625f, 0, 1, 0});
  37. m.add( {x + 1 + ERROR, y + 1 + ERROR, z - ERROR, 0.3125f, 0.0f, 0, 1, 0});
  38. m.add( {x + 1 + ERROR, y + 1 + ERROR, z - ERROR, 0.3125f, 0.0f, 0, 1, 0});
  39. m.add( {x - ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.25f, 0.0625f, 0, 1, 0});
  40. m.add( {x + 1 + ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.3125f, 0.0625f, 0, 1, 0});
  41. }
  42. if(left) {
  43. m.add( {x - ERROR, y - ERROR, z - ERROR, 0.1875f, 0.0625f, -1, 0, 0});
  44. m.add( {x - ERROR, y - ERROR, z + 1 + ERROR, 0.25f, 0.0625f, -1, 0, 0});
  45. m.add( {x - ERROR, y + 1 + ERROR, z - ERROR, 0.1875f, 0.0f, -1, 0, 0});
  46. m.add( {x - ERROR, y - ERROR, z + 1 + ERROR, 0.25f, 0.0625f, -1, 0, 0});
  47. m.add( {x - ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.25f, 0.0f, -1, 0, 0});
  48. m.add( {x - ERROR, y + 1 + ERROR, z - ERROR, 0.1875f, 0.0f, -1, 0, 0});
  49. }
  50. if(right) {
  51. m.add( {x + 1 + ERROR, y - ERROR, z - ERROR, 0.25f, 0.0625f, 1, 0, 0});
  52. m.add( {x + 1 + ERROR, y + 1 + ERROR, z - ERROR, 0.25f, 0.0f, 1, 0, 0});
  53. m.add( {x + 1 + ERROR, y - ERROR, z + 1 + ERROR, 0.1875f, 0.0625f, 1, 0, 0});
  54. m.add( {x + 1 + ERROR, y - ERROR, z + 1 + ERROR, 0.1875f, 0.0625f, 1, 0, 0});
  55. m.add( {x + 1 + ERROR, y + 1 + ERROR, z - ERROR, 0.25f, 0.0f, 1, 0, 0});
  56. m.add( {x + 1 + ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.1875f, 0.0f, 1, 0, 0});
  57. }
  58. if(front) {
  59. m.add( {x - ERROR, y - ERROR, z + 1 + ERROR, 0.1875f, 0.0625f, 0, 0, 1});
  60. m.add( {x + 1 + ERROR, y - ERROR, z + 1 + ERROR, 0.25f, 0.0625f, 0, 0, 1});
  61. m.add( {x - ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.1875f, 0.0f, 0, 0, 1});
  62. m.add( {x + 1 + ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.25f, 0.0f, 0, 0, 1});
  63. m.add( {x - ERROR, y + 1 + ERROR, z + 1 + ERROR, 0.1875f, 0.0f, 0, 0, 1});
  64. m.add( {x + 1 + ERROR, y - ERROR, z + 1 + ERROR, 0.25f, 0.0625f, 0, 0, 1});
  65. }
  66. if(back) {
  67. m.add( {x - ERROR, y - ERROR, z - ERROR, 0.25f, 0.0625f, 0, 0, -1});
  68. m.add( {x - ERROR, y + 1 + ERROR, z - ERROR, 0.25f, 0.0f, 0, 0, -1});
  69. m.add( {x + 1 + ERROR, y - ERROR, z - ERROR, 0.1875f, 0.0625f, 0, 0, -1});
  70. m.add( {x + 1 + ERROR, y + 1 + ERROR, z - ERROR, 0.1875f, 0.0f, 0, 0, -1});
  71. m.add( {x + 1 + ERROR, y - ERROR, z - ERROR, 0.1875f, 0.0625f, 0, 0, -1});
  72. m.add( {x - ERROR, y + 1 + ERROR, z - ERROR, 0.25f, 0.0f, 0, 0, -1});
  73. }
  74. }
  75. void Game::tick() {
  76. const float speed = 0.25f;
  77. if(keys.down.isDown()) {
  78. pos.addMul(camera.getFlatBack(), speed);
  79. }
  80. if(keys.up.isDown()) {
  81. pos.addMul(camera.getFlatBack(), -speed);
  82. }
  83. if(keys.left.isDown()) {
  84. pos.addMul(camera.getFlatRight(), -speed);
  85. }
  86. if(keys.right.isDown()) {
  87. pos.addMul(camera.getFlatRight(), speed);
  88. }
  89. if(keys.jump.isDown()) {
  90. pos.addMul(camera.getFlatUp(), speed);
  91. }
  92. if(keys.sneak.isDown()) {
  93. pos.addMul(camera.getFlatUp(), -speed);
  94. }
  95. const float rotation = 5.0f;
  96. if(keys.camLeft.isDown()) {
  97. lengthAngle += rotation;
  98. }
  99. if(keys.camRight.isDown()) {
  100. lengthAngle -= rotation;
  101. }
  102. if(keys.camUp.isDown() && widthAngle - rotation > -90.0f) {
  103. widthAngle -= rotation;
  104. }
  105. if(keys.camDown.isDown() && widthAngle + rotation < 90.0f) {
  106. widthAngle += rotation;
  107. }
  108. ray.store();
  109. ray.set(pos, lengthAngle, widthAngle);
  110. }
  111. void Game::renderWorld(float lag, MatrixStack& stack, Shader& sh) {
  112. (void) lag;
  113. (void) stack;
  114. (void) sh;
  115. texture.bind(0);
  116. m.draw();
  117. }
  118. void Game::renderTextOverlay(float lag, MatrixStack& stack, Shader& sh, FontRenderer& fr) {
  119. (void) lag;
  120. stack.get().scale(2.0f, 2.0f, 2.0f);
  121. sh.setMatrix("model", stack.get().getValues());
  122. fr.drawString(0, 0, "Das ist ein Test");
  123. }