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);