3 #include "input_handler.hpp"
9 using namespace dragonblocks;
11 Player* Player::localplayer = nullptr;
13 Player *Player::createLocalplayer(Camera *c, InputHandler *i, Map *m)
16 throw runtime_error("Localplayer already exists");
17 return localplayer = new Player(c, i, m);
20 void Player::staticMouseHandler(double dtime, double x, double y)
22 localplayer->mouseHandler(dtime, x, y);
25 void Player::staticKeyHandler(double dtime, set<int> keys)
27 localplayer->keyHandler(dtime, keys);
30 void Player::mouseHandler(double dtime, double x, double y)
34 pitch = clamp(pitch, -89.0, 89.0);
35 camera->update(yaw, pitch);
38 void Player::keyHandler(double dtime, set<int> keys)
40 vec3 vel = vec3(speed * dtime);
41 vec3 front = camera->front(), right = camera->right(), up = camera->up();
43 front = normalize(vec3(front.x, 0, front.z));
44 up = normalize(vec3(0, up.y, 0));
46 if (keys.find(GLFW_KEY_W) != keys.end()) {
48 } else if (keys.find(GLFW_KEY_S) != keys.end()) {
51 if (keys.find(GLFW_KEY_D) != keys.end()) {
53 } else if (keys.find(GLFW_KEY_A) != keys.end()) {
56 if (keys.find(GLFW_KEY_SPACE) != keys.end()) {
58 } else if (keys.find(GLFW_KEY_LEFT_SHIFT) != keys.end()) {
65 void Player::loadChunks()
67 ivec3 chunkp = Map::getChunkPos(pos);
68 for (int x = chunkp.x - 1; x <= chunkp.x + 1; x++) {
69 for (int y = chunkp.y - 1; y < chunkp.y + 1; y++) {
70 for (int z = chunkp.z - 1; z <= chunkp.z + 1; z++) {
71 map->createChunk(ivec3(x, y, z));
77 Player::Player(Camera *c, InputHandler *i, Map *m) : camera(c), input_handler(i), map(m)
79 input_handler->listenFor(GLFW_KEY_W);
80 input_handler->listenFor(GLFW_KEY_A);
81 input_handler->listenFor(GLFW_KEY_S);
82 input_handler->listenFor(GLFW_KEY_D);
83 input_handler->listenFor(GLFW_KEY_SPACE);
84 input_handler->listenFor(GLFW_KEY_LEFT_SHIFT);
86 input_handler->addMouseHandler(Player::staticMouseHandler);
87 input_handler->addKeyHandler(Player::staticKeyHandler);