summaryrefslogtreecommitdiffhomepage
path: root/loader
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-12-01 19:26:59 +0100
committerStanislaw Halik <sthalik@misaki.pl>2022-12-01 19:34:38 +0100
commit03917e76108e3d45e73a93905ffc05423dd672df (patch)
tree9b640e19c8b9cd893d10cd439b141ea574f67b8e /loader
parentacecc8744c17dc266f9369ab99df2ced084abc9a (diff)
serialize, loader: simplify loading sceneries a bit
Diffstat (limited to 'loader')
-rw-r--r--loader/impl.hpp1
-rw-r--r--loader/json.cpp15
2 files changed, 11 insertions, 5 deletions
diff --git a/loader/impl.hpp b/loader/impl.hpp
index a6916ceb..2032c095 100644
--- a/loader/impl.hpp
+++ b/loader/impl.hpp
@@ -37,6 +37,7 @@ struct loader_impl final : loader_
const scenery_proto& scenery(StringView name) override;
void get_anim_atlas_list();
+ void get_scenery_list();
static void set_application_working_directory();
static anim_def deserialize_anim(StringView filename);
diff --git a/loader/json.cpp b/loader/json.cpp
index 710792f8..aec7c7b8 100644
--- a/loader/json.cpp
+++ b/loader/json.cpp
@@ -14,12 +14,11 @@ anim_def loader_impl::deserialize_anim(StringView filename)
return json_helper::from_json<anim_def>(filename);
}
-const std::vector<serialized_scenery>& loader_impl::sceneries()
+void loader_impl::get_scenery_list()
{
- if (!sceneries_array.empty())
- return sceneries_array;
-
+ sceneries_array.clear();
sceneries_array = json_helper::from_json<std::vector<serialized_scenery>>(Path::join(SCENERY_PATH, "scenery.json"));
+ sceneries_map.clear();
sceneries_map.reserve(sceneries_array.size() * 2);
for (const serialized_scenery& s : sceneries_array)
{
@@ -27,13 +26,19 @@ const std::vector<serialized_scenery>& loader_impl::sceneries()
fm_abort("duplicate scenery name '%s'", s.name.data());
sceneries_map[s.name] = &s;
}
+}
+
+const std::vector<serialized_scenery>& loader_impl::sceneries()
+{
+ if (sceneries_array.empty())
+ get_scenery_list();
return sceneries_array;
}
const scenery_proto& loader_impl::scenery(StringView name)
{
if (sceneries_array.empty())
- (void)sceneries();
+ get_scenery_list();
auto it = sceneries_map.find(name);
if (it == sceneries_map.end())
fm_abort("no such scenery: '%s'", name.data());