vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
json_vec.h
1#pragma once
2
3#include <nlohmann/json.hpp>
4#include <glm/glm.hpp>
5#include <glm/gtc/quaternion.hpp>
6
7#include "logger.h"
8
9namespace Vkm::Engine::detail {
10
11// GLM <-> flat JSON arrays. A null node returns the fallback silently (field
12// omitted); a present but malformed one returns it with a warning.
13
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}; }
18
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) {
22 LOG_WARNING_C(
23 "IO",
24 "jsonToVec2: expected a 2-element array, got '%s'; using fallback",
25 j.dump().c_str()
26 );
27 return fallback;
28 }
29 return {j[0], j[1]};
30}
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) {
34 LOG_WARNING_C(
35 "IO",
36 "jsonToVec3: expected a 3-element array, got '%s'; using fallback",
37 j.dump().c_str()
38 );
39 return fallback;
40 }
41 return {j[0], j[1], j[2]};
42}
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) {
46 LOG_WARNING_C(
47 "IO",
48 "jsonToVec4: expected a 4-element array, got '%s'; using fallback",
49 j.dump().c_str()
50 );
51 return fallback;
52 }
53 return {j[0], j[1], j[2], j[3]};
54}
55inline glm::quat jsonToQuat(
56 const nlohmann::json& j,
57 const glm::quat& fallback = glm::quat(1.0f, 0.0f, 0.0f, 0.0f)
58) {
59 if (j.is_null()) return fallback;
60 if (!j.is_array() || j.size() < 4) {
61 LOG_WARNING_C(
62 "IO",
63 "jsonToQuat: expected a 4-element array, got '%s'; using fallback",
64 j.dump().c_str()
65 );
66 return fallback;
67 }
68 return glm::quat(
69 static_cast<float>(j[0]),
70 static_cast<float>(j[1]),
71 static_cast<float>(j[2]),
72 static_cast<float>(j[3])
73 );
74}
75
76} // namespace Vkm::Engine::detail