diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-11-22 13:41:14 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-11-22 13:41:14 +0100 |
commit | a5c6ca806b2bde216effbea7cd5d964b3f235b5f (patch) | |
tree | bd859c8082ff1460c957d965aca9f485d97bc973 /loader | |
parent | be44dc48469437370abab260fbd2c91a82109f9c (diff) |
a
Diffstat (limited to 'loader')
-rw-r--r-- | loader/impl.hpp | 2 | ||||
-rw-r--r-- | loader/wall-atlas.cpp | 26 |
2 files changed, 22 insertions, 6 deletions
diff --git a/loader/impl.hpp b/loader/impl.hpp index ec571ae4..38a89265 100644 --- a/loader/impl.hpp +++ b/loader/impl.hpp @@ -45,7 +45,7 @@ struct loader_impl final : loader_ // >-----> walls >-----> struct wall_index { uint32_t val = (uint32_t)-1; }; - tsl::robin_map<StringView, const wall_info*> wall_atlas_map; + tsl::robin_map<StringView, wall_info*> wall_atlas_map; std::vector<wall_info> wall_atlas_array; const wall_info& wall_atlas(StringView name, StringView dir) override; diff --git a/loader/wall-atlas.cpp b/loader/wall-atlas.cpp index 1784f4e2..57b89ded 100644 --- a/loader/wall-atlas.cpp +++ b/loader/wall-atlas.cpp @@ -16,7 +16,25 @@ #include <vector> namespace floormat { -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(wall_info, name, descr) + +using nlohmann::json; + +static void from_json(const json& j, wall_info& val) +{ + val = {}; + val.name = j["name"]; + fm_soft_assert(loader.check_atlas_name(val.name)); + if (j.contains("descr")) + val.descr = j["descr"]; +} + +static void to_json(json& j, const wall_info& val) +{ + j["name"] = val.name; + if (val.descr) + j["descr"] = val.descr; +} + } // namespace floormat namespace floormat::loader_detail { @@ -41,9 +59,7 @@ const wall_info& loader_impl::wall_atlas(StringView name, StringView dir) fm_throw("no such wall atlas '{}'"_cf, path); fm_assert(it->second != nullptr); if (!it->second->atlas) - { - const_cast<wall_info*>(it->second)->atlas = get_wall_atlas(it->second->name, path); - } + it->second->atlas = get_wall_atlas(it->second->name, path); return *it->second; } @@ -54,7 +70,7 @@ void loader_impl::get_wall_atlas_list() wall_atlas_map.clear(); wall_atlas_map.reserve(wall_atlas_array.size()*2); - for (const auto& x : wall_atlas_array) + for (auto& x : wall_atlas_array) { fm_soft_assert(check_atlas_name(x.name)); StringView name = x.name; |