#include "Client.h" #include using namespace std; Client::Client() : world(&chunkProvider) { position.set(16, 50, -5); lengthAngle = -15; widthAngle = -20; camera.setPosition(position.getX(), position.getY(), position.getZ(), 0, 0); camera.storePosition(); keyManager.map(KEY_LEFT, GLFW_KEY_A); keyManager.map(KEY_RIGHT, GLFW_KEY_D); keyManager.map(KEY_UP, GLFW_KEY_W); keyManager.map(KEY_DOWN, GLFW_KEY_S); keyManager.map(KEY_JUMP, GLFW_KEY_SPACE); keyManager.map(KEY_SNEAK, GLFW_KEY_LEFT_SHIFT); keyManager.map(KEY_CAM_LEFT, GLFW_KEY_H); keyManager.map(KEY_CAM_RIGHT, GLFW_KEY_K); keyManager.map(KEY_CAM_UP, GLFW_KEY_U); keyManager.map(KEY_CAM_DOWN, GLFW_KEY_J); keyManager.map(KEY_CAM_TEST, GLFW_KEY_T); mouseManager.map(MOUSE_LEFT, GLFW_MOUSE_BUTTON_1); world.registerChunkListener(&chunkRenderer); world.updateDirtyChunks(); } Client::~Client() { } void Client::tick() { tps.update(); camera.storePosition(); float factor = 0.5f; if(keyManager.isDown(KEY_LEFT)) { position.addMul(camera.getFlatLeft(), factor); } if(keyManager.isDown(KEY_RIGHT)) { position.addMul(camera.getFlatRight(), factor); } if(keyManager.isDown(KEY_UP)) { position.addMul(camera.getFlatFront(), factor); } if(keyManager.isDown(KEY_DOWN)) { position.addMul(camera.getFlatBack(), factor); } if(keyManager.isDown(KEY_JUMP)) { position.addMul(camera.getFlatUp(), factor); } if(keyManager.isDown(KEY_SNEAK)) { position.addMul(camera.getFlatDown(), factor); } if(keyManager.isDown(KEY_CAM_LEFT)) { lengthAngle += 2; } if(keyManager.isDown(KEY_CAM_RIGHT)) { lengthAngle -= 2; } if(keyManager.isDown(KEY_CAM_UP) && widthAngle < 88) { widthAngle += 2; } if(keyManager.isDown(KEY_CAM_DOWN) && widthAngle > -88) { widthAngle -= 2; } camera.setPosition(position.getX(), position.getY(), position.getZ(), lengthAngle, widthAngle); mouseManager.tick(); keyManager.tick(); } void Client::render3DTick(float lag) { fps.update(); camera.update(lag); Engine::setWorldViewMatrix(camera.getViewMatrix()); shader.setToIdentity(); Engine::setWorldModelMatrix(shader.getModelMatrix()); chunkRenderer.renderTick(shader, camera, directRenderer, lag); } void Client::render2DTick(float lag) { shader.setToIdentity(); Engine::setOverlayModelMatrix(shader.getModelMatrix()); string wusi; wusi = "FPS: " + to_string(fps.getUpdatesPerSecond()); directRenderer.drawString(10, 10, true, wusi); } void Client::onKeyEvent(int key, int scancode, int action, int mods) { if(action == GLFW_PRESS) { keyManager.press(key); } else if(action == GLFW_RELEASE) { keyManager.release(key); } } void Client::onMouseClick(int button, int action, int mods) { if(action == GLFW_PRESS) { mouseManager.press(button); } else if(action == GLFW_RELEASE) { mouseManager.release(button); } }