WIP world pausing

This commit is contained in:
2016-01-19 00:52:17 +01:00
parent 79eaa7364c
commit 9e3dfff7b6
6 changed files with 72 additions and 13 deletions
+22
View File
@@ -0,0 +1,22 @@
#ifndef EPause_h__
#define EPause_h__
#include "EventBroker.h"
#include "World.h"
namespace Events
{
struct Pause : Event
{
::World* World;
};
struct Resume : Event
{
::World* World;
};
}
#endif
+25 -1
View File
@@ -5,6 +5,7 @@
#include "EventBroker.h"
#include "System.h"
#include "World.h"
#include "EPause.h"
class SystemPipeline
{
@@ -12,7 +13,10 @@ public:
SystemPipeline(World* world, EventBroker* eventBroker)
: m_World(world)
, m_EventBroker(eventBroker)
{ }
{
EVENT_SUBSCRIBE_MEMBER(m_EPause, &SystemPipeline::OnPause);
EVENT_SUBSCRIBE_MEMBER(m_EResume, &SystemPipeline::OnResume);
}
~SystemPipeline()
{
@@ -51,6 +55,10 @@ public:
void Update(double dt)
{
if (m_Paused) {
dt = 0.0;
}
for (UnorderedSystems& group : m_OrderedSystemGroups) {
// Process events
for (auto& pair : group.Systems) {
@@ -80,6 +88,7 @@ public:
private:
World* m_World;
EventBroker* m_EventBroker;
bool m_Paused = false;
struct UnorderedSystems
{
@@ -88,6 +97,21 @@ private:
std::vector<ImpureSystem*> ImpureSystems;
};
std::vector<UnorderedSystems> m_OrderedSystemGroups;
EventRelay<SystemPipeline, Events::Pause> m_EPause;
bool OnPause(const Events::Pause& e) {
if (e.World == m_World) {
m_Paused = true;
}
return true;
}
EventRelay<SystemPipeline, Events::Resume> m_EResume;
bool OnResume(const Events::Resume& e) {
if (e.World == m_World) {
m_Paused = false;
}
return true;
}
};
#endif
+4 -2
View File
@@ -14,14 +14,15 @@
#include "../Core/World.h"
#include "../Core/EntityWrapper.h"
#include "../Core/ResourceManager.h"
#include "../Core/EPause.h"
#include "../Rendering/Texture.h"
class EditorGUI
{
public:
EditorGUI(EventBroker* eventBroker);
EditorGUI(World* world, EventBroker* eventBroker);
void Draw(World* world);
void Draw();
void SelectEntity(EntityWrapper entity);
@@ -57,6 +58,7 @@ public:
void SetComponentDeleteCallback(OnComponentDelete_t f) { m_OnComponentDelete = f; }
private:
World* m_World;
EventBroker* m_EventBroker;
// Config variables