Added a very basic PlayerSystem, and a PlayerComponent.

This commit is contained in:
stiffly
2015-12-11 13:45:19 +01:00
parent 6326a60a79
commit 80f028edf2
10 changed files with 121 additions and 7 deletions
+4 -3
View File
@@ -10,16 +10,17 @@ class System
friend class SystemPipeline;
public:
System(const EventBroker* eventBroker, std::string componentType)
System(EventBroker* eventBroker, std::string componentType)
: m_EventBroker(eventBroker)
, m_ComponentType(componentType)
{ }
virtual void Initialize();
virtual void Update(World* world, ComponentWrapper& component, double dt) = 0;
private:
const EventBroker* m_EventBroker;
std::string m_ComponentType;
EventBroker* m_EventBroker;
};
#endif
+2 -2
View File
@@ -9,7 +9,7 @@
class SystemPipeline
{
public:
SystemPipeline(const EventBroker* eventBroker)
SystemPipeline(EventBroker* eventBroker)
: m_EventBroker(eventBroker)
{ }
~SystemPipeline()
@@ -51,7 +51,7 @@ public:
}
private:
const EventBroker* m_EventBroker;
EventBroker* m_EventBroker;
std::unordered_map<std::string, std::vector<System*>> m_Systems;
};
+1
View File
@@ -13,6 +13,7 @@
#include "Core/EntityXMLFile.h"
#include "Core/SystemPipeline.h"
#include "RaptorCopterSystem.h"
#include "PlayerSystem.h"
class Game
{
+34
View File
@@ -0,0 +1,34 @@
#ifndef PlayerSystem_h__
#define PlayerSystem_h__
#include <GLFW/glfw3.h>
#include <glm/common.hpp>
#include "Common.h"
#include "Core/System.h"
#include "Core/EventBroker.h"
#include "Core/EKeyDown.h"
#include "Core/EKeyUp.h"
class PlayerSystem : public System
{
public:
PlayerSystem(EventBroker* eventBroker)
: System(eventBroker, "Player")
{ }
void Initialize();
virtual void Update(World* world, ComponentWrapper& player, double dt) override;
private:
float m_Speed;
glm::vec3 m_Direction;
EventBroker* m_EventBroker;
EventRelay<PlayerSystem, Events::KeyDown> m_EKeyDown;
bool OnKeyDown(const Events::KeyDown &event);
EventRelay<PlayerSystem, Events::KeyUp> m_EKeyUp;
bool OnKeyUp(const Events::KeyUp &event);
};
#endif
+1 -1
View File
@@ -4,7 +4,7 @@
class RaptorCopterSystem : public System
{
public:
RaptorCopterSystem(const EventBroker* eventBroker)
RaptorCopterSystem(EventBroker* eventBroker)
: System(eventBroker, "RaptorCopter")
{ }
+4
View File
@@ -0,0 +1,4 @@
<c:Player>
<Speed>0</Speed>
<Velocity X="0" Y="0" Z="0"/>
</c:Player>
+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
<xs:element name="Player">
<xs:complexType>
<xs:all>
<xs:element name="Speed" type="t:double" minOccurs="0"/>
<xs:element name="Velocity" type="t:Vector" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
+10
View File
@@ -31,6 +31,16 @@
</c:Model>
</Components>
</Entity>
<Entity>
<Components>
<c:Transform>
<Position X="2.5"/>
</c:Transform>
<c:Model>
<Resource>Models/Core/UnitCube.obj</Resource>
</c:Model>
</Components>
</Entity>
<Entity>
<Components>
<c:Transform>
+2 -1
View File
@@ -44,7 +44,8 @@ Game::Game(int argc, char* argv[])
// Create system pipeline
m_SystemPipeline = new SystemPipeline(m_EventBroker);
m_SystemPipeline->AddSystem<RaptorCopterSystem>();
m_SystemPipeline->AddSystem<RaptorCopterSystem>();
m_SystemPipeline->AddSystem<PlayerSystem>();
m_LastTime = glfwGetTime();
+49
View File
@@ -0,0 +1,49 @@
#include "PlayerSystem.h"
void PlayerSystem::Initialize()
{
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &PlayerSystem::OnKeyDown);
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &PlayerSystem::OnKeyUp);
}
void PlayerSystem::Update(World * world, ComponentWrapper & player, double dt)
{
m_EventBroker->Process<PlayerSystem>();
ComponentWrapper& transform = world->GetComponent(player.EntityID, "Transform");
(glm::vec3&)player["Velocity"] = m_Speed * float(dt) * m_Direction;
(glm::vec3&)transform["Position"] += (glm::vec3)player["Velocity"];
}
bool PlayerSystem::OnKeyDown(const Events::KeyDown & event)
{
if (event.KeyCode == GLFW_KEY_P) {
m_Direction.z == -1;
}
if (event.KeyCode == GLFW_KEY_LEFT) {
m_Direction.x == -1;
}
if (event.KeyCode == GLFW_KEY_DOWN) {
m_Direction.z == 1;
}
if (event.KeyCode == GLFW_KEY_RIGHT) {
m_Direction.x == 1;
}
return true;
}
bool PlayerSystem::OnKeyUp(const Events::KeyUp & event)
{
if (event.KeyCode == GLFW_KEY_UP) {
m_Direction.z == 0;
}
if (event.KeyCode == GLFW_KEY_LEFT) {
m_Direction.x == 0;
}
if (event.KeyCode == GLFW_KEY_DOWN) {
m_Direction.z == 0;
}
if (event.KeyCode == GLFW_KEY_RIGHT) {
m_Direction.x == 0;
}
return false;
}