Files
Nuake-custom/Nuake/src/Resource/Serializable.h
Antoine Pilote 2cb0ca4f29 Particle system improvements + Emissive materials
Added option for Global particle positions
Added material property for particles
Added Emissive rendering
2023-09-23 20:31:50 -04:00

76 lines
1.5 KiB
C++

#pragma once
#include <string>
#include <json/json.hpp>
using json = nlohmann::json;
#define BEGIN_SERIALIZE() json j;
#define SERIALIZE_VAL_LBL(lbl, v) j[lbl] = v;
#define SERIALIZE_VAL(v) j[#v] = this->v;
#define SERIALIZE_VEC2(v) \
j[#v]["x"] = v.x; \
j[#v]["y"] = v.y;
#define SERIALIZE_VEC3(v) \
SERIALIZE_VEC2(v) \
j[#v]["z"] = v.z;
#define SERIALIZE_VEC4(v) \
SERIALIZE_VEC3(v) \
j[#v]["w"] = v.w;
#define DESERIALIZE_VAL(p) \
if(j.contains(#p)) \
{ \
p = j[#p]; \
}
#define DESERIALIZE_VEC4(v, p) \
p = Vector4(v["x"], v["y"], v["z"], v["w"]);
#define DESERIALIZE_VEC3(v, p) \
p = Vector3(v["x"], v["y"], v["z"]);
#define DESERIALIZE_VEC2(v, p) \
p = Vector2(v["x"], v["y"]);
#define SERIALIZE_MAT4(lbl, m) \
{ \
int i = 0; \
for (int l = 0; l < 4; l++) { \
for (int k = 0; k < 4; k++) { \
j[lbl][i] = m[l][k]; \
i++; \
} \
} \
}
#define DESERIALIZE_MAT4(lbl, m) \
{ \
int i = 0; \
for(int l = 0; l < 4; l++) { \
for(int k = 0; k < 4; k++) { \
m[l][k] = j[lbl][i];\
i++; \
} \
} \
}
#define SERIALIZE_OBJECT(v) j[#v] = v->Serialize();
#define SERIALIZE_OBJECT_REF(v) j[#v] = v.Serialize();
#define SERIALIZE_OBJECT_REF_LBL(lbl, v) j[lbl] = v.Serialize();
#define END_SERIALIZE() return j;
#define DUMP_SERIALIZE() j.dump(4);
#define BEGIN_DESERIALIZE() json j = json::parse(str);
#define DESERIALIZE_COMPONENT(c) \
if(j.contains(#c)) \
AddComponent<c>().Deserialize(j[#c]);
class ISerializable
{
public:
virtual json Serialize() = 0;
virtual bool Deserialize(const json& j) = 0;
};