diff --git a/src/main.c b/src/main.c index eba6cb2..87c0d2b 100644 --- a/src/main.c +++ b/src/main.c @@ -125,17 +125,43 @@ void handleInputs(double deltaTime) { } if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) { - cameraPosition.x += deltaTime * 10; + vec4 delta; + mat4 transform; + + vec3Subtract((vec3*)&delta, &origin, &cameraPosition); + delta.y = 0; + vec3Normalise((vec3*)&delta, (vec3*)&delta); + vec3Multiply((vec3*)&delta, (vec3*)&delta, -10); + + rotationY(&transform, pi / 2); + multiplyAny((GLfloat*)&delta, (GLfloat*)&transform, (GLfloat*)&delta, 4, 4, 1); + + vec3Multiply((vec3*)&delta, (vec3*)&delta, deltaTime); + + vec3Add(&cameraPosition, &cameraPosition, (vec3*)&delta); } if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) { - cameraPosition.x -= deltaTime * 10; + vec4 delta; + mat4 transform; + + vec3Subtract((vec3*)&delta, &origin, &cameraPosition); + delta.y = 0; + vec3Normalise((vec3*)&delta, (vec3*)&delta); + vec3Multiply((vec3*)&delta, (vec3*)&delta, 10); + + rotationY(&transform, pi / 2); + multiplyAny((GLfloat*)&delta, (GLfloat*)&transform, (GLfloat*)&delta, 4, 4, 1); + + vec3Multiply((vec3*)&delta, (vec3*)&delta, deltaTime); + + vec3Add(&cameraPosition, &cameraPosition, (vec3*)&delta); } - if (glfwGetKey(window, GLFW_KEY_F) == GLFW_PRESS) { - cameraPosition.y += deltaTime * 10; - } - if (glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS) { + if (glfwGetKey(window, GLFW_KEY_F) == GLFW_PRESS || glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) { cameraPosition.y -= deltaTime * 10; } + if (glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS || glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) { + cameraPosition.y += deltaTime * 10; + } } SceneNode* chalkboard = findNodeByName("myChalkboard1", rootNode);