#include "Client.h" #include using namespace std; Client::Client() : world(&chunkProvider) { position.set(0, 0, -2); shader.setCamera(position.getX(), position.getY(), position.getZ(), 0, 0); shader.storeCamera(); 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(); if(keyManager.isDown(KEY_CAM_TEST)) { Engine::setLineMode(true); } else { Engine::setLineMode(false); } shader.storeCamera(); float factor = 10.0f; if(keyManager.isDown(KEY_LEFT)) { position.addMul(shader.getLeft(), factor); } if(keyManager.isDown(KEY_RIGHT)) { position.addMul(shader.getRight(), factor); } if(keyManager.isDown(KEY_UP)) { position.addMul(shader.getFront(), factor); } if(keyManager.isDown(KEY_DOWN)) { position.addMul(shader.getBack(), factor); } if(keyManager.isDown(KEY_JUMP)) { position.addMul(shader.getUp(), factor); } if(keyManager.isDown(KEY_SNEAK)) { position.addMul(shader.getDown(), 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; } shader.setCamera(position.getX(), position.getY(), position.getZ(), lengthAngle, widthAngle); mouseManager.tick(); keyManager.tick(); } void Client::renderTick(float lag) { fps.update(); shader.set3DMode(lag); shader.setToIdentity(); shader.updateModelMatrix(); shader.setColorEnabled(true); shader.setTextureEnabled(false); shader.setUseBlending(false); shader.setNormalsEnabled(true); chunkRenderer.renderTick(shader, directRenderer, lag); shader.set2DMode(); shader.setToIdentity(); shader.updateModelMatrix(); shader.setTextMode(); 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); } }