summaryrefslogtreecommitdiffhomepage
path: root/loader/ground-traits.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-02-11 00:39:28 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-02-11 08:49:51 +0100
commit5267d7b5b52fb8112dc4001b3b8f7985521af5ba (patch)
tree32952992edee1144841b1cb8d69965ee981fe870 /loader/ground-traits.cpp
parentb8c538bcdfdcc7f2739934ea96fe98ae61b565dc (diff)
wip atlas loader
Diffstat (limited to 'loader/ground-traits.cpp')
-rw-r--r--loader/ground-traits.cpp38
1 files changed, 10 insertions, 28 deletions
diff --git a/loader/ground-traits.cpp b/loader/ground-traits.cpp
index 61df7831..e56f0692 100644
--- a/loader/ground-traits.cpp
+++ b/loader/ground-traits.cpp
@@ -22,39 +22,21 @@ StringView ground_traits::name_of(const Cell& x) { return x.name; }
StringView ground_traits::name_of(const Atlas& x) { return x.name(); }
String& ground_traits::name_of(Cell& x) { return x.name; }
-void ground_traits::ensure_atlases_loaded(Storage& st)
+void ground_traits::ensure_atlases_loaded(Storage& s)
{
- if (!st.name_map.empty()) [[likely]]
- return;
+ fm_assert(s.name_map.empty());
- st.cell_array = ground_cell::load_atlases_from_json().vec;
- 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)
- {
- fm_soft_assert(c.name != loader.INVALID);
- fm_soft_assert(loader.check_atlas_name(c.name));
- fm_soft_assert(!c.atlas);
- st.name_map[c.name] = i++;
- }
+ s.cell_array = ground_cell::load_atlases_from_json().vec;
+ s.name_map[loader.INVALID] = -1uz;
}
-auto ground_traits::make_invalid_atlas(Storage& s) -> const Cell& // todo! store it in cell_array
+auto ground_traits::make_invalid_atlas(Storage& s) -> Pointer<Cell>
{
- if (!s.invalid_atlas) [[unlikely]]
- {
- auto atlas = std::make_shared<Atlas>(
- ground_def{loader.INVALID, Vector2ub{1,1}, pass_mode::pass},
- loader.make_error_texture(Vector2ui(tile_size_xy)));
- s.invalid_atlas = Pointer<ground_cell>{ InPlaceInit, atlas, atlas->name(), atlas->num_tiles2(), atlas->pass_mode() };
- }
- return *s.invalid_atlas;
+ fm_assert(!s.invalid_atlas);
+ auto atlas = std::make_shared<Atlas>(
+ ground_def{loader.INVALID, Vector2ub{1,1}, pass_mode::pass},
+ loader.make_error_texture(Vector2ui(tile_size_xy)));
+ return Pointer<ground_cell>{ InPlaceInit, atlas, atlas->name(), atlas->num_tiles2(), atlas->pass_mode() };
}
auto ground_traits::make_atlas(StringView name, const Cell& c) -> std::shared_ptr<Atlas>