diff --git a/src/PlayerCamera.cpp b/src/PlayerCamera.cpp index cde03a9..c3bac61 100644 --- a/src/PlayerCamera.cpp +++ b/src/PlayerCamera.cpp @@ -15,6 +15,35 @@ void PlayerCamera::tick() { // get position to look at glm::vec3 cameraTarget = cameraPosition + cameraForward; + // TODO Handle movement speed based on delta time + // handle keyboard input + const Uint8 *keyboardState = SDL_GetKeyboardState(nullptr); + if (keyboardState[SDL_SCANCODE_W]) + cameraPosition += cameraForward * movementSpeed; + if (keyboardState[SDL_SCANCODE_S]) + cameraPosition -= cameraForward * movementSpeed; + if (keyboardState[SDL_SCANCODE_A]) + cameraPosition += cameraRight * movementSpeed; + if (keyboardState[SDL_SCANCODE_D]) + cameraPosition -= cameraRight * movementSpeed; + + // handle mouse + SDL_GetRelativeMouseState(&mouseX, &mouseY); + cameraYaw += mouseX * mouseSensitivity; + cameraPitch -= mouseY * mouseSensitivity; + // lock pitch to certain range + if (cameraPitch > 89.0f) + cameraPitch = 89.0f; + if (cameraPitch < -89.0f) + cameraPitch = -89.0f; + + // calculate camera rotation + glm::vec3 direction; + direction.x = cos(glm::radians(cameraYaw)) * cos(glm::radians(cameraPitch)); + direction.y = sin(glm::radians(cameraPitch)); + direction.z = sin(glm::radians(cameraYaw)) * cos(glm::radians(cameraPitch)); + cameraForward = glm::normalize(direction); + // MVP stuff glm::mat4 model = glm::mat4(1.0f); diff --git a/src/PlayerCamera.h b/src/PlayerCamera.h index 5c9b9f9..57f184c 100644 --- a/src/PlayerCamera.h +++ b/src/PlayerCamera.h @@ -1,5 +1,6 @@ #pragma once #include "Error.h" +#include #include #include #include @@ -12,13 +13,15 @@ private: // Error reporting class Error error = Error("PlayerCamera"); // Constants for speed and sensitivity - const float movementSpeed = 0.005f; - const float mouseSensitivity = 0.005f; + const float movementSpeed = 0.02f; + const float mouseSensitivity = 0.05f; // Player position glm::vec3 cameraPosition = glm::vec3(0.0f, 0.0f, 3.0f); glm::vec3 cameraForward = glm::vec3(0.0f, 0.0f, -1.0f); glm::vec3 cameraUp = glm::vec3(0.0f, 0.0f, -1.0f); + float cameraYaw = -90.0f; + float cameraPitch = 0.0f; // Mouse position int mouseX, mouseY;