diff --git a/ECS/Systems/KeyboardMovementSystem.h b/ECS/Systems/KeyboardMovementSystem.h index 0b63113..90a0917 100644 --- a/ECS/Systems/KeyboardMovementSystem.h +++ b/ECS/Systems/KeyboardMovementSystem.h @@ -44,7 +44,7 @@ class KeyboardMovementSystem : public EntitySystem, public EventSubscribereach([&](Entity *ent, ComponentHandle movement) { if (event.action == GLFW_PRESS) { - movement->moving.x = 1; + movement->moving.x = -1; } else if (event.action == GLFW_RELEASE) { movement->moving.x = 0; } @@ -52,7 +52,7 @@ class KeyboardMovementSystem : public EntitySystem, public EventSubscribereach([&](Entity *ent, ComponentHandle movement) { if (event.action == GLFW_PRESS) { - movement->moving.x = -1; + movement->moving.x = 1; } else if (event.action == GLFW_RELEASE) { movement->moving.x = 0; } @@ -64,7 +64,7 @@ class KeyboardMovementSystem : public EntitySystem, public EventSubscribereach( [&](Entity *ent, ComponentHandle transform, ComponentHandle movement) { - transform->translate(glm::mat3x3(transform->matrix) * glm::vec3(movement->moving) * movement->speed * deltaTime); + transform->translate(glm::vec3(movement->moving) * movement->speed * deltaTime); }); } diff --git a/ECS/Systems/MouseLookSystem.h b/ECS/Systems/MouseLookSystem.h index 54ee472..a362615 100644 --- a/ECS/Systems/MouseLookSystem.h +++ b/ECS/Systems/MouseLookSystem.h @@ -28,7 +28,7 @@ public: void receive(World *pWorld, const MouseMoveEvent &event) override { pWorld->each([&](Entity *ent, ComponentHandle transform, ComponentHandle mouse, ComponentHandle camera) { - double xOffset = event.newX - lastX; + double xOffset = lastX - event.newX; double yOffset = lastY - event.newY; lastX = event.newX; @@ -46,21 +46,14 @@ public: if(pitch < -89.0f) pitch = -89.0f; - glm::vec3 direction; - direction.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch)); - direction.y = sin(glm::radians(pitch)); - direction.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch)); + glm::mat4x4 newTransform = glm::mat4x4(1.0); - glm::vec3 cameraOrigin = transform->getPosition(); - glm::vec3 cameraFront = glm::normalize(direction); - glm::vec3 cameraUp = glm::vec3(0.0, 1.0, 0.0); - glm::vec3 cameraRight = glm::cross(cameraFront, cameraUp); + newTransform = glm::rotate(newTransform, glm::radians((float)pitch), transform->right()); + newTransform = glm::rotate(newTransform, glm::radians((float)yaw), glm::vec3(0.0, 1.0, 0.0)); - glm::mat4x4 lookAt = glm::lookAt(cameraOrigin, cameraOrigin + cameraFront, cameraUp); + newTransform[3] = transform->matrix[3]; - lookAt[3] = glm::vec4(cameraOrigin, 1.0); - - transform->matrix = lookAt; + transform->matrix = newTransform; }); } diff --git a/ECS/Systems/RenderSystem.h b/ECS/Systems/RenderSystem.h index dcb03e5..8a9aa87 100644 --- a/ECS/Systems/RenderSystem.h +++ b/ECS/Systems/RenderSystem.h @@ -23,7 +23,7 @@ public: shader.use(); shader.setMat4("projection", camera->projection); - shader.setMat4("view", cameraTransform->matrix); + shader.setMat4("view", glm::inverse(cameraTransform->matrix)); pWorld->each([&](Entity *ent, ComponentHandle mesh, ComponentHandle transform) { shader.setMat4("model", transform->matrix);