Changed System to take World through constructor and store it instead, cause it makes more sense.
This commit is contained in:
@@ -8,14 +8,14 @@
|
||||
class CollidableOctreeSystem : public ImpureSystem, public PureSystem
|
||||
{
|
||||
public:
|
||||
CollidableOctreeSystem(EventBroker* eventBroker, Octree* octree)
|
||||
: System(eventBroker)
|
||||
CollidableOctreeSystem(World* world, EventBroker* eventBroker, Octree* octree)
|
||||
: System(world, eventBroker)
|
||||
, PureSystem("Collidable")
|
||||
, m_Octree(octree)
|
||||
{ }
|
||||
|
||||
virtual void Update(World* world, double dt) override;
|
||||
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||
virtual void Update(double dt) override;
|
||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||
|
||||
private:
|
||||
Octree* m_Octree;
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
class CollisionSystem : public PureSystem
|
||||
{
|
||||
public:
|
||||
CollisionSystem(EventBroker* eventBroker, Octree* octree)
|
||||
: System(eventBroker)
|
||||
CollisionSystem(World* world, EventBroker* eventBroker, Octree* octree)
|
||||
: System(world, eventBroker)
|
||||
, PureSystem("AABB")
|
||||
, m_Octree(octree)
|
||||
, zPress(false)
|
||||
@@ -23,7 +23,7 @@ public:
|
||||
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:
|
||||
Octree* m_Octree;
|
||||
|
||||
@@ -14,13 +14,13 @@ class AABB;
|
||||
class TriggerSystem : public PureSystem
|
||||
{
|
||||
public:
|
||||
TriggerSystem(EventBroker* eventBroker, Octree* octree)
|
||||
: System(eventBroker)
|
||||
TriggerSystem(World* world, EventBroker* eventBroker, Octree* octree)
|
||||
: System(world, eventBroker)
|
||||
, PureSystem("Trigger")
|
||||
, 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:
|
||||
Octree* m_Octree;
|
||||
|
||||
@@ -11,14 +11,14 @@ class System
|
||||
friend class SystemPipeline;
|
||||
|
||||
protected:
|
||||
System()
|
||||
: m_EventBroker(nullptr)
|
||||
{ }
|
||||
System(EventBroker* eventBroker)
|
||||
: m_EventBroker(eventBroker)
|
||||
System(World* world, EventBroker) { }
|
||||
System(World* world, EventBroker* eventBroker)
|
||||
: m_World(world)
|
||||
, m_EventBroker(eventBroker)
|
||||
{ }
|
||||
virtual ~System() = default;
|
||||
|
||||
World* m_World;
|
||||
EventBroker* m_EventBroker;
|
||||
};
|
||||
|
||||
@@ -34,7 +34,7 @@ protected:
|
||||
|
||||
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
|
||||
@@ -45,7 +45,7 @@ protected:
|
||||
ImpureSystem() = default;
|
||||
virtual ~ImpureSystem() = default;
|
||||
|
||||
virtual void Update(World* world, double dt) = 0;
|
||||
virtual void Update(double dt) = 0;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -9,9 +9,11 @@
|
||||
class SystemPipeline
|
||||
{
|
||||
public:
|
||||
SystemPipeline(EventBroker* eventBroker)
|
||||
: m_EventBroker(eventBroker)
|
||||
SystemPipeline(World* world, EventBroker* eventBroker)
|
||||
: m_World(world)
|
||||
, m_EventBroker(eventBroker)
|
||||
{ }
|
||||
|
||||
~SystemPipeline()
|
||||
{
|
||||
for (UnorderedSystems& group : m_OrderedSystemGroups) {
|
||||
@@ -29,7 +31,7 @@ public:
|
||||
m_OrderedSystemGroups.resize(updateOrderLevel + 1);
|
||||
}
|
||||
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;
|
||||
|
||||
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) {
|
||||
// Process events
|
||||
@@ -57,18 +59,18 @@ public:
|
||||
|
||||
// Update
|
||||
for (auto& system : group.ImpureSystems) {
|
||||
system->Update(world, dt);
|
||||
system->Update(dt);
|
||||
}
|
||||
for (auto& pair : group.PureSystems) {
|
||||
const std::string& componentName = pair.first;
|
||||
auto& systems = pair.second;
|
||||
const ComponentPool* pool = world->GetComponents(componentName);
|
||||
const ComponentPool* pool = m_World->GetComponents(componentName);
|
||||
if (pool == nullptr) {
|
||||
continue;
|
||||
}
|
||||
for (auto& component : *pool) {
|
||||
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:
|
||||
World* m_World;
|
||||
EventBroker* m_EventBroker;
|
||||
|
||||
struct UnorderedSystems
|
||||
{
|
||||
std::map<std::string, System*> Systems;
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
class UniformScaleSystem : public PureSystem
|
||||
{
|
||||
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:
|
||||
EntityWrapper m_Camera = EntityWrapper::Invalid;
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
class EditorRenderSystem : public ImpureSystem
|
||||
{
|
||||
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:
|
||||
IRenderer* m_Renderer;
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
class EditorSystem : public ImpureSystem
|
||||
{
|
||||
public:
|
||||
EditorSystem(EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
|
||||
EditorSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
|
||||
~EditorSystem();
|
||||
|
||||
void Update(World* world, double dt);
|
||||
void Update(double dt);
|
||||
|
||||
private:
|
||||
IRenderer* m_Renderer;
|
||||
|
||||
@@ -18,13 +18,12 @@
|
||||
class EditorSystemOld : public ImpureSystem
|
||||
{
|
||||
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:
|
||||
IRenderer* m_Renderer;
|
||||
World* m_World = nullptr;
|
||||
Camera* m_Camera = nullptr;
|
||||
|
||||
bool m_Enabled;
|
||||
|
||||
@@ -20,13 +20,12 @@
|
||||
class RenderSystem : public ImpureSystem
|
||||
{
|
||||
public:
|
||||
RenderSystem(EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame);
|
||||
RenderSystem(World* world, EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame);
|
||||
~RenderSystem();
|
||||
|
||||
virtual void Update(World* world, double dt) override;
|
||||
virtual void Update(double dt) override;
|
||||
|
||||
private:
|
||||
World* m_World = nullptr;
|
||||
const IRenderer* m_Renderer;
|
||||
RenderFrame* m_RenderFrame;
|
||||
Camera* m_Camera;
|
||||
@@ -37,8 +36,8 @@ private:
|
||||
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
|
||||
bool OnInputCommand(const Events::InputCommand& e);
|
||||
|
||||
void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
|
||||
void fillLight(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);
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user