Changed System to take World through constructor and store it instead, cause it makes more sense.

This commit is contained in:
2016-01-18 23:59:33 +01:00
parent 3fc44e944c
commit 51979d7f0c
32 changed files with 111 additions and 111 deletions
@@ -8,14 +8,14 @@
class CollidableOctreeSystem : public ImpureSystem, public PureSystem class CollidableOctreeSystem : public ImpureSystem, public PureSystem
{ {
public: public:
CollidableOctreeSystem(EventBroker* eventBroker, Octree* octree) CollidableOctreeSystem(World* world, EventBroker* eventBroker, Octree* octree)
: System(eventBroker) : System(world, eventBroker)
, PureSystem("Collidable") , PureSystem("Collidable")
, m_Octree(octree) , m_Octree(octree)
{ } { }
virtual void Update(World* world, double dt) override; virtual void Update(double dt) override;
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
private: private:
Octree* m_Octree; Octree* m_Octree;
+3 -3
View File
@@ -13,8 +13,8 @@
class CollisionSystem : public PureSystem class CollisionSystem : public PureSystem
{ {
public: public:
CollisionSystem(EventBroker* eventBroker, Octree* octree) CollisionSystem(World* world, EventBroker* eventBroker, Octree* octree)
: System(eventBroker) : System(world, eventBroker)
, PureSystem("AABB") , PureSystem("AABB")
, m_Octree(octree) , m_Octree(octree)
, zPress(false) , zPress(false)
@@ -23,7 +23,7 @@ public:
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &CollisionSystem::OnKeyUp); EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &CollisionSystem::OnKeyUp);
} }
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
private: private:
Octree* m_Octree; Octree* m_Octree;
+3 -3
View File
@@ -14,13 +14,13 @@ class AABB;
class TriggerSystem : public PureSystem class TriggerSystem : public PureSystem
{ {
public: public:
TriggerSystem(EventBroker* eventBroker, Octree* octree) TriggerSystem(World* world, EventBroker* eventBroker, Octree* octree)
: System(eventBroker) : System(world, eventBroker)
, PureSystem("Trigger") , PureSystem("Trigger")
, m_Octree(octree) , m_Octree(octree)
{ } { }
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
private: private:
Octree* m_Octree; Octree* m_Octree;
+7 -7
View File
@@ -11,14 +11,14 @@ class System
friend class SystemPipeline; friend class SystemPipeline;
protected: protected:
System() System(World* world, EventBroker) { }
: m_EventBroker(nullptr) System(World* world, EventBroker* eventBroker)
{ } : m_World(world)
System(EventBroker* eventBroker) , m_EventBroker(eventBroker)
: m_EventBroker(eventBroker)
{ } { }
virtual ~System() = default; virtual ~System() = default;
World* m_World;
EventBroker* m_EventBroker; EventBroker* m_EventBroker;
}; };
@@ -34,7 +34,7 @@ protected:
const std::string m_ComponentType; const std::string m_ComponentType;
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) = 0; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) = 0;
}; };
class ImpureSystem : public virtual System class ImpureSystem : public virtual System
@@ -45,7 +45,7 @@ protected:
ImpureSystem() = default; ImpureSystem() = default;
virtual ~ImpureSystem() = default; virtual ~ImpureSystem() = default;
virtual void Update(World* world, double dt) = 0; virtual void Update(double dt) = 0;
}; };
#endif #endif
+11 -7
View File
@@ -9,9 +9,11 @@
class SystemPipeline class SystemPipeline
{ {
public: public:
SystemPipeline(EventBroker* eventBroker) SystemPipeline(World* world, EventBroker* eventBroker)
: m_EventBroker(eventBroker) : m_World(world)
, m_EventBroker(eventBroker)
{ } { }
~SystemPipeline() ~SystemPipeline()
{ {
for (UnorderedSystems& group : m_OrderedSystemGroups) { for (UnorderedSystems& group : m_OrderedSystemGroups) {
@@ -29,7 +31,7 @@ public:
m_OrderedSystemGroups.resize(updateOrderLevel + 1); m_OrderedSystemGroups.resize(updateOrderLevel + 1);
} }
UnorderedSystems& group = m_OrderedSystemGroups[updateOrderLevel]; UnorderedSystems& group = m_OrderedSystemGroups[updateOrderLevel];
System* system = new T(m_EventBroker, args...); System* system = new T(m_World, m_EventBroker, args...);
group.Systems[typeid(T).name()] = system; group.Systems[typeid(T).name()] = system;
PureSystem* pureSystem = dynamic_cast<PureSystem*>(system); PureSystem* pureSystem = dynamic_cast<PureSystem*>(system);
@@ -47,7 +49,7 @@ public:
} }
} }
void Update(World* world, double dt) void Update(double dt)
{ {
for (UnorderedSystems& group : m_OrderedSystemGroups) { for (UnorderedSystems& group : m_OrderedSystemGroups) {
// Process events // Process events
@@ -57,18 +59,18 @@ public:
// Update // Update
for (auto& system : group.ImpureSystems) { for (auto& system : group.ImpureSystems) {
system->Update(world, dt); system->Update(dt);
} }
for (auto& pair : group.PureSystems) { for (auto& pair : group.PureSystems) {
const std::string& componentName = pair.first; const std::string& componentName = pair.first;
auto& systems = pair.second; auto& systems = pair.second;
const ComponentPool* pool = world->GetComponents(componentName); const ComponentPool* pool = m_World->GetComponents(componentName);
if (pool == nullptr) { if (pool == nullptr) {
continue; continue;
} }
for (auto& component : *pool) { for (auto& component : *pool) {
for (auto& system : systems) { for (auto& system : systems) {
system->UpdateComponent(world, EntityWrapper(world, component.EntityID), component, dt); system->UpdateComponent(EntityWrapper(m_World, component.EntityID), component, dt);
} }
} }
} }
@@ -76,7 +78,9 @@ public:
} }
private: private:
World* m_World;
EventBroker* m_EventBroker; EventBroker* m_EventBroker;
struct UnorderedSystems struct UnorderedSystems
{ {
std::map<std::string, System*> Systems; std::map<std::string, System*> Systems;
+2 -2
View File
@@ -8,9 +8,9 @@
class UniformScaleSystem : public PureSystem class UniformScaleSystem : public PureSystem
{ {
public: public:
UniformScaleSystem(EventBroker* eventBroker); UniformScaleSystem(World* world, EventBroker* eventBroker);
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) override;
private: private:
EntityWrapper m_Camera = EntityWrapper::Invalid; EntityWrapper m_Camera = EntityWrapper::Invalid;
+2 -2
View File
@@ -10,9 +10,9 @@
class EditorRenderSystem : public ImpureSystem class EditorRenderSystem : public ImpureSystem
{ {
public: public:
EditorRenderSystem(EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame); EditorRenderSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
virtual void Update(World* world, double dt) override; virtual void Update(double dt) override;
private: private:
IRenderer* m_Renderer; IRenderer* m_Renderer;
+2 -2
View File
@@ -15,10 +15,10 @@
class EditorSystem : public ImpureSystem class EditorSystem : public ImpureSystem
{ {
public: public:
EditorSystem(EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame); EditorSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
~EditorSystem(); ~EditorSystem();
void Update(World* world, double dt); void Update(double dt);
private: private:
IRenderer* m_Renderer; IRenderer* m_Renderer;
+2 -3
View File
@@ -18,13 +18,12 @@
class EditorSystemOld : public ImpureSystem class EditorSystemOld : public ImpureSystem
{ {
public: public:
EditorSystemOld(EventBroker* eventBroker, IRenderer* renderer); EditorSystemOld(World* world, EventBroker* eventBroker, IRenderer* renderer);
virtual void Update(World* world, double dt) override; virtual void Update(double dt) override;
private: private:
IRenderer* m_Renderer; IRenderer* m_Renderer;
World* m_World = nullptr;
Camera* m_Camera = nullptr; Camera* m_Camera = nullptr;
bool m_Enabled; bool m_Enabled;
+4 -5
View File
@@ -20,13 +20,12 @@
class RenderSystem : public ImpureSystem class RenderSystem : public ImpureSystem
{ {
public: public:
RenderSystem(EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame); RenderSystem(World* world, EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame);
~RenderSystem(); ~RenderSystem();
virtual void Update(World* world, double dt) override; virtual void Update(double dt) override;
private: private:
World* m_World = nullptr;
const IRenderer* m_Renderer; const IRenderer* m_Renderer;
RenderFrame* m_RenderFrame; RenderFrame* m_RenderFrame;
Camera* m_Camera; Camera* m_Camera;
@@ -37,8 +36,8 @@ private:
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand; EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e); bool OnInputCommand(const Events::InputCommand& e);
void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs, World* world); void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs);
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs, World* world); void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs);
}; };
#endif #endif
+2 -2
View File
@@ -16,10 +16,10 @@
class HealthSystem : public PureSystem class HealthSystem : public PureSystem
{ {
public: public:
HealthSystem(EventBroker* eventBroker); HealthSystem(World* world, EventBroker* eventBroker);
//updatecomponent //updatecomponent
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
private: private:
//methods which will take care of specific events //methods which will take care of specific events
+3 -3
View File
@@ -5,10 +5,10 @@
class PlayerMovementSystem : public PureSystem class PlayerMovementSystem : public PureSystem
{ {
public: public:
PlayerMovementSystem(EventBroker* eventBroker) PlayerMovementSystem(World* world, EventBroker* eventBroker)
: System(eventBroker) : System(world, eventBroker)
, PureSystem("Player") , PureSystem("Player")
{ } { }
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt); virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt);
}; };
+2 -2
View File
@@ -6,9 +6,9 @@
class PlayerSpawnSystem : public ImpureSystem class PlayerSpawnSystem : public ImpureSystem
{ {
public: public:
PlayerSpawnSystem(EventBroker* eventBroker); PlayerSpawnSystem(World* world, EventBroker* eventBroker);
virtual void Update(World* world, double dt) override; virtual void Update(double dt) override;
private: private:
EventRelay<PlayerSpawnSystem, Events::InputCommand> m_OnInputCommand; EventRelay<PlayerSpawnSystem, Events::InputCommand> m_OnInputCommand;
+3 -3
View File
@@ -11,8 +11,8 @@
class PlayerSystem : public PureSystem class PlayerSystem : public PureSystem
{ {
public: public:
PlayerSystem(EventBroker* eventBroker) PlayerSystem(World* world, EventBroker* eventBroker)
: System(eventBroker) : System(world, eventBroker)
, PureSystem("Player") , PureSystem("Player")
{ {
EVENT_SUBSCRIBE_MEMBER(m_ETouch, &PlayerSystem::OnTouch); EVENT_SUBSCRIBE_MEMBER(m_ETouch, &PlayerSystem::OnTouch);
@@ -20,7 +20,7 @@ public:
EVENT_SUBSCRIBE_MEMBER(m_ELeave, &PlayerSystem::OnLeave); EVENT_SUBSCRIBE_MEMBER(m_ELeave, &PlayerSystem::OnLeave);
} }
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
private: private:
float m_Speed = 5; float m_Speed = 5;
EventRelay<PlayerSystem, Events::TriggerEnter> m_EEnter; EventRelay<PlayerSystem, Events::TriggerEnter> m_EEnter;
+4 -4
View File
@@ -4,14 +4,14 @@
class RaptorCopterSystem : public PureSystem class RaptorCopterSystem : public PureSystem
{ {
public: public:
RaptorCopterSystem(EventBroker* eventBroker) RaptorCopterSystem(World* world, EventBroker* eventBroker)
: System(eventBroker) : System(world, eventBroker)
, PureSystem("RaptorCopter") , PureSystem("RaptorCopter")
{ } { }
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
{ {
ComponentWrapper& transform = world->GetComponent(component.EntityID, "Transform"); ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
(glm::vec3&)transform["Orientation"] += (float)(double)component["Speed"] * (float)dt * (glm::vec3)component["Axis"]; (glm::vec3&)transform["Orientation"] += (float)(double)component["Speed"] * (float)dt * (glm::vec3)component["Axis"];
} }
}; };
+1 -1
View File
@@ -13,7 +13,7 @@
class SpawnerSystem : public System class SpawnerSystem : public System
{ {
public: public:
SpawnerSystem(EventBroker* eventBroker); SpawnerSystem(World* world, EventBroker* eventBroker);
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid); static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid);
@@ -1,11 +1,11 @@
#include "Collision/CollidableOctreeSystem.h" #include "Collision/CollidableOctreeSystem.h"
void CollidableOctreeSystem::Update(World* world, double dt) void CollidableOctreeSystem::Update(double dt)
{ {
m_Octree->ClearDynamicObjects(); m_Octree->ClearDynamicObjects();
} }
void CollidableOctreeSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) void CollidableOctreeSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt)
{ {
if (entity.HasComponent("AABB")) { if (entity.HasComponent("AABB")) {
boost::optional<AABB> absoluteAABB = Collision::EntityAbsoluteAABB(entity); boost::optional<AABB> absoluteAABB = Collision::EntityAbsoluteAABB(entity);
+1 -1
View File
@@ -2,7 +2,7 @@
#include "Collision/CollisionSystem.h" #include "Collision/CollisionSystem.h"
#include "Core/AABB.h" #include "Core/AABB.h"
void CollisionSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt)
{ {
if (!entity.HasComponent("Physics")) { if (!entity.HasComponent("Physics")) {
return; return;
+3 -3
View File
@@ -3,10 +3,10 @@
#include "Core/AABB.h" #include "Core/AABB.h"
#include "Rendering/Model.h" #include "Rendering/Model.h"
void TriggerSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) void TriggerSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt)
{ {
//Currently only players can trigger things. //Currently only players can trigger things.
auto players = world->GetComponents("Player"); auto players = m_World->GetComponents("Player");
if (players == nullptr) { if (players == nullptr) {
return; return;
} }
@@ -18,7 +18,7 @@ void TriggerSystem::UpdateComponent(World* world, EntityWrapper& entity, Compone
} }
for (auto& pc : *players) { for (auto& pc : *players) {
EntityID pId = pc.EntityID; EntityID pId = pc.EntityID;
boost::optional<AABB> playerBox = Collision::EntityAbsoluteAABB(EntityWrapper(world, pId)); boost::optional<AABB> playerBox = Collision::EntityAbsoluteAABB(EntityWrapper(m_World, pId));
//The player can't trigger anything without an AABB. //The player can't trigger anything without an AABB.
if (!playerBox) { if (!playerBox) {
continue; continue;
+3 -3
View File
@@ -1,13 +1,13 @@
#include "Core/UniformScaleSystem.h" #include "Core/UniformScaleSystem.h"
UniformScaleSystem::UniformScaleSystem(EventBroker* eventBroker) UniformScaleSystem::UniformScaleSystem(World* world, EventBroker* eventBroker)
: System(eventBroker) : System(world, eventBroker)
, PureSystem("UniformScale") , PureSystem("UniformScale")
{ {
EVENT_SUBSCRIBE_MEMBER(m_ESetCamera, &UniformScaleSystem::OnSetCamera); EVENT_SUBSCRIBE_MEMBER(m_ESetCamera, &UniformScaleSystem::OnSetCamera);
} }
void UniformScaleSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) void UniformScaleSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt)
{ {
if (!m_Camera.Valid()) { if (!m_Camera.Valid()) {
return; return;
+7 -7
View File
@@ -1,7 +1,7 @@
#include "Editor/EditorRenderSystem.h" #include "Editor/EditorRenderSystem.h"
EditorRenderSystem::EditorRenderSystem(EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame) EditorRenderSystem::EditorRenderSystem(World* m_World, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame)
: System(eventBroker) : System(m_World, eventBroker)
, m_Renderer(renderer) , m_Renderer(renderer)
, m_RenderFrame(renderFrame) , m_RenderFrame(renderFrame)
{ {
@@ -10,7 +10,7 @@ EditorRenderSystem::EditorRenderSystem(EventBroker* eventBroker, IRenderer* rend
m_EditorCamera = new Camera((float)resolution.Width / resolution.Height, glm::radians(45.f), 0.01f, 5000.f); m_EditorCamera = new Camera((float)resolution.Width / resolution.Height, glm::radians(45.f), 0.01f, 5000.f);
} }
void EditorRenderSystem::Update(World* world, double dt) void EditorRenderSystem::Update(double dt)
{ {
if (m_CurrentCamera) { if (m_CurrentCamera) {
ComponentWrapper cameraTransform = m_CurrentCamera["Transform"]; ComponentWrapper cameraTransform = m_CurrentCamera["Transform"];
@@ -23,7 +23,7 @@ void EditorRenderSystem::Update(World* world, double dt)
scene.Camera = m_EditorCamera; scene.Camera = m_EditorCamera;
scene.Viewport = Rectangle(1920, 1080); scene.Viewport = Rectangle(1920, 1080);
auto models = world->GetComponents("Model"); auto models = m_World->GetComponents("Model");
if (models != nullptr) { if (models != nullptr) {
for (auto& cModel : *models) { for (auto& cModel : *models) {
if (!(bool)cModel["Visible"]) { if (!(bool)cModel["Visible"]) {
@@ -45,7 +45,7 @@ void EditorRenderSystem::Update(World* world, double dt)
} }
} }
EntityWrapper entity(world, cModel.EntityID); EntityWrapper entity(m_World, cModel.EntityID);
glm::mat4 modelMatrix = Transform::ModelMatrix(entity.ID, entity.World); glm::mat4 modelMatrix = Transform::ModelMatrix(entity.ID, entity.World);
for (auto matGroup : model->MaterialGroups()) { for (auto matGroup : model->MaterialGroups()) {
std::shared_ptr<ModelJob> modelJob = std::make_shared<ModelJob>(model, nullptr, modelMatrix, matGroup, cModel, entity.World); std::shared_ptr<ModelJob> modelJob = std::make_shared<ModelJob>(model, nullptr, modelMatrix, matGroup, cModel, entity.World);
@@ -54,7 +54,7 @@ void EditorRenderSystem::Update(World* world, double dt)
} }
} }
auto pointLights = world->GetComponents("PointLight"); auto pointLights = m_World->GetComponents("PointLight");
if (pointLights != nullptr) { if (pointLights != nullptr) {
for (auto& cPointLight : *pointLights) { for (auto& cPointLight : *pointLights) {
bool visible = cPointLight["Visible"]; bool visible = cPointLight["Visible"];
@@ -62,7 +62,7 @@ void EditorRenderSystem::Update(World* world, double dt)
continue; continue;
} }
EntityWrapper entity(world, cPointLight.EntityID); EntityWrapper entity(m_World, cPointLight.EntityID);
ComponentWrapper& cTransform = entity["Transform"]; ComponentWrapper& cTransform = entity["Transform"];
std::shared_ptr<PointLightJob> pointLightJob = std::make_shared<PointLightJob>(cTransform, cPointLight, entity.World); std::shared_ptr<PointLightJob> pointLightJob = std::make_shared<PointLightJob>(cTransform, cPointLight, entity.World);
scene.PointLightJobs.push_back(pointLightJob); scene.PointLightJobs.push_back(pointLightJob);
+6 -6
View File
@@ -2,13 +2,13 @@
#include "Core/UniformScaleSystem.h" #include "Core/UniformScaleSystem.h"
#include "Editor/EditorRenderSystem.h" #include "Editor/EditorRenderSystem.h"
EditorSystem::EditorSystem(EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame) EditorSystem::EditorSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame)
: System(eventBroker) : System(world, eventBroker)
, m_Renderer(renderer) , m_Renderer(renderer)
, m_RenderFrame(renderFrame) , m_RenderFrame(renderFrame)
{ {
m_EditorWorld = new World(); m_EditorWorld = new World();
m_EditorWorldSystemPipeline = new SystemPipeline(eventBroker); m_EditorWorldSystemPipeline = new SystemPipeline(m_EditorWorld, eventBroker);
m_EditorWorldSystemPipeline->AddSystem<UniformScaleSystem>(0); m_EditorWorldSystemPipeline->AddSystem<UniformScaleSystem>(0);
m_EditorWorldSystemPipeline->AddSystem<EditorRenderSystem>(1, m_Renderer, m_RenderFrame); m_EditorWorldSystemPipeline->AddSystem<EditorRenderSystem>(1, m_Renderer, m_RenderFrame);
@@ -45,11 +45,11 @@ EditorSystem::~EditorSystem()
delete m_EditorWorld; delete m_EditorWorld;
} }
void EditorSystem::Update(World* world, double dt) void EditorSystem::Update(double dt)
{ {
m_EditorWorldSystemPipeline->Update(m_EditorWorld, dt); m_EditorWorldSystemPipeline->Update(dt);
m_EditorGUI->Draw(world); m_EditorGUI->Draw(m_World);
m_EditorStats->Draw(dt); m_EditorStats->Draw(dt);
m_DebugCameraInputController->Update(dt); m_DebugCameraInputController->Update(dt);
+4 -6
View File
@@ -2,8 +2,8 @@
#define IMGUI_DEFINE_MATH_OPERATORS #define IMGUI_DEFINE_MATH_OPERATORS
#include <imgui/imgui_internal.h> #include <imgui/imgui_internal.h>
EditorSystemOld::EditorSystemOld(EventBroker* eventBroker, IRenderer* renderer) EditorSystemOld::EditorSystemOld(World* world, EventBroker* eventBroker, IRenderer* renderer)
: System(eventBroker) : System(world, eventBroker)
, ImpureSystem() , ImpureSystem()
, m_Renderer(renderer) , m_Renderer(renderer)
{ {
@@ -23,10 +23,8 @@ EditorSystemOld::EditorSystemOld(EventBroker* eventBroker, IRenderer* renderer)
EVENT_SUBSCRIBE_MEMBER(m_EFileDropped, &EditorSystemOld::OnFileDropped); EVENT_SUBSCRIBE_MEMBER(m_EFileDropped, &EditorSystemOld::OnFileDropped);
} }
void EditorSystemOld::Update(World* world, double dt) void EditorSystemOld::Update(double dt)
{ {
m_World = world;
if (!m_Enabled) { if (!m_Enabled) {
return; return;
} }
@@ -37,7 +35,7 @@ void EditorSystemOld::Update(World* world, double dt)
Picking(); Picking();
updateWidget(); updateWidget();
drawUI(world, dt); drawUI(m_World, dt);
// Clear drop queue if it wasn't handled by any UI element // Clear drop queue if it wasn't handled by any UI element
if (!m_LastDroppedFile.empty()) { if (!m_LastDroppedFile.empty()) {
+12 -13
View File
@@ -1,7 +1,7 @@
#include "Rendering/RenderSystem.h" #include "Rendering/RenderSystem.h"
RenderSystem::RenderSystem(EventBroker* eventBroker, const IRenderer* renderer, RenderFrame* renderFrame) RenderSystem::RenderSystem(World* world, EventBroker* eventBroker, const IRenderer* renderer, RenderFrame* renderFrame)
: System(eventBroker) : System(world, eventBroker)
, m_Renderer(renderer) , m_Renderer(renderer)
, m_RenderFrame(renderFrame) , m_RenderFrame(renderFrame)
{ {
@@ -29,9 +29,9 @@ bool RenderSystem::OnSetCamera(Events::SetCamera& e)
return true; return true;
} }
void RenderSystem::fillModels(std::list<std::shared_ptr<RenderJob>>& jobs, World* world) void RenderSystem::fillModels(std::list<std::shared_ptr<RenderJob>>& jobs)
{ {
auto models = world->GetComponents("Model"); auto models = m_World->GetComponents("Model");
if (models == nullptr) { if (models == nullptr) {
return; return;
} }
@@ -60,17 +60,17 @@ void RenderSystem::fillModels(std::list<std::shared_ptr<RenderJob>>& jobs, World
} }
} }
glm::mat4 modelMatrix = Transform::ModelMatrix(modelComponent.EntityID, world); glm::mat4 modelMatrix = Transform::ModelMatrix(modelComponent.EntityID, m_World);
for (auto matGroup : model->MaterialGroups()) { for (auto matGroup : model->MaterialGroups()) {
std::shared_ptr<ModelJob> modelJob = std::shared_ptr<ModelJob>(new ModelJob(model, m_Camera, modelMatrix, matGroup, modelComponent, world)); std::shared_ptr<ModelJob> modelJob = std::shared_ptr<ModelJob>(new ModelJob(model, m_Camera, modelMatrix, matGroup, modelComponent, m_World));
jobs.push_back(modelJob); jobs.push_back(modelJob);
} }
} }
} }
void RenderSystem::fillLight(std::list<std::shared_ptr<RenderJob>>& jobs, World* world) void RenderSystem::fillLight(std::list<std::shared_ptr<RenderJob>>& jobs)
{ {
auto pointLights = world->GetComponents("PointLight"); auto pointLights = m_World->GetComponents("PointLight");
if (pointLights == nullptr) { if (pointLights == nullptr) {
return; return;
} }
@@ -80,7 +80,7 @@ void RenderSystem::fillLight(std::list<std::shared_ptr<RenderJob>>& jobs, World*
if (!visible) { if (!visible) {
continue; continue;
} }
auto transformC = world->GetComponent(pointlightC.EntityID, "Transform"); auto transformC = m_World->GetComponent(pointlightC.EntityID, "Transform");
if (&transformC == nullptr) { if (&transformC == nullptr) {
return; return;
} }
@@ -95,9 +95,8 @@ bool RenderSystem::OnInputCommand(const Events::InputCommand& e)
return false; return false;
} }
void RenderSystem::Update(World* world, double dt) void RenderSystem::Update(double dt)
{ {
m_World = world;
m_EventBroker->Process<RenderSystem>(); m_EventBroker->Process<RenderSystem>();
if (m_CurrentCamera) { if (m_CurrentCamera) {
@@ -110,8 +109,8 @@ void RenderSystem::Update(World* world, double dt)
RenderScene scene; RenderScene scene;
scene.Camera = m_Camera; scene.Camera = m_Camera;
scene.Viewport = Rectangle(1280, 720); scene.Viewport = Rectangle(1280, 720);
fillModels(scene.ForwardJobs, world); fillModels(scene.ForwardJobs);
fillLight(scene.PointLightJobs, world); fillLight(scene.PointLightJobs);
m_RenderFrame->Add(scene); m_RenderFrame->Add(scene);
} }
+2 -2
View File
@@ -71,7 +71,7 @@ Game::Game(int argc, char* argv[])
m_OctreeCollision = new Octree(AABB(glm::vec3(-100), glm::vec3(100)), 4); m_OctreeCollision = new Octree(AABB(glm::vec3(-100), glm::vec3(100)), 4);
m_OctreeFrustrumCulling = new Octree(AABB(glm::vec3(-100), glm::vec3(100)), 4); m_OctreeFrustrumCulling = new Octree(AABB(glm::vec3(-100), glm::vec3(100)), 4);
// Create system pipeline // Create system pipeline
m_SystemPipeline = new SystemPipeline(m_EventBroker); m_SystemPipeline = new SystemPipeline(m_World, m_EventBroker);
// All systems with orderlevel 0 will be updated first. // All systems with orderlevel 0 will be updated first.
unsigned int updateOrderLevel = 0; unsigned int updateOrderLevel = 0;
@@ -143,7 +143,7 @@ void Game::Tick()
m_ClientOrServer->Update(); m_ClientOrServer->Update();
} }
// Iterate through systems and update world! // Iterate through systems and update world!
m_SystemPipeline->Update(m_World, dt); m_SystemPipeline->Update(dt);
debugTick(dt); debugTick(dt);
m_Renderer->Update(dt); m_Renderer->Update(dt);
m_EventBroker->Process<Client>(); m_EventBroker->Process<Client>();
+4 -4
View File
@@ -1,7 +1,7 @@
#include "Systems/HealthSystem.h" #include "Systems/HealthSystem.h"
HealthSystem::HealthSystem(EventBroker* eventBroker) HealthSystem::HealthSystem(World* m_World, EventBroker* eventBroker)
: System(eventBroker) : System(m_World, eventBroker)
, PureSystem("Health") , PureSystem("Health")
{ {
//subscribe/listenTo playerdamage,healthpickup events (using the eventBroker) //subscribe/listenTo playerdamage,healthpickup events (using the eventBroker)
@@ -9,10 +9,10 @@ HealthSystem::HealthSystem(EventBroker* eventBroker)
EVENT_SUBSCRIBE_MEMBER(m_EPlayerHealthPickup, &HealthSystem::OnPlayerHealthPickup); EVENT_SUBSCRIBE_MEMBER(m_EPlayerHealthPickup, &HealthSystem::OnPlayerHealthPickup);
} }
void HealthSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) void HealthSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt)
{ {
//if entityID of health is 9 then the players ID is also 9 (player,health are connected to the same entity) //if entityID of health is 9 then the players ID is also 9 (player,health are connected to the same entity)
ComponentWrapper player = world->GetComponent(component.EntityID, "Player"); ComponentWrapper player = m_World->GetComponent(component.EntityID, "Player");
double maxHealth = (double)component["MaxHealth"]; double maxHealth = (double)component["MaxHealth"];
//process the DeltaHealthVector and change the entitys health accordingly //process the DeltaHealthVector and change the entitys health accordingly
+1 -1
View File
@@ -1,6 +1,6 @@
#include "Systems/PlayerMovementSystem.h" #include "Systems/PlayerMovementSystem.h"
void PlayerMovementSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) void PlayerMovementSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt)
{ {
ComponentWrapper& cTransform = entity["Transform"]; ComponentWrapper& cTransform = entity["Transform"];
if (!entity.HasComponent("Physics")) { if (!entity.HasComponent("Physics")) {
+5 -5
View File
@@ -1,21 +1,21 @@
#include "Systems/PlayerSpawnSystem.h" #include "Systems/PlayerSpawnSystem.h"
PlayerSpawnSystem::PlayerSpawnSystem(EventBroker* eventBroker) PlayerSpawnSystem::PlayerSpawnSystem(World* m_World, EventBroker* eventBroker)
: System(eventBroker) : System(m_World, eventBroker)
{ {
EVENT_SUBSCRIBE_MEMBER(m_OnInputCommand, &PlayerSpawnSystem::OnInputCommand); EVENT_SUBSCRIBE_MEMBER(m_OnInputCommand, &PlayerSpawnSystem::OnInputCommand);
} }
void PlayerSpawnSystem::Update(World* world, double dt) void PlayerSpawnSystem::Update(double dt)
{ {
auto playerSpawns = world->GetComponents("PlayerSpawn"); auto playerSpawns = m_World->GetComponents("PlayerSpawn");
if (playerSpawns == nullptr) { if (playerSpawns == nullptr) {
return; return;
} }
for (auto& team : m_SpawnRequests) { for (auto& team : m_SpawnRequests) {
for (auto& cPlayerSpawn : *playerSpawns) { for (auto& cPlayerSpawn : *playerSpawns) {
EntityWrapper spawner(world, cPlayerSpawn.EntityID); EntityWrapper spawner(m_World, cPlayerSpawn.EntityID);
if (!spawner.HasComponent("Spawner")) { if (!spawner.HasComponent("Spawner")) {
continue; continue;
} }
+2 -2
View File
@@ -1,6 +1,6 @@
#include "Systems/PlayerSystem.h" #include "Systems/PlayerSystem.h"
void PlayerSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) void PlayerSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt)
{ {
component["Velocity"] = glm::vec3(0.f, 0.f, 0.f); component["Velocity"] = glm::vec3(0.f, 0.f, 0.f);
if ((bool&)component["Forward"] == true) { if ((bool&)component["Forward"] == true) {
@@ -18,7 +18,7 @@ void PlayerSystem::UpdateComponent(World* world, EntityWrapper& entity, Componen
} }
if ((glm::vec3)component["Velocity"] != glm::vec3(0.f)) { if ((glm::vec3)component["Velocity"] != glm::vec3(0.f)) {
ComponentWrapper& transform = world->GetComponent(component.EntityID, "Transform"); ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
(glm::vec3&)transform["Position"] += (glm::vec3)component["Velocity"]; (glm::vec3&)transform["Position"] += (glm::vec3)component["Velocity"];
} }
} }
+2 -1
View File
@@ -1,6 +1,7 @@
#include "Systems/SpawnerSystem.h" #include "Systems/SpawnerSystem.h"
SpawnerSystem::SpawnerSystem(EventBroker* eventBroker) : System(eventBroker) SpawnerSystem::SpawnerSystem(World* world, EventBroker* eventBroker)
: System(world, eventBroker)
{ {
EVENT_SUBSCRIBE_MEMBER(m_OnSpawnerSpawn, &SpawnerSystem::OnSpawnerSpawn); EVENT_SUBSCRIBE_MEMBER(m_OnSpawnerSpawn, &SpawnerSystem::OnSpawnerSpawn);
} }
+1 -1
View File
@@ -102,7 +102,7 @@ void GameHealthSystemTest::Tick()
m_LastTime = currentTime; m_LastTime = currentTime;
// Iterate through systems and update world! // Iterate through systems and update world!
m_SystemPipeline->Update(m_World, dt); m_SystemPipeline->Update(dt);
m_EventBroker->Swap(); m_EventBroker->Swap();
m_EventBroker->Clear(); m_EventBroker->Clear();
+1 -1
View File
@@ -179,7 +179,7 @@ void Game::Tick()
#endif #endif
// Iterate through systems and update world! // Iterate through systems and update world!
m_SystemPipeline->Update(m_World, dt); m_SystemPipeline->Update(dt);
m_Renderer->Update(dt); m_Renderer->Update(dt);
m_RenderQueueFactory->Update(m_World); m_RenderQueueFactory->Update(m_World);