#include #include "client/Game.h" Game::Game() : lengthAngle(0.0f), widthAngle(0.0f), texture("resources/textures.png") { for(int x = -6; x <= 6; x++) { for(int y = -6; y <= 6; y++) { for(int z = -6; z <= 6; z++) { if(x * x + y * y + z * z < 16) { addCube(x - 3, y - 5, z - 10); } } } } m.build(); } void Game::addCube(float x, float y, float z) { // bottom m.add({x, y, z, 0.125f, 0.0f, 1, 0, 0}); m.add({x + 1, y, z, 0.1875f, 0.0f, 1, 0, 0}); m.add({x, y, z + 1, 0.125f, 0.0625f, 1, 0, 0}); m.add({x + 1, y, z, 0.1875f, 0.0f, 1, 0, 0}); m.add({x + 1, y, z + 1, 0.1875f, 0.0625f, 1, 0, 0}); m.add({x, y, z + 1, 0.125f, 0.0625f, 1, 0, 0}); // top m.add({x, y + 1, z, 0.25f, 0.0f, 1, 0, 0}); m.add({x, y + 1, z + 1, 0.25f, 0.0625f, 1, 0, 0}); m.add({x + 1, y + 1, z, 0.3125f, 0.0f, 1, 0, 0}); m.add({x + 1, y + 1, z, 0.3125f, 0.0f, 1, 0, 0}); m.add({x, y + 1, z + 1, 0.25f, 0.0625f, 1, 0, 0}); m.add({x + 1, y + 1, z + 1, 0.3125f, 0.0625f, 1, 0, 0}); // left m.add({x, y, z, 0.1875f, 0.0625f, 1, 0, 0}); m.add({x, y, z + 1, 0.25f, 0.0625f, 1, 0, 0}); m.add({x, y + 1, z, 0.1875f, 0.0f, 1, 0, 0}); m.add({x, y, z + 1, 0.25f, 0.0625f, 1, 0, 0}); m.add({x, y + 1, z + 1, 0.25f, 0.0f, 1, 0, 0}); m.add({x, y + 1, z, 0.1875f, 0.0f, 1, 0, 0}); // right m.add({x + 1, y, z, 0.25f, 0.0625f, 1, 0, 0}); m.add({x + 1, y + 1, z, 0.25f, 0.0f, 1, 0, 0}); m.add({x + 1, y, z + 1, 0.1875f, 0.0625f, 1, 0, 0}); m.add({x + 1, y, z + 1, 0.1875f, 0.0625f, 1, 0, 0}); m.add({x + 1, y + 1, z, 0.25f, 0.0f, 1, 0, 0}); m.add({x + 1, y + 1, z + 1, 0.1875f, 0.0f, 1, 0, 0}); // front m.add({x, y, z + 1, 0.1875f, 0.0625f, 1, 0, 0}); m.add({x + 1, y, z + 1, 0.25f, 0.0625f, 1, 0, 0}); m.add({x, y + 1, z + 1, 0.1875f, 0.0f, 1, 0, 0}); m.add({x + 1, y + 1, z + 1, 0.25f, 0.0f, 1, 0, 0}); m.add({x, y + 1, z + 1, 0.1875f, 0.0f, 1, 0, 0}); m.add({x + 1, y, z + 1, 0.25f, 0.0625f, 1, 0, 0}); // back m.add({x, y, z, 0.25f, 0.0625f, 1, 0, 0}); m.add({x, y + 1, z, 0.25f, 0.0f, 1, 0, 0}); m.add({x + 1, y, z, 0.1875f, 0.0625f, 1, 0, 0}); m.add({x + 1, y + 1, z, 0.1875f, 0.0f, 1, 0, 0}); m.add({x + 1, y, z, 0.1875f, 0.0625f, 1, 0, 0}); m.add({x, y + 1, z, 0.25f, 0.0f, 1, 0, 0}); } void Game::tick(const Keys& keys, const MouseButtons& mButtons, Camera& cam) { (void) mButtons; const float speed = 0.5f; if(keys.down.isDown()) { pos.addMul(cam.getFlatBack(), speed); } if(keys.up.isDown()) { pos.addMul(cam.getFlatFront(), speed); } if(keys.left.isDown()) { pos.addMul(cam.getFlatLeft(), speed); } if(keys.right.isDown()) { pos.addMul(cam.getFlatRight(), speed); } if(keys.jump.isDown()) { pos.addMul(cam.getFlatUp(), speed); } if(keys.sneak.isDown()) { pos.addMul(cam.getFlatDown(), speed); } const float rotation = 5.0f; if(keys.camLeft.isDown()) { lengthAngle += rotation; } if(keys.camRight.isDown()) { lengthAngle -= rotation; } if(keys.camUp.isDown() && widthAngle - rotation > -90.0f) { widthAngle -= rotation; } if(keys.camDown.isDown() && widthAngle + rotation < 90.0f) { widthAngle += rotation; } cam.storePosition(); cam.setPosition(pos, lengthAngle, widthAngle); } void Game::renderWorld(float lag, MatrixStack& stack, Shader& sh) { (void) lag; (void) stack; (void) sh; texture.bind(0); m.draw(); } void Game::renderTextOverlay(float lag, MatrixStack& stack, Shader& sh, FontRenderer& fr) { (void) lag; stack.get().scale(2.0f, 2.0f, 2.0f); sh.setMatrix("model", stack.get().getValues()); fr.drawString(0, 0, "Das ist ein Test"); }