Component: Add ability to read TransformComponent from JSON
This commit is contained in:
@@ -15,7 +15,7 @@ namespace Inferno {
|
|||||||
struct NativeScriptComponent {
|
struct NativeScriptComponent {
|
||||||
NativeScript* instance { nullptr };
|
NativeScript* instance { nullptr };
|
||||||
|
|
||||||
NativeScript* (*initialize)();
|
NativeScript* (*initialize)() { nullptr };
|
||||||
|
|
||||||
// Dont allow manually setting instance during construction
|
// Dont allow manually setting instance during construction
|
||||||
NativeScriptComponent() {}
|
NativeScriptComponent() {}
|
||||||
|
|||||||
@@ -4,8 +4,53 @@
|
|||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "ruc/format/format.h"
|
||||||
|
#include "ruc/json/json.h"
|
||||||
|
|
||||||
#include "inferno/component/transformcomponent.h"
|
#include "inferno/component/transformcomponent.h"
|
||||||
|
|
||||||
|
namespace Inferno {
|
||||||
|
|
||||||
|
void fromJson(const ruc::Json& json, TransformComponent& value)
|
||||||
|
{
|
||||||
|
VERIFY(json.type() == ruc::Json::Type::Object);
|
||||||
|
|
||||||
|
if (json.exists("translate")) {
|
||||||
|
json.at("translate").getTo(value.translate);
|
||||||
|
}
|
||||||
|
if (json.exists("rotate")) {
|
||||||
|
json.at("rotate").getTo(value.rotate);
|
||||||
|
}
|
||||||
|
if (json.exists("scale")) {
|
||||||
|
json.at("scale").getTo(value.scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // 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
|
void ruc::format::Formatter<glm::vec2>::format(Builder& builder, glm::vec2 value) const
|
||||||
{
|
{
|
||||||
return Formatter<std::vector<float>>::format(builder, { value.x, value.y });
|
return Formatter<std::vector<float>>::format(builder, { value.x, value.y });
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "glm/ext/matrix_float4x4.hpp" // glm::mat4
|
#include "glm/ext/matrix_float4x4.hpp" // glm::mat4
|
||||||
#include "glm/ext/vector_float3.hpp" // glm::vec3
|
#include "glm/ext/vector_float3.hpp" // glm::vec3
|
||||||
#include "ruc/format/format.h"
|
#include "ruc/format/format.h"
|
||||||
|
#include "ruc/json/json.h"
|
||||||
|
|
||||||
namespace Inferno {
|
namespace Inferno {
|
||||||
|
|
||||||
@@ -19,8 +20,17 @@ struct TransformComponent {
|
|||||||
glm::mat4 transform { 1.0f }; // Identity matrix
|
glm::mat4 transform { 1.0f }; // Identity matrix
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void fromJson(const ruc::Json& json, TransformComponent& value);
|
||||||
|
|
||||||
} // namespace Inferno
|
} // namespace Inferno
|
||||||
|
|
||||||
|
namespace glm {
|
||||||
|
|
||||||
|
void toJson(ruc::Json& json, const vec3& value);
|
||||||
|
void fromJson(const ruc::Json& json, vec3& value);
|
||||||
|
|
||||||
|
} // namespace glm
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct ruc::format::Formatter<glm::vec2> : Formatter<std::vector<float>> {
|
struct ruc::format::Formatter<glm::vec2> : Formatter<std::vector<float>> {
|
||||||
void format(Builder& builder, glm::vec2 value) const;
|
void format(Builder& builder, glm::vec2 value) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user