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/json.cpp | |
parent | acecc8744c17dc266f9369ab99df2ced084abc9a (diff) |
serialize, loader: simplify loading sceneries a bit
Diffstat (limited to 'loader/json.cpp')
-rw-r--r-- | loader/json.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
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()); |