#include #include #include "Game.h" #include "MarchingCubes.h" #include "gaming-core/utils/Array.h" #include "gaming-core/utils/List.h" #include "gaming-core/utils/Utils.h" #include "gaming-core/wrapper/GL.h" Game::Game(Shader& shader, Shader& noiceShader, LayeredFramebuffer& buffer, Buttons& buttons, const Size& size) : shader(shader), noiceShader(noiceShader), noiceBuffer(buffer), buttons(buttons), size(size), frustum(60, 0.1f, 1000.0f, size), up(buttons.add(GLFW_KEY_SPACE, "Up")), down(buttons.add(GLFW_KEY_LEFT_SHIFT, "Down")), left(buttons.add(GLFW_KEY_A, "left")), right(buttons.add(GLFW_KEY_D, "right")), front(buttons.add(GLFW_KEY_W, "front")), back(buttons.add(GLFW_KEY_S, "back")) { rectangleBuffer.setAttributes(Attributes().addFloat(2)); float data[6][2] = {{-1.0f, -1.0f}, {-1.0, 1.0}, {1.0, -1.0}, {1.0f, 1.0f}, {-1.0, 1.0}, {1.0, -1.0}}; rectangleBuffer.setStaticData(sizeof(data), data); noiceBuffer.bindTextureTo(0); } void Game::render(float lag) { GL::setViewport(64, 64); noiceShader.use(); noiceBuffer.bindAndClear(); for(int i = 0; i < 64; i++) { noiceShader.setFloat("layer", i * (1.0f / 63.0f)); noiceBuffer.bindLayer(i); rectangleBuffer.draw(6); } GL::setViewport(size.width, size.height); shader.use(); GL::bindMainFramebuffer(); GL::clearFramebuffer(); Vector3 interPos = Utils::interpolate(oldPosition, position, lag); shader.setMatrix("proj", frustum.updateProjection().getValues()); Matrix m; m.translate(interPos); m.translateZ(-30.0f); m.translateX(-8.0f); shader.setMatrix("view", m.getValues()); noiceBuffer.bindTextureTo(0); emptyBuffer.drawPoints(0); glDrawArrays(GL_POINTS, 0, 64 * 64 * 64); } void Game::tick() { oldPosition = position; const float speed = 2.5f; if(up.isDown()) { position -= Vector3(0.0f, speed, 0.0f); } if(down.isDown()) { position += Vector3(0.0f, speed, 0.0f); } if(left.isDown()) { position += Vector3(speed, 0.0f, 0.0f); } if(right.isDown()) { position -= Vector3(speed, 0.0f, 0.0f); } if(front.isDown()) { position += Vector3(0.0f, 0.0f, speed); } if(back.isDown()) { position -= Vector3(0.0f, 0.0f, speed); } }