Skeleton MessageRelay

This commit is contained in:
2014-04-22 19:14:09 +02:00
parent 84d6911744
commit 1e2f7fdd5c
4 changed files with 66 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
#ifndef GUI_Frame_h__
#define GUI_Frame_h__
namespace GUI
{
class Frame
{
};
}
#endif // GUI_Frame_h__
+43
View File
@@ -0,0 +1,43 @@
#ifndef MessageRelay_h__
#define MessageRelay_h__
#include <functional>
#include <unordered_map>
#include <list>
struct Message
{
protected:
Message() { }
};
class MessageRelay
{
private:
typedef std::string MessageType_t;
typedef std::function<bool(Message)> MessageCallback_t;
public:
void Subscribe(std::string messageType, MessageCallback_t callback)
{
m_Callbacks[messageType].push_back(callback);
}
void Raise(std::string messageType, Message message)
{
auto callbackIt = m_Callbacks.find(messageType);
if (callbackIt == m_Callbacks.end())
return;
for (auto &callback : callbackIt->second)
{
callback(message);
}
}
private:
std::unordered_map<MessageType_t, std::list<MessageCallback_t>> m_Callbacks;
};
#endif // MessageRelay_h__
+2
View File
@@ -139,6 +139,8 @@
<ClInclude Include="..\..\src\Entity.h" />
<ClInclude Include="..\..\src\Factory.h" />
<ClInclude Include="..\..\src\GameWorld.h" />
<ClInclude Include="..\..\src\GUI\Frame.h" />
<ClInclude Include="..\..\src\MessageRelay.h" />
<ClInclude Include="..\..\src\Model.h" />
<ClInclude Include="..\..\src\OBJ.h" />
<ClInclude Include="..\..\src\PrecompiledHeader.h" />
@@ -112,6 +112,9 @@
<Filter Include="Particle System\Systems">
<UniqueIdentifier>{9f45f029-46c8-4c0d-b44c-dc9bffd3c6a6}</UniqueIdentifier>
</Filter>
<Filter Include="GUI">
<UniqueIdentifier>{6e633434-4aed-453d-b2f9-8c51ca7f78db}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\World.h" />
@@ -214,6 +217,10 @@
</ClInclude>
<ClInclude Include="..\..\src\Components\Box.h" />
<ClInclude Include="..\..\src\Components\Sphere.h" />
<ClInclude Include="..\..\src\GUI\Frame.h">
<Filter>GUI</Filter>
</ClInclude>
<ClInclude Include="..\..\src\MessageRelay.h" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\Shaders\AABB.frag.glsl">