Game.cpp 4.0 KB

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