Fixed movement on a "player" cube. Very simple system atm
This commit is contained in:
@@ -10,6 +10,14 @@
|
|||||||
#include "Core/EKeyDown.h"
|
#include "Core/EKeyDown.h"
|
||||||
#include "Core/EKeyUp.h"
|
#include "Core/EKeyUp.h"
|
||||||
|
|
||||||
|
struct KeyInput
|
||||||
|
{
|
||||||
|
bool Forward = false;
|
||||||
|
bool Left = false;
|
||||||
|
bool Back = false;
|
||||||
|
bool Right = false;
|
||||||
|
};
|
||||||
|
|
||||||
class PlayerSystem : public System
|
class PlayerSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -21,8 +29,9 @@ public:
|
|||||||
virtual void Update(World* world, ComponentWrapper& player, double dt) override;
|
virtual void Update(World* world, ComponentWrapper& player, double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float m_Speed;
|
float m_Speed = 5;
|
||||||
glm::vec3 m_Direction;
|
glm::vec3 m_Direction;
|
||||||
|
KeyInput input;
|
||||||
|
|
||||||
EventRelay<PlayerSystem, Events::KeyDown> m_EKeyDown;
|
EventRelay<PlayerSystem, Events::KeyDown> m_EKeyDown;
|
||||||
bool OnKeyDown(const Events::KeyDown &event);
|
bool OnKeyDown(const Events::KeyDown &event);
|
||||||
|
|||||||
+34
-16
@@ -8,6 +8,24 @@ void PlayerSystem::Initialize()
|
|||||||
|
|
||||||
void PlayerSystem::Update(World * world, ComponentWrapper & player, double dt)
|
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<PlayerSystem>();
|
m_EventBroker->Process<PlayerSystem>();
|
||||||
ComponentWrapper& transform = world->GetComponent(player.EntityID, "Transform");
|
ComponentWrapper& transform = world->GetComponent(player.EntityID, "Transform");
|
||||||
(glm::vec3&)player["Velocity"] = m_Speed * float(dt) * m_Direction;
|
(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)
|
bool PlayerSystem::OnKeyDown(const Events::KeyDown & event)
|
||||||
{
|
{
|
||||||
if (event.KeyCode == GLFW_KEY_UP) {
|
if (event.KeyCode == GLFW_KEY_W) {
|
||||||
m_Direction.z == -1;
|
input.Forward = true;
|
||||||
}
|
}
|
||||||
if (event.KeyCode == GLFW_KEY_LEFT) {
|
if (event.KeyCode == GLFW_KEY_A) {
|
||||||
m_Direction.x == -1;
|
input.Left = true;
|
||||||
}
|
}
|
||||||
if (event.KeyCode == GLFW_KEY_DOWN) {
|
if (event.KeyCode == GLFW_KEY_S) {
|
||||||
m_Direction.z == 1;
|
input.Back = true;
|
||||||
}
|
}
|
||||||
if (event.KeyCode == GLFW_KEY_RIGHT) {
|
if (event.KeyCode == GLFW_KEY_D) {
|
||||||
m_Direction.x == 1;
|
input.Right = true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlayerSystem::OnKeyUp(const Events::KeyUp & event)
|
bool PlayerSystem::OnKeyUp(const Events::KeyUp & event)
|
||||||
{
|
{
|
||||||
if (event.KeyCode == GLFW_KEY_UP) {
|
if (event.KeyCode == GLFW_KEY_W) {
|
||||||
m_Direction.z == 0;
|
input.Forward = false;
|
||||||
}
|
}
|
||||||
if (event.KeyCode == GLFW_KEY_LEFT) {
|
if (event.KeyCode == GLFW_KEY_A) {
|
||||||
m_Direction.x == 0;
|
input.Left = false;
|
||||||
}
|
}
|
||||||
if (event.KeyCode == GLFW_KEY_DOWN) {
|
if (event.KeyCode == GLFW_KEY_S) {
|
||||||
m_Direction.z == 0;
|
input.Back = false;
|
||||||
}
|
}
|
||||||
if (event.KeyCode == GLFW_KEY_RIGHT) {
|
if (event.KeyCode == GLFW_KEY_D) {
|
||||||
m_Direction.x == 0;
|
input.Right = false;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user