diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-12-01 19:26:59 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-12-01 19:34:38 +0100 |
commit | 03917e76108e3d45e73a93905ffc05423dd672df (patch) | |
tree | 9b640e19c8b9cd893d10cd439b141ea574f67b8e /loader | |
parent | acecc8744c17dc266f9369ab99df2ced084abc9a (diff) |
serialize, loader: simplify loading sceneries a bit
Diffstat (limited to 'loader')
-rw-r--r-- | loader/impl.hpp | 1 | ||||
-rw-r--r-- | loader/json.cpp | 15 |
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()); |