11#include " Serialization.hpp"
2+ #include " Serialization.hpp"
3+ #include " Serialization.hpp"
24#include " ../Content/AssetID.hpp"
35#include " ../Objects/Impl/Objects.hpp"
46#include " ../Objects/ObjectList.hpp"
@@ -10,6 +12,7 @@ using namespace Engine3DRadSpace::Graphics;
1012using namespace Engine3DRadSpace ::Internal;
1113using namespace Engine3DRadSpace ::Math;
1214using namespace Engine3DRadSpace ::Objects;
15+ using namespace Engine3DRadSpace ::Projects;
1316using namespace Engine3DRadSpace ::Reflection;
1417
1518static void deserializeObjectHierarchy (ObjectList* lst, IObject* obj, const json& j)
@@ -255,6 +258,14 @@ json Engine3DRadSpace::Projects::Serializer::SerializeObject(IObject* obj)
255258 offset += sizeof (Color);
256259 break ;
257260 }
261+ case FieldRepresentationType::Event:
262+ {
263+ Projects::EventRepresentation e;
264+ jsonField[subFieldName][str_i] = e;
265+
266+ offset += sizeof (Event);
267+ break ;
268+ }
258269 case FieldRepresentationType::ObjectID:
259270 {
260271 size_t id = field->GetAtOffset <size_t >(objPtr, offset);
@@ -474,6 +485,13 @@ json Engine3DRadSpace::Projects::Serializer::SerializeObject(IObject* obj)
474485 }
475486 case FieldRepresentationType::Event:
476487 {
488+ EventRepresentation eventData = jsonField.get <EventRepresentation>();
489+ Event event = eventData.Reconstruct (uuid).value ();
490+
491+ void * dest = newStruct.get () + offset;
492+ new (dest) Event ();
493+ offset += sizeof (Event);
494+
477495 break ;
478496 }
479497 case FieldRepresentationType::ObjectID:
@@ -583,4 +601,49 @@ bool Engine3DRadSpace::Projects::Serializer::SaveProject(ObjectList* lst, Conten
583601
584602 file << std::setw (4 ) << j;
585603 return true ;
586- }
604+ }
605+
606+ void Engine3DRadSpace::Projects::to_json (json& j, const EventRepresentation& event)
607+ {
608+ auto size = event.BoundFunctions .size ();
609+ j[" numFn" ] = size;
610+
611+ for (auto i = 0 ; i < size; i++)
612+ {
613+ auto & fn = event.BoundFunctions [i];
614+ json jFn;
615+
616+ jFn[" OwnerObject" ] = fn.OwnerObject ;
617+ jFn[" FunctionID" ] = fn.FunctionID ;
618+
619+ json jArgs = json::array ();
620+ for (auto & arg : fn.Args )
621+ {
622+ jArgs.push_back (arg.type ().name ());
623+ }
624+
625+ jFn[" Args" ] = jArgs;
626+ j[" BoundFunctions" ].push_back (jFn);
627+ }
628+ }
629+
630+ void Engine3DRadSpace::Projects::from_json (const json& j, EventRepresentation& event)
631+ {
632+ auto size = j[" numFn" ].get <size_t >();
633+
634+ for (auto i = 0 ; i < size; i++)
635+ {
636+ auto & jFn = j[" BoundFunctions" ][i];
637+ EventInvocationRepresentation fn;
638+
639+ fn.OwnerObject = jFn[" OwnerObject" ].get <size_t >();
640+ fn.FunctionID = jFn[" FunctionID" ].get <size_t >();
641+ for (auto & jArg : jFn[" Args" ])
642+ {
643+ std::string typeName = jArg.get <std::string>();
644+ fn.Args .push_back (std::any (typeName));
645+ }
646+
647+ event.BoundFunctions .push_back (fn);
648+ }
649+ }
0 commit comments