diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-12-02 03:51:37 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-12-02 03:51:37 +0100 |
commit | e76fae1b2f007efc58ef46ecc248d271676c6673 (patch) | |
tree | 30c166d3cb93e01f3d2aa514983fb5cfd451f996 /serialize | |
parent | 0ef0c4c70ae012986d07788ddde862087d300de3 (diff) |
serialize: fix logic error with scenery atlases
Diffstat (limited to 'serialize')
-rw-r--r-- | serialize/world-writer.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/serialize/world-writer.cpp b/serialize/world-writer.cpp index fb1eee85..8ff6314c 100644 --- a/serialize/world-writer.cpp +++ b/serialize/world-writer.cpp @@ -136,7 +136,7 @@ scenery_pair writer_state::intern_scenery(scenery_proto s, bool create) auto it = scenery_map.find(ptr); fm_assert(it != scenery_map.end() && !it->second.empty()); auto& vec = it->second; - interned_scenery* ret = nullptr; + interned_scenery *ret = nullptr, *ret2 = nullptr; for (interned_scenery& x : vec) { fm_debug_assert(s.frame.type == x.s->proto.frame.type); @@ -148,6 +148,8 @@ scenery_pair writer_state::intern_scenery(scenery_proto s, bool create) else ret = &x; } + else if (x.index != null_atlas) + ret2 = &x; } if (ret) @@ -156,7 +158,15 @@ scenery_pair writer_state::intern_scenery(scenery_proto s, bool create) return { ret->s, ret->index, true }; } else if (create) - return { vec[0].s, vec[0].index = scenery_map_size++, false }; + { + if (ret2) + return { ret2->s, ret2->index, false }; + else + { + fm_assert(!vec[0].s->proto); + return { vec[0].s, vec[0].index = scenery_map_size++, false }; + } + } else return {}; } |