Merge remote-tracking branch 'origin/master' into RendererDecoupling
# Conflicts: # src/Game/Game.cpp
This commit is contained in:
@@ -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
|
||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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");
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ Fullscreen=false
|
|||||||
VSYNC=false
|
VSYNC=false
|
||||||
Width=1280
|
Width=1280
|
||||||
Height=720
|
Height=720
|
||||||
|
FOV=45
|
||||||
@@ -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>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<c:Player>
|
||||||
|
<Velocity X="0" Y="0" Z="0"/>
|
||||||
|
</c:Player>
|
||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
@@ -48,7 +61,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0"/>
|
<Position X="0" Y="0"/>
|
||||||
<Orientation X="0.0" Y="0" Z="0.0"/>
|
<Orientation X="0.0" Y="0" Z="1.0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitRaptor.obj</Resource>
|
<Resource>Models/Core/UnitRaptor.obj</Resource>
|
||||||
@@ -59,8 +72,8 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0"/>
|
<Position X="-0.01" Y="0.55"/>
|
||||||
<Orientation X="0" Y="0" Z="0"/>
|
<Orientation X="0" Y="0" Z="-1"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:RaptorCopter>
|
<c:RaptorCopter>
|
||||||
<Speed>20</Speed>
|
<Speed>20</Speed>
|
||||||
@@ -71,19 +84,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0.4"/>
|
<Position X="0" Y="0"/>
|
||||||
<Scale X="0.1" Y="0.4" Z="0.1"/>
|
|
||||||
</c:Transform>
|
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Core/UnitCylinder.obj</Resource>
|
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
|
||||||
</c:Model>
|
|
||||||
</Components>
|
|
||||||
</Entity>
|
|
||||||
<Entity>
|
|
||||||
<Components>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="0" Y="0.6"/>
|
|
||||||
<Scale X="1.7" Y="0.03" Z="0.1"/>
|
<Scale X="1.7" Y="0.03" Z="0.1"/>
|
||||||
<Orientation X="0" Y="0" Z="0"/>
|
<Orientation X="0" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
@@ -96,7 +97,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0.6"/>
|
<Position X="0" Y="0"/>
|
||||||
<Scale X="1.7" Y="0.03" Z="0.1"/>
|
<Scale X="1.7" Y="0.03" Z="0.1"/>
|
||||||
<Orientation X="0" Y="1.57" Z="0"/>
|
<Orientation X="0" Y="1.57" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ glm::vec3 RenderQueueFactory::AbsolutePosition(World* world, EntityID entity)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
ComponentWrapper transform = world->GetComponent(entity, "Transform");
|
ComponentWrapper transform = world->GetComponent(entity, "Transform");
|
||||||
position += AbsoluteOrientation(world, entity) * (glm::vec3)transform["Position"];
|
position += (glm::vec3)transform["Position"];
|
||||||
entity = world->GetParent(entity);
|
entity = world->GetParent(entity);
|
||||||
} while (entity != 0);
|
} while (entity != 0);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ Game::Game(int argc, char* argv[])
|
|||||||
m_Config->Get<int>("Video.Height", 720)
|
m_Config->Get<int>("Video.Height", 720)
|
||||||
));
|
));
|
||||||
m_Renderer->Initialize();
|
m_Renderer->Initialize();
|
||||||
|
m_Renderer->Camera()->SetFOV(glm::radians(m_Config->Get<float>("Video.FOV", 90.f)));
|
||||||
|
|
||||||
// Create input manager
|
// Create input manager
|
||||||
m_InputManager = new InputManager(m_Renderer->Window(), m_EventBroker);
|
m_InputManager = new InputManager(m_Renderer->Window(), m_EventBroker);
|
||||||
@@ -46,6 +47,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>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_LastTime = glfwGetTime();
|
m_LastTime = glfwGetTime();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user