CSC3224_Computer_Games_Development / GameEngine / Engine_Messaging_System / MessageSystemEvent.h
MessageSystemEvent.h
Raw
#pragma once
#include "../Engine_Json_System/json-forwards.h"
#include <string>
// System Messages 
enum class MessageSystemEventType
{
	SPRITE_RECTANGLE_TYPE,
//	SPRITE_CIRCLE_TYPE,
	TEXT_TYPE,
	RIGID_BODY_PHYSICS_TYPE,
	AUDIO_TYPE,
	END_TYPE
};

class MessageSystemEvent
{
public:
	virtual ~MessageSystemEvent() = default;
	virtual MessageSystemEventType getType() = 0;
	virtual int getTypeValue() = 0;
	virtual Json::Value convertToJson() = 0;
};

template <typename T>
class MessageFromJsonSystemEvent : public MessageSystemEvent
{
public:
	MessageFromJsonSystemEvent()
	{// Curiously recurring template pattern - static polymorphism
		messagesFromJson = &T::messageBuildFromJson;
	}
	virtual ~MessageFromJsonSystemEvent()
	{
	}
protected:
	T* (*messagesFromJson)(Json::Value Engine_PhysicsystemSource, ...);
};