#include "client/Game.h" #include "gaming-core/utils/Utils.h" Game::Game(const Control& control, const Clock& fps, const Clock& tps, RenderSettings& settings, const Size& size) : control(control), fps(fps), tps(tps), renderSettings(settings), size(size), world(blockRegistry), worldRenderer(world) { pos = Vector3(16.0f, 24.0f, 0.0f); } void Game::tick() { lastRotation = rotation; lastPos = pos; Vector3 right = rotation * Vector3(1.0f, 0.0f, 0.0f); Vector3 up = rotation * Vector3(0.0f, 1.0f, 0.0f); Vector3 back = rotation * Vector3(0.0f, 0.0f, -1.0f); const float speed = 1.0f; if(control.keys.down.isDown()) { pos += back * speed; } if(control.keys.up.isDown()) { pos -= back * speed; } if(control.keys.left.isDown()) { pos -= right * speed; } if(control.keys.right.isDown()) { pos += right * speed; } if(control.keys.jump.isDown()) { pos += up * speed; } if(control.keys.sneak.isDown()) { pos -= up * speed; } const float rotationSpeed = 5.0f; if(control.keys.camLeft.isDown()) { rotation = Quaternion(up, -rotationSpeed) * rotation; } if(control.keys.camRight.isDown()) { rotation = Quaternion(up, rotationSpeed) * rotation; } if(control.keys.camUp.isDown()) { rotation = Quaternion(right, -rotationSpeed) * rotation; } if(control.keys.camDown.isDown()) { rotation = Quaternion(right, rotationSpeed) * rotation; } } void Game::renderWorld(float lag, Renderer& renderer) const { renderer.update(Utils::interpolate(lastPos, pos, lag), lastRotation.lerp(lag, rotation)); worldRenderer.render(lag, renderer); } void Game::renderTextOverlay(float lag, Renderer& renderer, FontRenderer& fr) const { (void) lag; renderer.scale(2.0f).update(); StringBuffer<100> s; s.append("FPS: ").append(fps.getUpdatesPerSecond()).append(" TPS: ").append(tps.getUpdatesPerSecond()); fr.drawString(10, 10, s); } bool Game::isRunning() const { return true; }