From 98a63d0474b79e4e3197fd0c8c34bd8376408bf6 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 23 Nov 2023 21:58:32 +0100 Subject: wip --- serialize/wall-atlas.cpp | 23 +++++++++++++++++------ serialize/wall-atlas.hpp | 6 ++++-- 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'serialize') diff --git a/serialize/wall-atlas.cpp b/serialize/wall-atlas.cpp index 60c2218d..28d54a0c 100644 --- a/serialize/wall-atlas.cpp +++ b/serialize/wall-atlas.cpp @@ -7,6 +7,7 @@ #include "json-helper.hpp" #include #include +#include #include #include #include @@ -55,10 +56,11 @@ wall_atlas_def wall_atlas_def::deserialize(StringView filename) fm_soft_assert(loader.check_atlas_name(atlas.header.name)); atlas.frames = read_all_frames(jroot); auto [dirs, dir_indexes] = read_all_directions(jroot); - fm_soft_assert(!dirs.isEmpty()); + fm_soft_assert(!dirs.empty()); fm_soft_assert(dir_indexes != std::array{}); atlas.direction_array = std::move(dirs); atlas.direction_map = dir_indexes; + atlas.direction_mask = get_existing_directions(jroot); return atlas; } @@ -113,16 +115,16 @@ StringView direction_index_to_name(size_t i) return wall_atlas::directions[i].name; } -Array read_all_frames(const json& jroot) +std::vector read_all_frames(const json& jroot) { fm_assert(jroot.contains("frames")); - Array frames; + std::vector frames; const auto& jframes = jroot["frames"]; fm_assert(jframes.is_array()); const auto sz = jframes.size(); - frames = Array{sz}; + frames = std::vector{sz}; for (auto i = 0uz; i < sz; i++) { @@ -199,13 +201,22 @@ Direction read_direction_metadata(const json& jroot, Direction_ dir) return val; } -Pair, std::array> read_all_directions(const json& jroot) +[[nodiscard]] std::bitset<(size_t)Direction_::COUNT> get_existing_directions(const json& jroot) +{ + std::bitset<(size_t)Direction_::COUNT> array{0}; + for (uint8_t i = 0; auto [str, dir] : wall_atlas::directions) + if (jroot.contains(str)) + array[i] = true; + return array; +} + +Pair, std::array> read_all_directions(const json& jroot) { size_t count = 0; for (auto [str, _] : wall_atlas::directions) if (jroot.contains(str)) count++; - Array array{count}; + std::vector array{count}; std::array map = {}; for (uint8_t i = 0; auto [str, dir] : wall_atlas::directions) if (jroot.contains(str)) diff --git a/serialize/wall-atlas.hpp b/serialize/wall-atlas.hpp index b69f7e96..4e96943d 100644 --- a/serialize/wall-atlas.hpp +++ b/serialize/wall-atlas.hpp @@ -1,5 +1,6 @@ #pragma once #include "src/wall-atlas.hpp" +#include #include #include @@ -16,10 +17,11 @@ using nlohmann::json; uint8_t direction_index_from_name(StringView s); StringView direction_index_to_name(size_t i); -[[nodiscard]] Array read_all_frames(const json& jroot); +[[nodiscard]] std::vector read_all_frames(const json& jroot); [[nodiscard]] Group read_group_metadata(const json& jgroup); [[nodiscard]] Direction read_direction_metadata(const json& jroot, Direction_ dir); -Pair, std::array> read_all_directions(const json& jroot); +[[nodiscard]] std::bitset<(size_t)Direction_::COUNT> get_existing_directions(const json& jroot); +Pair, std::array> read_all_directions(const json& jroot); Info read_info_header(const json& jroot); void write_all_frames(json& jroot, ArrayView array); -- cgit v1.2.3