From 2889a6fa8a03524a92110bc952c4f14788df12e2 Mon Sep 17 00:00:00 2001 From: karl Date: Fri, 2 Oct 2020 22:47:10 +0200 Subject: [PATCH] Make movement work with origin change --- ECS/Components/Movement.h | 2 +- ECS/Components/Transform.h | 4 ++++ ECS/Systems/KeyboardMovementSystem.h | 2 +- main.cpp | 8 ++++---- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ECS/Components/Movement.h b/ECS/Components/Movement.h index 4769618..f8b2ae1 100644 --- a/ECS/Components/Movement.h +++ b/ECS/Components/Movement.h @@ -10,7 +10,7 @@ struct Movement { glm::vec3 speed; - glm::ivec3 moving; + glm::ivec3 moving = glm::ivec3(0, 0, 0); glm::vec3 velocity; }; diff --git a/ECS/Components/Transform.h b/ECS/Components/Transform.h index 4b837be..c2351db 100644 --- a/ECS/Components/Transform.h +++ b/ECS/Components/Transform.h @@ -41,6 +41,10 @@ struct Transform { origin = position; } + void add_to_origin(glm::vec3 addition) { + origin += addition; + } + void set_rotation_from_quat(glm::quat quaternion) { // Remember translation glm::vec4 save = matrix[3]; diff --git a/ECS/Systems/KeyboardMovementSystem.h b/ECS/Systems/KeyboardMovementSystem.h index 9b87408..ccbd7ba 100644 --- a/ECS/Systems/KeyboardMovementSystem.h +++ b/ECS/Systems/KeyboardMovementSystem.h @@ -63,7 +63,7 @@ class KeyboardMovementSystem : public EntitySystem, public EventSubscribereach( [&](Entity *ent, ComponentHandle transform, ComponentHandle movement) { - transform->translate(glm::vec3(movement->moving) * movement->speed * deltaTime); + transform->add_to_origin(transform->matrix * glm::vec4((glm::vec3(movement->moving) * movement->speed * deltaTime), 0.0)); }); } diff --git a/main.cpp b/main.cpp index 5b16558..27309e3 100644 --- a/main.cpp +++ b/main.cpp @@ -88,10 +88,10 @@ int main() { Entity *player = world->create(); player->assign(); - //player->assign(glm::vec3(2.f, 2.f, 2.f)); - //player->assign(0.1); + player->assign(glm::vec3(2.f, 2.f, 2.f)); + player->assign(0.1); player->assign(70.0f, 1280, 720, 0.1f, 100.0f); - player->assign(10.0, PathMove::Path(std::vector{ + /*player->assign(10.0, PathMove::Path(std::vector{ glm::vec3(0.0, 2.0, 0.0), glm::vec3(-2.0, 2.0, -1.0), glm::vec3(-1.0, 2.0, -2.0), @@ -109,7 +109,7 @@ int main() { glm::angleAxis(glm::radians(120.f), glm::vec3(0.f, 1.f, 0.f)), glm::angleAxis(glm::radians(180.f), glm::vec3(0.f, 1.f, 0.f)) }) - ); + );*/ Entity *monkey = world->create(); monkey->assign();