3#include <nlohmann/json.hpp>
5#include <glm/gtc/quaternion.hpp>
9namespace Vkm::Engine::detail {
14inline nlohmann::json vec2ToJson(
const glm::vec2& v) {
return {v.x, v.y}; }
15inline nlohmann::json vec3ToJson(
const glm::vec3& v) {
return {v.x, v.y, v.z}; }
16inline nlohmann::json vec4ToJson(
const glm::vec4& v) {
return {v.x, v.y, v.z, v.w}; }
17inline nlohmann::json quatToJson(
const glm::quat& q) {
return {q.w, q.x, q.y, q.z}; }
19inline glm::vec2 jsonToVec2(
const nlohmann::json& j,
const glm::vec2& fallback = glm::vec2(0.0f)) {
20 if (j.is_null())
return fallback;
21 if (!j.is_array() || j.size() < 2) {
24 "jsonToVec2: expected a 2-element array, got '%s'; using fallback",
31inline glm::vec3 jsonToVec3(
const nlohmann::json& j,
const glm::vec3& fallback = glm::vec3(0.0f)) {
32 if (j.is_null())
return fallback;
33 if (!j.is_array() || j.size() < 3) {
36 "jsonToVec3: expected a 3-element array, got '%s'; using fallback",
41 return {j[0], j[1], j[2]};
43inline glm::vec4 jsonToVec4(
const nlohmann::json& j,
const glm::vec4& fallback = glm::vec4(0.0f)) {
44 if (j.is_null())
return fallback;
45 if (!j.is_array() || j.size() < 4) {
48 "jsonToVec4: expected a 4-element array, got '%s'; using fallback",
53 return {j[0], j[1], j[2], j[3]};
55inline glm::quat jsonToQuat(
56 const nlohmann::json& j,
57 const glm::quat& fallback = glm::quat(1.0f, 0.0f, 0.0f, 0.0f)
59 if (j.is_null())
return fallback;
60 if (!j.is_array() || j.size() < 4) {
63 "jsonToQuat: expected a 4-element array, got '%s'; using fallback",
69 static_cast<float>(j[0]),
70 static_cast<float>(j[1]),
71 static_cast<float>(j[2]),
72 static_cast<float>(j[3])