From 03917e76108e3d45e73a93905ffc05423dd672df Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 1 Dec 2022 19:26:59 +0100 Subject: serialize, loader: simplify loading sceneries a bit --- loader/impl.hpp | 1 + loader/json.cpp | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'loader') 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(filename); } -const std::vector& 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>(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& loader_impl::sceneries() fm_abort("duplicate scenery name '%s'", s.name.data()); sceneries_map[s.name] = &s; } +} + +const std::vector& 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()); -- cgit v1.2.3