summaryrefslogtreecommitdiffhomepage
path: root/loader/wall-traits.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'loader/wall-traits.cpp')
-rw-r--r--loader/wall-traits.cpp30
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&