Refactored System constructor to take a struct instead of a bunch of parameters to reduce future pain and to be able to extend it with IsClient and IsServer flags.

This commit is contained in:
2016-02-08 13:32:00 +01:00
parent 3a2b124cae
commit 2b4e00e4b0
37 changed files with 109 additions and 132 deletions
@@ -9,8 +9,8 @@
class CollidableOctreeSystem : public ImpureSystem, public PureSystem
{
public:
CollidableOctreeSystem(World* world, EventBroker* eventBroker, Octree<EntityAABB>* octree, const std::string& componentType)
: System(world, eventBroker)
CollidableOctreeSystem(SystemParams params, Octree<EntityAABB>* octree, const std::string& componentType)
: System(params)
, PureSystem(componentType)
, m_Octree(octree)
{ }
+2 -2
View File
@@ -13,8 +13,8 @@
class CollisionSystem : public PureSystem
{
public:
CollisionSystem(World* world, EventBroker* eventBroker, Octree<EntityAABB>* octree)
: System(world, eventBroker)
CollisionSystem(SystemParams params, Octree<EntityAABB>* octree)
: System(params)
, PureSystem("Collidable")
, m_Octree(octree)
{ }
+2 -2
View File
@@ -15,8 +15,8 @@ class AABB;
class TriggerSystem : public PureSystem
{
public:
TriggerSystem(World* world, EventBroker* eventBroker, Octree<EntityAABB>* octree)
: System(world, eventBroker)
TriggerSystem(SystemParams params, Octree<EntityAABB>* octree)
: System(params)
, PureSystem("Trigger")
, m_Octree(octree)
{
+22 -4
View File
@@ -6,20 +6,38 @@
#include "EntityWrapper.h"
#include "ComponentWrapper.h"
struct SystemParams
{
SystemParams(::World* World, ::EventBroker* EventBroker, bool IsClient, bool IsServer)
: World(World)
, EventBroker(EventBroker)
, IsClient(IsClient)
, IsServer(IsServer)
{ }
::World* World;
::EventBroker* EventBroker;
bool IsClient = false;
bool IsServer = false;
};
class System
{
friend class SystemPipeline;
protected:
System(World* world, EventBroker) { }
System(World* world, EventBroker* eventBroker)
: m_World(world)
, m_EventBroker(eventBroker)
System(SystemParams params)
: m_World(params.World)
, m_EventBroker(params.EventBroker)
, IsClient(params.IsClient)
, IsServer(params.IsServer)
{ }
virtual ~System() = default;
World* m_World;
EventBroker* m_EventBroker;
bool IsClient = false;
bool IsServer = false;
};
class PureSystem : public virtual System
+6 -2
View File
@@ -10,9 +10,11 @@
class SystemPipeline
{
public:
SystemPipeline(World* world, EventBroker* eventBroker)
SystemPipeline(World* world, EventBroker* eventBroker, bool isClient, bool isServer)
: m_World(world)
, m_EventBroker(eventBroker)
, m_IsClient(isClient)
, m_IsServer(isServer)
{
EVENT_SUBSCRIBE_MEMBER(m_EPause, &SystemPipeline::OnPause);
EVENT_SUBSCRIBE_MEMBER(m_EResume, &SystemPipeline::OnResume);
@@ -35,7 +37,7 @@ public:
m_OrderedSystemGroups.resize(updateOrderLevel + 1);
}
UnorderedSystems& group = m_OrderedSystemGroups[updateOrderLevel];
System* system = new T(m_World, m_EventBroker, args...);
System* system = new T(SystemParams(m_World, m_EventBroker, m_IsClient, m_IsServer), args...);
group.Systems[typeid(T).name()] = system;
PureSystem* pureSystem = dynamic_cast<PureSystem*>(system);
@@ -88,6 +90,8 @@ public:
private:
World* m_World;
EventBroker* m_EventBroker;
bool m_IsClient = false;
bool m_IsServer = false;
bool m_Paused = false;
struct UnorderedSystems
+1 -1
View File
@@ -8,7 +8,7 @@
class UniformScaleSystem : public PureSystem
{
public:
UniformScaleSystem(World* world, EventBroker* eventBroker);
UniformScaleSystem(SystemParams params);
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) override;
+1 -1
View File
@@ -10,7 +10,7 @@
class EditorRenderSystem : public ImpureSystem
{
public:
EditorRenderSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
EditorRenderSystem(SystemParams params, IRenderer* renderer, RenderFrame* renderFrame);
virtual void Update(double dt) override;
+1 -1
View File
@@ -17,7 +17,7 @@
class EditorSystem : public ImpureSystem
{
public:
EditorSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
EditorSystem(SystemParams params, IRenderer* renderer, RenderFrame* renderFrame);
~EditorSystem();
void Update(double dt);
+1 -1
View File
@@ -25,7 +25,7 @@ struct WidgetDelta : Event
class EditorWidgetSystem : public ImpureSystem, PureSystem
{
public:
EditorWidgetSystem(World* world, EventBroker* eventBroker, IRenderer* renderer);
EditorWidgetSystem(SystemParams params, IRenderer* renderer);
virtual void Update(double dt) override;
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cEditorWidget, double dt) override;
+2 -2
View File
@@ -13,8 +13,8 @@
class AnimationSystem : public PureSystem
{
public:
AnimationSystem(World* world, EventBroker* eventBroker)
: System(world, eventBroker)
AnimationSystem(SystemParams params)
: System(params)
, PureSystem("Animation")
{
+1 -2
View File
@@ -20,7 +20,7 @@
class RenderSystem : public ImpureSystem
{
public:
RenderSystem(World* world, EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame);
RenderSystem(SystemParams params, const IRenderer* renderer, RenderFrame* renderFrame);
~RenderSystem();
virtual void Update(double dt) override;
@@ -29,7 +29,6 @@ private:
const IRenderer* m_Renderer;
RenderFrame* m_RenderFrame;
Camera* m_Camera;
World* m_World;
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;