diff --git a/include/Game/PlayerSystem.h b/include/Game/PlayerSystem.h index 92e8a7cc..5966bb24 100644 --- a/include/Game/PlayerSystem.h +++ b/include/Game/PlayerSystem.h @@ -10,6 +10,14 @@ #include "Core/EKeyDown.h" #include "Core/EKeyUp.h" +struct KeyInput +{ + bool Forward = false; + bool Left = false; + bool Back = false; + bool Right = false; +}; + class PlayerSystem : public System { public: @@ -21,8 +29,9 @@ public: virtual void Update(World* world, ComponentWrapper& player, double dt) override; private: - float m_Speed; + float m_Speed = 5; glm::vec3 m_Direction; + KeyInput input; EventRelay m_EKeyDown; bool OnKeyDown(const Events::KeyDown &event); diff --git a/src/Game/PlayerSystem.cpp b/src/Game/PlayerSystem.cpp index 024204b5..17e18a9a 100644 --- a/src/Game/PlayerSystem.cpp +++ b/src/Game/PlayerSystem.cpp @@ -8,6 +8,24 @@ void PlayerSystem::Initialize() void PlayerSystem::Update(World * world, ComponentWrapper & player, double dt) { + if (input.Forward) { + m_Direction.z = -1; + } + else if (input.Back) { + m_Direction.z = 1; + } + else { + m_Direction.z = 0; + } + if (input.Left) { + m_Direction.x = -1; + } + else if (input.Right) { + m_Direction.x = 1; + } + else { + m_Direction.x = 0; + } m_EventBroker->Process(); ComponentWrapper& transform = world->GetComponent(player.EntityID, "Transform"); (glm::vec3&)player["Velocity"] = m_Speed * float(dt) * m_Direction; @@ -16,34 +34,34 @@ void PlayerSystem::Update(World * world, ComponentWrapper & player, double dt) bool PlayerSystem::OnKeyDown(const Events::KeyDown & event) { - if (event.KeyCode == GLFW_KEY_UP) { - m_Direction.z == -1; + if (event.KeyCode == GLFW_KEY_W) { + input.Forward = true; } - if (event.KeyCode == GLFW_KEY_LEFT) { - m_Direction.x == -1; + if (event.KeyCode == GLFW_KEY_A) { + input.Left = true; } - if (event.KeyCode == GLFW_KEY_DOWN) { - m_Direction.z == 1; + if (event.KeyCode == GLFW_KEY_S) { + input.Back = true; } - if (event.KeyCode == GLFW_KEY_RIGHT) { - m_Direction.x == 1; + if (event.KeyCode == GLFW_KEY_D) { + input.Right = true; } return true; } bool PlayerSystem::OnKeyUp(const Events::KeyUp & event) { - if (event.KeyCode == GLFW_KEY_UP) { - m_Direction.z == 0; + if (event.KeyCode == GLFW_KEY_W) { + input.Forward = false; } - if (event.KeyCode == GLFW_KEY_LEFT) { - m_Direction.x == 0; + if (event.KeyCode == GLFW_KEY_A) { + input.Left = false; } - if (event.KeyCode == GLFW_KEY_DOWN) { - m_Direction.z == 0; + if (event.KeyCode == GLFW_KEY_S) { + input.Back = false; } - if (event.KeyCode == GLFW_KEY_RIGHT) { - m_Direction.x == 0; + if (event.KeyCode == GLFW_KEY_D) { + input.Right = false; } return false; }