summaryrefslogtreecommitdiffhomepage
path: root/loader
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-11-22 13:41:14 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-11-22 13:41:14 +0100
commita5c6ca806b2bde216effbea7cd5d964b3f235b5f (patch)
treebd859c8082ff1460c957d965aca9f485d97bc973 /loader
parentbe44dc48469437370abab260fbd2c91a82109f9c (diff)
a
Diffstat (limited to 'loader')
-rw-r--r--loader/impl.hpp2
-rw-r--r--loader/wall-atlas.cpp26
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;