Game.cpp 4.8 KB

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