summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-11-22 10:30:24 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-11-22 10:30:24 +0100
commitb5ab1c9999d1d34f051b01c165462ca97842892c (patch)
treebac6bb426a9d44a2eaf55d035ee704d333258fb8
parent0f9235dad59619b0b3b3e518b287e3fb8103481f (diff)
a
-rw-r--r--serialize/wall-atlas.cpp26
-rw-r--r--src/wall-atlas.cpp4
-rw-r--r--src/wall-atlas.hpp16
-rw-r--r--test/wall-atlas.cpp4
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);