Component: Put JSON serialization functions in a separate file
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "inferno/asset/texture.h"
|
||||
#include "inferno/component/cubemap-component.h"
|
||||
#include "inferno/component/spritecomponent.h" // TODO: Move glm::x toJson/fromJson to separate file
|
||||
#include "inferno/component/serialize.h" // not detected as used by clang-tidy
|
||||
|
||||
namespace Inferno {
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include "inferno/asset/asset-manager.h"
|
||||
#include "inferno/asset/model.h"
|
||||
#include "inferno/asset/texture.h"
|
||||
#include "inferno/component/spritecomponent.h" // TODO: Move glm::x toJson/fromJson to separate file
|
||||
#include "inferno/component/serialize.h" // not detected as used by clang-tidy
|
||||
|
||||
namespace Inferno {
|
||||
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Riyyi
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "glm/ext/matrix_float2x2.hpp"
|
||||
#include "glm/ext/matrix_float3x3.hpp"
|
||||
#include "glm/ext/matrix_float4x4.hpp"
|
||||
#include "glm/ext/vector_float2.hpp"
|
||||
#include "glm/ext/vector_float3.hpp"
|
||||
#include "glm/ext/vector_float4.hpp"
|
||||
#include "ruc/json/json.h"
|
||||
|
||||
#include "inferno/component/serialize.h"
|
||||
|
||||
namespace glm {
|
||||
|
||||
void toJson(ruc::Json& json, const vec2& value)
|
||||
{
|
||||
json = ruc::Json {
|
||||
{ value.x, value.y },
|
||||
};
|
||||
}
|
||||
|
||||
void fromJson(const ruc::Json& json, vec2& value)
|
||||
{
|
||||
VERIFY(json.type() == ruc::Json::Type::Array);
|
||||
|
||||
auto& values = json.asArray();
|
||||
VERIFY(values.size() == 2, "glm::vec2 expected 2 values, got: {}", values.size());
|
||||
|
||||
value.x = values.at(0).get<float>();
|
||||
value.y = values.at(1).get<float>();
|
||||
}
|
||||
|
||||
// -----------------------------------------
|
||||
|
||||
void toJson(ruc::Json& json, const vec3& value)
|
||||
{
|
||||
json = ruc::Json {
|
||||
{ value.x, value.y, value.z },
|
||||
};
|
||||
}
|
||||
|
||||
void fromJson(const ruc::Json& json, vec3& value)
|
||||
{
|
||||
VERIFY(json.type() == ruc::Json::Type::Array);
|
||||
|
||||
auto& values = json.asArray();
|
||||
VERIFY(values.size() == 3, "glm::vec3 expected 3 values, got: {}", values.size());
|
||||
|
||||
value.x = values.at(0).get<float>();
|
||||
value.y = values.at(1).get<float>();
|
||||
value.z = values.at(2).get<float>();
|
||||
}
|
||||
|
||||
// -----------------------------------------
|
||||
|
||||
void toJson(ruc::Json& json, const vec4& value)
|
||||
{
|
||||
json = ruc::Json {
|
||||
{ value.r, value.g, value.b, value.a },
|
||||
};
|
||||
}
|
||||
|
||||
void fromJson(const ruc::Json& json, vec4& value)
|
||||
{
|
||||
VERIFY(json.type() == ruc::Json::Type::Array);
|
||||
|
||||
auto& values = json.asArray();
|
||||
VERIFY(values.size() == 4, "glm::vec4 expected 4 values, got: {}", values.size());
|
||||
|
||||
value.r = values.at(0).get<float>();
|
||||
value.g = values.at(1).get<float>();
|
||||
value.b = values.at(2).get<float>();
|
||||
value.a = values.at(3).get<float>();
|
||||
}
|
||||
|
||||
} // namespace glm
|
||||
|
||||
// -----------------------------------------
|
||||
|
||||
void ruc::format::Formatter<glm::vec2>::format(Builder& builder, glm::vec2 value) const
|
||||
{
|
||||
return Formatter<std::vector<float>>::format(builder, { value.x, value.y });
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::vec3>::format(Builder& builder, glm::vec3 value) const
|
||||
{
|
||||
return Formatter<std::vector<float>>::format(builder, { value.x, value.y, value.z });
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::vec4>::format(Builder& builder, glm::vec4 value) const
|
||||
{
|
||||
return Formatter<std::vector<float>>::format(builder, { value.x, value.y, value.z, value.w });
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::mat2>::format(Builder& builder, glm::mat2 value) const
|
||||
{
|
||||
builder.putString("mat2 ");
|
||||
Formatter<glm::vec2>::format(builder, value[0]);
|
||||
builder.putString("\n ");
|
||||
return Formatter<glm::vec2>::format(builder, value[1]);
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::mat3>::format(Builder& builder, glm::mat3 value) const
|
||||
{
|
||||
builder.putString("mat3 ");
|
||||
Formatter<glm::vec3>::format(builder, value[0]);
|
||||
builder.putString("\n ");
|
||||
Formatter<glm::vec3>::format(builder, value[1]);
|
||||
builder.putString("\n ");
|
||||
return Formatter<glm::vec3>::format(builder, value[2]);
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::mat4>::format(Builder& builder, glm::mat4 value) const
|
||||
{
|
||||
builder.putString("mat4 ");
|
||||
Formatter<glm::vec4>::format(builder, value[0]);
|
||||
builder.putString("\n ");
|
||||
Formatter<glm::vec4>::format(builder, value[1]);
|
||||
builder.putString("\n ");
|
||||
Formatter<glm::vec4>::format(builder, value[2]);
|
||||
builder.putString("\n ");
|
||||
return Formatter<glm::vec4>::format(builder, value[3]);
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Riyyi
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "glm/ext/matrix_float2x2.hpp"
|
||||
#include "glm/ext/matrix_float3x3.hpp"
|
||||
#include "glm/ext/matrix_float4x4.hpp"
|
||||
#include "glm/ext/vector_float2.hpp"
|
||||
#include "glm/ext/vector_float3.hpp"
|
||||
#include "glm/ext/vector_float4.hpp"
|
||||
#include "ruc/json/json.h"
|
||||
|
||||
namespace glm {
|
||||
|
||||
void toJson(ruc::Json& json, const vec2& value);
|
||||
void fromJson(const ruc::Json& json, vec2& value);
|
||||
|
||||
void toJson(ruc::Json& json, const vec3& value);
|
||||
void fromJson(const ruc::Json& json, vec3& value);
|
||||
|
||||
void toJson(ruc::Json& json, const vec4& value);
|
||||
void fromJson(const ruc::Json& json, vec4& value);
|
||||
|
||||
} // namespace glm
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::vec2> : Formatter<std::vector<float>> {
|
||||
void format(Builder& builder, glm::vec2 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::vec3> : Formatter<std::vector<float>> {
|
||||
void format(Builder& builder, glm::vec3 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::vec4> : Formatter<std::vector<float>> {
|
||||
void format(Builder& builder, glm::vec4 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::mat2> : Formatter<glm::vec2> {
|
||||
void format(Builder& builder, glm::mat2 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::mat3> : Formatter<glm::vec3> {
|
||||
void format(Builder& builder, glm::mat3 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::mat4> : Formatter<glm::vec4> {
|
||||
void format(Builder& builder, glm::mat4 value) const;
|
||||
};
|
||||
@@ -4,9 +4,12 @@
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "inferno/component/spritecomponent.h"
|
||||
#include "ruc/json/json.h"
|
||||
|
||||
#include "inferno/asset/asset-manager.h"
|
||||
#include "inferno/asset/texture.h"
|
||||
#include "inferno/component/serialize.h" // not detected as used by clang-tidy
|
||||
#include "inferno/component/spritecomponent.h"
|
||||
|
||||
namespace Inferno {
|
||||
|
||||
@@ -23,27 +26,3 @@ void fromJson(const ruc::Json& json, SpriteComponent& value)
|
||||
}
|
||||
|
||||
} // namespace Inferno
|
||||
|
||||
namespace glm {
|
||||
|
||||
void toJson(ruc::Json& json, const vec4& value)
|
||||
{
|
||||
json = ruc::Json {
|
||||
{ value.r, value.g, value.b, value.a },
|
||||
};
|
||||
}
|
||||
|
||||
void fromJson(const ruc::Json& json, vec4& value)
|
||||
{
|
||||
VERIFY(json.type() == ruc::Json::Type::Array);
|
||||
|
||||
auto& values = json.asArray();
|
||||
VERIFY(values.size() == 4, "glm::vec4 expects 4 values, not {}", values.size());
|
||||
|
||||
value.r = values.at(0).get<float>();
|
||||
value.g = values.at(1).get<float>();
|
||||
value.b = values.at(2).get<float>();
|
||||
value.a = values.at(3).get<float>();
|
||||
}
|
||||
|
||||
} // namespace glm
|
||||
|
||||
@@ -23,10 +23,3 @@ struct SpriteComponent {
|
||||
void fromJson(const ruc::Json& json, SpriteComponent& value);
|
||||
|
||||
} // namespace Inferno
|
||||
|
||||
namespace glm {
|
||||
|
||||
void toJson(ruc::Json& json, const vec4& value);
|
||||
void fromJson(const ruc::Json& json, vec4& value);
|
||||
|
||||
} // namespace glm
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "ruc/format/format.h"
|
||||
#include "ruc/json/json.h"
|
||||
|
||||
#include "inferno/component/serialize.h"
|
||||
#include "inferno/component/transformcomponent.h"
|
||||
|
||||
namespace Inferno {
|
||||
@@ -28,56 +29,6 @@ void fromJson(const ruc::Json& json, TransformComponent& value)
|
||||
|
||||
} // namespace Inferno
|
||||
|
||||
namespace glm {
|
||||
|
||||
void toJson(ruc::Json& json, const vec3& value)
|
||||
{
|
||||
json = ruc::Json {
|
||||
{ value.x, value.y, value.z },
|
||||
};
|
||||
}
|
||||
|
||||
void fromJson(const ruc::Json& json, vec3& value)
|
||||
{
|
||||
VERIFY(json.type() == ruc::Json::Type::Array);
|
||||
|
||||
auto& values = json.asArray();
|
||||
VERIFY(values.size() == 3, "glm::vec3 expects 3 values, not {}", values.size());
|
||||
|
||||
value.x = values.at(0).get<float>();
|
||||
value.y = values.at(1).get<float>();
|
||||
value.z = values.at(2).get<float>();
|
||||
}
|
||||
|
||||
} // namespace glm
|
||||
|
||||
void ruc::format::Formatter<glm::vec2>::format(Builder& builder, glm::vec2 value) const
|
||||
{
|
||||
return Formatter<std::vector<float>>::format(builder, { value.x, value.y });
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::vec3>::format(Builder& builder, glm::vec3 value) const
|
||||
{
|
||||
return Formatter<std::vector<float>>::format(builder, { value.x, value.y, value.z });
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::vec4>::format(Builder& builder, glm::vec4 value) const
|
||||
{
|
||||
return Formatter<std::vector<float>>::format(builder, { value.x, value.y, value.z, value.w });
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<glm::mat4>::format(Builder& builder, glm::mat4 value) const
|
||||
{
|
||||
builder.putString("mat4 ");
|
||||
Formatter<glm::vec4>::format(builder, value[0]);
|
||||
builder.putString("\n ");
|
||||
Formatter<glm::vec4>::format(builder, value[1]);
|
||||
builder.putString("\n ");
|
||||
Formatter<glm::vec4>::format(builder, value[2]);
|
||||
builder.putString("\n ");
|
||||
return Formatter<glm::vec4>::format(builder, value[3]);
|
||||
}
|
||||
|
||||
void ruc::format::Formatter<Inferno::TransformComponent>::format(Builder& builder, Inferno::TransformComponent value) const
|
||||
{
|
||||
builder.putString("transform ");
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint> // uint32_t
|
||||
#include <optional>
|
||||
|
||||
#include "entt/entity/entity.hpp" // entt::null
|
||||
#include "entt/entity/fwd.hpp" // entt::entity
|
||||
#include "glm/ext/matrix_float4x4.hpp" // glm::mat4
|
||||
@@ -31,33 +28,6 @@ void fromJson(const ruc::Json& json, TransformComponent& value);
|
||||
|
||||
} // namespace Inferno
|
||||
|
||||
namespace glm {
|
||||
|
||||
void toJson(ruc::Json& json, const vec3& value);
|
||||
void fromJson(const ruc::Json& json, vec3& value);
|
||||
|
||||
} // namespace glm
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::vec2> : Formatter<std::vector<float>> {
|
||||
void format(Builder& builder, glm::vec2 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::vec3> : Formatter<std::vector<float>> {
|
||||
void format(Builder& builder, glm::vec3 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::vec4> : Formatter<std::vector<float>> {
|
||||
void format(Builder& builder, glm::vec4 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<glm::mat4> : Formatter<glm::vec4> {
|
||||
void format(Builder& builder, glm::mat4 value) const;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct ruc::format::Formatter<Inferno::TransformComponent> : Formatter<glm::vec3> {
|
||||
void format(Builder& builder, Inferno::TransformComponent value) const;
|
||||
|
||||
Reference in New Issue
Block a user