diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-02-10 05:39:10 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-02-10 05:39:10 +0100 |
commit | 972275ca9cfbbbe23039c0cecb359420358d8ebf (patch) | |
tree | 77975d0349250c68ecbaf5f094cafee894a10773 /loader/wall-traits.cpp | |
parent | 25fd6d8eb0ec170ef6fabfb3097fe5f70e42edb8 (diff) |
loader: don't require atlas's Cell pointer to remain constant
The make_cell() thing hasn't been tested yet.
Diffstat (limited to 'loader/wall-traits.cpp')
-rw-r--r-- | loader/wall-traits.cpp | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/loader/wall-traits.cpp b/loader/wall-traits.cpp index b5a4245c..ac9f1a7a 100644 --- a/loader/wall-traits.cpp +++ b/loader/wall-traits.cpp @@ -27,32 +27,24 @@ void wall_traits::ensure_atlases_loaded(Storage& st) { if (!st.name_map.empty()) [[likely]] return; - st.name_map.max_load_factor(0.4f); - - constexpr bool add_invalid = true; st.cell_array = wall_cell::load_atlases_from_json().vec; - st.name_map.reserve(st.cell_array.size()*2); - fm_assert(!st.cell_array.empty()); - fm_assert(st.name_map.empty()); - - if constexpr(add_invalid) - { - for (auto& x : st.cell_array) - fm_soft_assert(x.name != loader.INVALID); - st.cell_array.push_back(make_invalid_atlas(st)); - } + st.name_map.max_load_factor(0.4f); + st.name_map.reserve((st.cell_array.size()+1)*3/2); + st.name_map[loader.INVALID] = -1uz; for (auto& c : st.cell_array) + if (c.name.isSmall()) + c.name = String{AllocatedInit, c.name}; + + for (auto i = 0uz; const auto& c : st.cell_array) { - if constexpr(!add_invalid) - fm_soft_assert(c.name != "<invalid>"_s); + fm_soft_assert(c.name != loader.INVALID); fm_soft_assert(loader.check_atlas_name(c.name)); - StringView name = c.name; - st.name_map[name] = &c; + fm_soft_assert(!c.atlas); + fm_assert(!c.name.isSmall()); + st.name_map[c.name] = i++; } - - fm_assert(!st.cell_array.empty()); } auto wall_traits::make_invalid_atlas(Storage& st) -> const Cell& |