Created "EntitySystem" class as means to group a World with a SystemPipeline

This commit is contained in:
2016-02-24 15:27:41 +01:00
parent 4aaba03852
commit 7cd4dac909
19 changed files with 370 additions and 135 deletions
+19
View File
@@ -0,0 +1,19 @@
#ifndef EntitySystem_h__
#define EntitySystem_h__
#include "World.h"
#include "SystemPipeline.h"
// An "EntitySystem" is defined as the combination of a World with a SystemPipeline
template <typename WorldType>
class EntitySystem : public WorldType, public SystemPipeline
{
static_assert(std::is_base_of<World, WorldType>::value, "WorldType must inherit from World");
public:
EntitySystem(EventBroker* eventBroker, bool isClient, bool isServer)
: WorldType(eventBroker)
, SystemPipeline(this, eventBroker, isClient, isServer)
{ }
};
#endif
+18
View File
@@ -0,0 +1,18 @@
#include "Core/EntitySystem.h"
#include "Rendering/IRenderer.h"
#include "Core/Octree.h"
#include "Collision/EntityAABB.h"
class CapturePointsEntitySystem : public EntitySystem<World>
{
public:
CapturePointsEntitySystem(EventBroker* eventBroker, bool isClient, bool isServer, IRenderer* renderer, RenderFrame* renderFrame);
~CapturePointsEntitySystem();
private:
IRenderer* m_Renderer;
RenderFrame* m_RenderFrame;
Octree<EntityAABB>* m_OctreeCollision = nullptr;
Octree<EntityAABB>* m_OctreeTrigger = nullptr;
Octree<EntityAABB>* m_OctreeFrustrumCulling = nullptr;
};
+16
View File
@@ -0,0 +1,16 @@
#ifndef EGameEnd_h__
#define EGameEnd_h__
#include "Core/Event.h"
namespace Events
{
struct GameEnd : Event
{
};
}
#endif
+16
View File
@@ -0,0 +1,16 @@
#ifndef EGameStart_h__
#define EGameStart_h__
#include "Core/Event.h"
namespace Events
{
struct GameStart : Event
{
};
}
#endif
+2 -2
View File
@@ -10,8 +10,8 @@ namespace Events
//triggers when a team has captured all capturePoints
struct Win : Event
{
//can be 0 = none, 1,2
int TeamThatWon;
// The winning team corresponding to TeamEnum
ComponentInfo::EnumType Team;
};
}
+3 -9
View File
@@ -12,18 +12,16 @@
#include "Input/InputProxy.h"
#include "Input/KeyboardInputHandler.h"
#include "Input/MouseInputHandler.h"
#include "Core/EKeyDown.h"
#include "Core/EntityFilePreprocessor.h"
#include "Core/SystemPipeline.h"
#include "Core/EntitySystem.h"
#include "Systems/ExplosionEffectSystem.h"
#include "Editor/EditorSystem.h"
#include "Core/EntityFile.h"
#include "Rendering/RenderSystem.h"
#include "Core/EntityFileParser.h"
#include "Core/Octree.h"
#include "Rendering/Font.h"
#include "Systems/InterpolationSystem.h"
#include "Collision/EntityAABB.h"
// Network
#include <boost/thread.hpp>
#include "Network/Network.h"
@@ -55,11 +53,7 @@ private:
IRenderer* m_Renderer;
InputManager* m_InputManager;
InputProxy* m_InputProxy;
World* m_World;
Octree<EntityAABB>* m_OctreeCollision;
Octree<EntityAABB>* m_OctreeTrigger;
Octree<EntityAABB>* m_OctreeFrustrumCulling;
SystemPipeline* m_SystemPipeline;
EntitySystem<World>* m_EntitySystem;
RenderFrame* m_RenderFrame;
Client* m_NetworkClient = nullptr;
Server* m_NetworkServer = nullptr;
View File
@@ -8,7 +8,6 @@
#include "Core/System.h"
#include "Engine/Collision/ETrigger.h"
#include "Events/ECaptured.h"
#include "Events/EWin.h"
#include <tuple>
#include <vector>
@@ -0,0 +1,27 @@
#include "Core/System.h"
#include "Events/EGameStart.h"
#include "Events/EGameEnd.h"
#include "Events/ECaptured.h"
#include "Events/EWin.h"
class CapturePointsGamemode : public ImpureSystem
{
public:
CapturePointsGamemode(SystemParams params);
virtual void Update(double dt) override;
private:
bool m_GameRuning = false;
double m_GameTime = 0.0;
EventRelay<CapturePointsGamemode, Events::GameStart> m_EGameStart;
bool OnGameStart(const Events::GameStart& e);
EventRelay<CapturePointsGamemode, Events::Captured> m_ECaptured;
bool OnCaptured(const Events::Captured& e);
boost::optional<ComponentWrapper> currentGamemode();
bool isCurrentGamemode();
boost::optional<ComponentInfo::EnumType> winCondition();
void setRunning(bool running);
};