diff options
-rw-r--r-- | serialize/wall-atlas.cpp | 19 | ||||
-rw-r--r-- | src/wall-atlas.hpp | 3 |
2 files changed, 20 insertions, 2 deletions
diff --git a/serialize/wall-atlas.cpp b/serialize/wall-atlas.cpp index 2bd27626..a25656ed 100644 --- a/serialize/wall-atlas.cpp +++ b/serialize/wall-atlas.cpp @@ -6,6 +6,8 @@ #include <Corrade/Containers/StringStl.h> #include <nlohmann/json.hpp> +// todo add test on dummy files that generates 100% coverage on the j.contains() blocks! + namespace floormat { namespace { @@ -35,11 +37,14 @@ void read_frameset_metadata(const nlohmann::json& j, wall_frames& val) val.tint_mult = Vector4(t["mult"]); if (t.contains("add")) val.tint_add = Vector3(t["add"]); + fm_soft_assert(val.tint_mult >= Color4{0}); } if (j.contains("from-rotation")) val.from_rotation = (uint8_t)rotation_from_name(std::string{j["from-rotation"]}); if (j.contains("mirrored")) val.mirrored = j["mirrored"]; + if (j.contains("use-default-tint")) + val.use_default_tint = j["use-default-tint"]; } void write_frameset_metadata(nlohmann::json& j, const wall_atlas& a, const wall_frames& val) @@ -51,13 +56,25 @@ void write_frameset_metadata(nlohmann::json& j, const wall_atlas& a, const wall_ fm_soft_assert(val.pixel_size != default_value.pixel_size); fm_soft_assert(val.from_rotation == (uint8_t)-1 || val.from_rotation < 4); #endif + fm_soft_assert(val.index < a.array().size()); fm_soft_assert(val.count != (uint32_t)-1 && val.count > 0); j["pixel-size"] = val.pixel_size; if (val.tint_mult != default_value.tint_mult || val.tint_add != default_value.tint_add) { - auto tint = std::pair{Vector4{val.tint_mult}, Vector3{val.tint_add}}; + auto tint = std::pair<Vector4, Vector3>{{val.tint_mult}, {val.tint_add}}; + j["tint"] = tint; + } + if (val.from_rotation != default_value.from_rotation) + { + fm_soft_assert(val.from_rotation != (uint8_t)-1 && val.from_rotation < 4); + j["from-rotation"] = val.from_rotation; } + if (val.mirrored != default_value.mirrored) + j["mirrored"] = val.mirrored; + if (val.use_default_tint) + if (val.tint_mult != default_value.tint_mult || val.tint_add != default_value.tint_add) + j["use-default-tint"] = true; } } // namespace diff --git a/src/wall-atlas.hpp b/src/wall-atlas.hpp index 4706a47b..4414ac3f 100644 --- a/src/wall-atlas.hpp +++ b/src/wall-atlas.hpp @@ -26,7 +26,8 @@ struct wall_frames Color4 tint_mult{1,1,1,1}; Color3 tint_add; uint8_t from_rotation = (uint8_t)-1; - bool mirrored : 1 = false; + bool mirrored : 1 = false, + use_default_tint : 1 = true; }; struct wall_frame_set |