3#include "pixelbullet/filesystem/virtual_path.h"
4#include "pixelbullet/filesystem/virtual_path_serialization.h"
5#include "pixelbullet/serialization/node.h"
14 glm::vec4 tint = glm::vec4(1.0f);
15 glm::vec2 uv_scale = glm::vec2(1.0f);
16 glm::vec2 uv_offset = glm::vec2(0.0f);
22 node[
"texture"] << sprite.texture;
25 tintNode.SetType(NodeType::Array);
26 auto& tintProperties = tintNode.GetProperties();
27 tintProperties.clear();
28 for (
int index = 0; index < 4; ++index)
31 componentNode << sprite.tint[index];
32 tintProperties.emplace_back(
"", std::move(componentNode));
34 node[
"tint"] = std::move(tintNode);
37 uvScaleNode.SetType(NodeType::Array);
38 auto& uvScaleProperties = uvScaleNode.GetProperties();
39 uvScaleProperties.clear();
40 for (
int index = 0; index < 2; ++index)
43 componentNode << sprite.uv_scale[index];
44 uvScaleProperties.emplace_back(
"", std::move(componentNode));
46 node[
"uvScale"] = std::move(uvScaleNode);
49 uvOffsetNode.SetType(NodeType::Array);
50 auto& uvOffsetProperties = uvOffsetNode.GetProperties();
51 uvOffsetProperties.clear();
52 for (
int index = 0; index < 2; ++index)
55 componentNode << sprite.uv_offset[index];
56 uvOffsetProperties.emplace_back(
"", std::move(componentNode));
58 node[
"uvOffset"] = std::move(uvOffsetNode);
60 node[
"visible"] << sprite.visible;
64inline const Node& operator>>(
const Node& node, SpriteRenderer& sprite)
66 node[
"texture"] >> sprite.texture;
68 const Node& tintNode = node[
"tint"];
69 ASSERT(tintNode.GetType() == NodeType::Array,
"SpriteRenderer tint must be an array");
70 const auto& tintProperties = tintNode.GetProperties();
71 ASSERT(tintProperties.size() >= 4,
"SpriteRenderer tint requires four components");
72 for (
int index = 0; index < 4; ++index)
74 tintProperties[index].second >> sprite.tint[index];
77 const Node& uvScaleNode = node[
"uvScale"];
78 ASSERT(uvScaleNode.GetType() == NodeType::Array,
"SpriteRenderer uvScale must be an array");
79 const auto& uvScaleProperties = uvScaleNode.GetProperties();
80 ASSERT(uvScaleProperties.size() >= 2,
"SpriteRenderer uvScale requires two components");
81 for (
int index = 0; index < 2; ++index)
83 uvScaleProperties[index].second >> sprite.uv_scale[index];
86 const Node& uvOffsetNode = node[
"uvOffset"];
87 ASSERT(uvOffsetNode.GetType() == NodeType::Array,
"SpriteRenderer uvOffset must be an array");
88 const auto& uvOffsetProperties = uvOffsetNode.GetProperties();
89 ASSERT(uvOffsetProperties.size() >= 2,
"SpriteRenderer uvOffset requires two components");
90 for (
int index = 0; index < 2; ++index)
92 uvOffsetProperties[index].second >> sprite.uv_offset[index];
95 node[
"visible"] >> sprite.visible;
#define ASSERT(condition,...)
Asserts that a condition is true.
Definition assert.h:163
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition node.h:45
Definition virtual_path.h:10
Definition sprite_renderer.h:12