Merge branch 'PlayerSystem' into Networking

# Conflicts:
#	src/Game/Game.cpp
This commit is contained in:
stiffly
2015-12-11 15:45:27 +01:00
14 changed files with 250 additions and 110 deletions
+2 -2
View File
@@ -17,7 +17,7 @@ class EventBroker;
class BaseEventRelay class BaseEventRelay
{ {
friend class EventBroker; friend class EventBroker;
protected: protected:
BaseEventRelay(std::string contextTypeName, std::string eventTypeName) BaseEventRelay(std::string contextTypeName, std::string eventTypeName)
@@ -70,7 +70,7 @@ bool EventRelay<ContextType, EventType>::Receive(const std::shared_ptr<Event> ev
class EventBroker class EventBroker
{ {
template <typename ContextType, typename EventType> friend class EventRelay; template <typename ContextType, typename EventType> friend class EventRelay;
public: public:
EventBroker() EventBroker()
+3 -3
View File
@@ -10,16 +10,16 @@ class System
friend class SystemPipeline; friend class SystemPipeline;
public: public:
System(const EventBroker* eventBroker, std::string componentType) System(EventBroker* eventBroker, std::string componentType)
: m_EventBroker(eventBroker) : m_EventBroker(eventBroker)
, m_ComponentType(componentType) , m_ComponentType(componentType)
{ } { }
virtual void Update(World* world, ComponentWrapper& component, double dt) = 0; virtual void Update(World* world, ComponentWrapper& component, double dt) = 0;
private: protected:
const EventBroker* m_EventBroker;
std::string m_ComponentType; std::string m_ComponentType;
EventBroker* m_EventBroker;
}; };
#endif #endif
+2 -2
View File
@@ -9,7 +9,7 @@
class SystemPipeline class SystemPipeline
{ {
public: public:
SystemPipeline(const EventBroker* eventBroker) SystemPipeline(EventBroker* eventBroker)
: m_EventBroker(eventBroker) : m_EventBroker(eventBroker)
{ } { }
~SystemPipeline() ~SystemPipeline()
@@ -51,7 +51,7 @@ public:
} }
private: private:
const EventBroker* m_EventBroker; EventBroker* m_EventBroker;
std::unordered_map<std::string, std::vector<System*>> m_Systems; std::unordered_map<std::string, std::vector<System*>> m_Systems;
}; };
+1
View File
@@ -13,6 +13,7 @@
#include "Core/EntityXMLFile.h" #include "Core/EntityXMLFile.h"
#include "Core/SystemPipeline.h" #include "Core/SystemPipeline.h"
#include "RaptorCopterSystem.h" #include "RaptorCopterSystem.h"
#include "PlayerSystem.h"
// Network // Network
#include <boost/thread.hpp> #include <boost/thread.hpp>
+44
View File
@@ -0,0 +1,44 @@
#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"
struct KeyInput
{
bool Forward = false;
bool Left = false;
bool Back = false;
bool Right = false;
};
class PlayerSystem : public System
{
public:
PlayerSystem(EventBroker* eventBroker)
: System(eventBroker, "Player")
{
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &PlayerSystem::OnKeyDown);
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &PlayerSystem::OnKeyUp);
}
virtual void Update(World* world, ComponentWrapper& player, double dt) override;
private:
float m_Speed = 5;
glm::vec3 m_Direction;
KeyInput input;
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
+3 -1
View File
@@ -4,10 +4,12 @@
class RaptorCopterSystem : public System class RaptorCopterSystem : public System
{ {
public: public:
RaptorCopterSystem(const EventBroker* eventBroker) RaptorCopterSystem(EventBroker* eventBroker)
: System(eventBroker, "RaptorCopter") : System(eventBroker, "RaptorCopter")
{ } { }
virtual void Initialize() { }
virtual void Update(World* world, ComponentWrapper& raptorCopter, double dt) override virtual void Update(World* world, ComponentWrapper& raptorCopter, double dt) override
{ {
ComponentWrapper& transform = world->GetComponent(raptorCopter.EntityID, "Transform"); ComponentWrapper& transform = world->GetComponent(raptorCopter.EntityID, "Transform");
+1
View File
@@ -5,4 +5,5 @@
<xs:include schemaLocation="Components/Model.xsd"/> <xs:include schemaLocation="Components/Model.xsd"/>
<xs:include schemaLocation="Components/Test.xsd"/> <xs:include schemaLocation="Components/Test.xsd"/>
<xs:include schemaLocation="Components/RaptorCopter.xsd"/> <xs:include schemaLocation="Components/RaptorCopter.xsd"/>
<xs:include schemaLocation="Components/Player.xsd"/>
</xs:schema> </xs:schema>
+3
View File
@@ -0,0 +1,3 @@
<c:Player>
<Velocity X="0" Y="0" Z="0"/>
</c:Player>
+13
View File
@@ -0,0 +1,13 @@
<?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="Velocity" type="t:Vector" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
+13
View File
@@ -31,6 +31,19 @@
</c:Model> </c:Model>
</Components> </Components>
</Entity> </Entity>
<Entity>
<Components>
<c:Player>
<Velocity X="0" Y="0" Z="0"/>
</c:Player>
<c:Transform>
<Position X="2.5"/>
</c:Transform>
<c:Model>
<Resource>Models/Core/UnitCube.obj</Resource>
</c:Model>
</Components>
</Entity>
<Entity> <Entity>
<Components> <Components>
<c:Transform> <c:Transform>
+1
View File
@@ -14,6 +14,7 @@
<xs:element ref="c:Model" minOccurs="0"/> <xs:element ref="c:Model" minOccurs="0"/>
<xs:element ref="c:Test" minOccurs="0"/> <xs:element ref="c:Test" minOccurs="0"/>
<xs:element ref="c:RaptorCopter" minOccurs="0"/> <xs:element ref="c:RaptorCopter" minOccurs="0"/>
<xs:element ref="c:Player" minOccurs="0"/>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
+1
View File
@@ -19,6 +19,7 @@ file(GLOB SOURCE_FILES
set(SOURCE_FILES set(SOURCE_FILES
${SOURCE_FILES} ${SOURCE_FILES}
"Game.cpp" "Game.cpp"
"PlayerSystem.cpp"
) )
set(LIBRARIES set(LIBRARIES
+3
View File
@@ -45,6 +45,9 @@ Game::Game(int argc, char* argv[])
// Create system pipeline // Create system pipeline
m_SystemPipeline = new SystemPipeline(m_EventBroker); m_SystemPipeline = new SystemPipeline(m_EventBroker);
m_SystemPipeline->AddSystem<RaptorCopterSystem>(); m_SystemPipeline->AddSystem<RaptorCopterSystem>();
m_SystemPipeline->AddSystem<PlayerSystem>();
// Invoke network // Invoke network
+58
View File
@@ -0,0 +1,58 @@
#include "PlayerSystem.h"
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>();
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_W) {
input.Forward = true;
}
if (event.KeyCode == GLFW_KEY_A) {
input.Left = true;
}
if (event.KeyCode == GLFW_KEY_S) {
input.Back = true;
}
if (event.KeyCode == GLFW_KEY_D) {
input.Right = true;
}
return true;
}
bool PlayerSystem::OnKeyUp(const Events::KeyUp & event)
{
if (event.KeyCode == GLFW_KEY_W) {
input.Forward = false;
}
if (event.KeyCode == GLFW_KEY_A) {
input.Left = false;
}
if (event.KeyCode == GLFW_KEY_S) {
input.Back = false;
}
if (event.KeyCode == GLFW_KEY_D) {
input.Right = false;
}
return false;
}