diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-11-22 10:30:24 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-11-22 10:30:24 +0100 |
commit | b5ab1c9999d1d34f051b01c165462ca97842892c (patch) | |
tree | bac6bb426a9d44a2eaf55d035ee704d333258fb8 | |
parent | 0f9235dad59619b0b3b3e518b287e3fb8103481f (diff) |
a
-rw-r--r-- | serialize/wall-atlas.cpp | 26 | ||||
-rw-r--r-- | src/wall-atlas.cpp | 4 | ||||
-rw-r--r-- | src/wall-atlas.hpp | 16 | ||||
-rw-r--r-- | test/wall-atlas.cpp | 4 |
4 files changed, 38 insertions, 12 deletions
diff --git a/serialize/wall-atlas.cpp b/serialize/wall-atlas.cpp index 79abe6fa..af4a754e 100644 --- a/serialize/wall-atlas.cpp +++ b/serialize/wall-atlas.cpp @@ -26,10 +26,10 @@ bool wall_atlas_def::operator==(const wall_atlas_def& other) const noexcept return false; if (direction_array.size() != other.direction_array.size()) return false; - for (uint8_t i = 0; i < std::size(direction_to_Direction_array_index); i++) + for (uint8_t i = 0; i < std::size(direction_map); i++) { - auto i1 = direction_to_Direction_array_index[i], - i2 = other.direction_to_Direction_array_index[i]; + auto i1 = direction_map[i], + i2 = other.direction_map[i]; if (!i1 != !i2) return false; if (i1) @@ -59,12 +59,15 @@ wall_atlas_def wall_atlas_def::deserialize(StringView filename) fm_soft_assert(!dirs.isEmpty()); fm_soft_assert(dir_indexes != std::array<Wall::DirArrayIndex, 4>{}); atlas.direction_array = std::move(dirs); - atlas.direction_to_Direction_array_index = dir_indexes; + atlas.direction_map = dir_indexes; return atlas; } -void wall_atlas_def::serialize(StringView filename) const +void wall_atlas_def::serialize(StringView filename, + const Info& header, ArrayView<const Frame> frames, + ArrayView<const Direction> direction_array, + std::array<DirArrayIndex, 4> direction_map) { auto jroot = json{}; @@ -73,7 +76,7 @@ void wall_atlas_def::serialize(StringView filename) const for (const auto [name_, dir] : wall_atlas::directions) { - if (auto idx = direction_to_Direction_array_index[(size_t)dir]) + if (auto idx = direction_map[(size_t)dir]) { const auto& dir = direction_array[idx.val]; if (!dir.is_empty()) @@ -87,6 +90,17 @@ void wall_atlas_def::serialize(StringView filename) const json_helper::to_json_(jroot, filename); } +void wall_atlas_def::serialize(StringView filename) const +{ + serialize(filename, header, frames, direction_array, direction_map); +} + +void wall_atlas::serialize(StringView filename) const +{ + return wall_atlas_def::serialize(filename, _info, _frame_array, + _dir_array, _direction_map); +} + } // namespace floormat namespace floormat::Wall::detail { diff --git a/src/wall-atlas.cpp b/src/wall-atlas.cpp index 3c2ac3cf..9c700548 100644 --- a/src/wall-atlas.cpp +++ b/src/wall-atlas.cpp @@ -74,7 +74,7 @@ wall_atlas::wall_atlas(wall_atlas_def def, String path, const ImageView2D& img) : _dir_array{std::move(def.direction_array)}, _frame_array{std::move(def.frames)}, _info{std::move(def.header)}, _path{std::move(path)}, - _direction_to_Direction_array_index{def.direction_to_Direction_array_index} + _direction_map{def.direction_map } { _texture.setLabel(_path) .setWrapping(GL::SamplerWrapping::ClampToEdge) @@ -93,7 +93,7 @@ auto wall_atlas::get_Direction(Direction_ num) const -> Direction* if (_dir_array.isEmpty()) [[unlikely]] return {}; - else if (auto DAI = _direction_to_Direction_array_index[(uint8_t)num]; DAI != default_DAI) [[likely]] + else if (auto DAI = _direction_map[(uint8_t)num]; DAI != default_DAI) [[likely]] return const_cast<Direction*>(&_dir_array[DAI.val]); else return {}; diff --git a/src/wall-atlas.hpp b/src/wall-atlas.hpp index e3470a56..2e6572e6 100644 --- a/src/wall-atlas.hpp +++ b/src/wall-atlas.hpp @@ -86,15 +86,27 @@ namespace floormat { struct wall_atlas_def final { + using Frame = Wall::Frame; + using Group = Wall::Group; + using Direction_ = Wall::Direction_; + using Direction = Wall::Direction; + using Info = Wall::Info; + using Tag = Wall::Tag; + using DirArrayIndex = Wall::DirArrayIndex; + bool operator==(const wall_atlas_def&) const noexcept; Wall::Info header; Array<Wall::Frame> frames; Array<Wall::Direction> direction_array; - std::array<Wall::DirArrayIndex, 4> direction_to_Direction_array_index; + std::array<Wall::DirArrayIndex, 4> direction_map; static wall_atlas_def deserialize(StringView filename); void serialize(StringView filename) const; + static void serialize(StringView filename, + const Info& header, ArrayView<const Frame> frames, + ArrayView<const Direction> direction_array, + std::array<DirArrayIndex, 4> direction_map); }; class wall_atlas final @@ -112,7 +124,7 @@ class wall_atlas final Info _info; String _path; GL::Texture2D _texture{NoCreate}; - std::array<DirArrayIndex, 4> _direction_to_Direction_array_index; + std::array<DirArrayIndex, 4> _direction_map; Direction* get_Direction(Direction_ num) const; diff --git a/test/wall-atlas.cpp b/test/wall-atlas.cpp index c04aaeba..35096ea4 100644 --- a/test/wall-atlas.cpp +++ b/test/wall-atlas.cpp @@ -74,7 +74,7 @@ void test_read_groups(StringView filename) const auto atlas2 = wall_atlas_def::deserialize(path); fm_assert(atlas2.header == info); - auto idx2 = atlas2.direction_to_Direction_array_index[(size_t)Direction_::W]; + auto idx2 = atlas2.direction_map[(size_t)Direction_::W]; fm_assert(idx2); const auto& dir2 = atlas2.direction_array[idx2.val]; fm_assert(dir == dir2); @@ -93,7 +93,7 @@ void test_read_groups(StringView filename) fm_assert(!atlas.frames.isEmpty()); fm_assert(atlas.frames[0].offset != frame_defaults.offset); - auto dir_index = atlas.direction_to_Direction_array_index[(size_t)Direction_::W]; + auto dir_index = atlas.direction_map[(size_t)Direction_::W]; fm_assert(dir_index); const auto& dir = atlas.direction_array[dir_index.val]; fm_assert(dir.side.pixel_size != group_defaults.pixel_size); |