#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, ...); };