| 287 | } |
| 288 | |
| 289 | void sugoi_storage_t::deserialize(skr_binary_reader_t* s) |
| 290 | { |
| 291 | using namespace sugoi; |
| 292 | SkrZoneScopedN("sugoi_storage_t::deserialize"); |
| 293 | namespace bin = skr::binary; |
| 294 | if(scheduler) |
| 295 | { |
| 296 | SKR_ASSERT(scheduler->is_main_thread(this)); |
| 297 | scheduler->sync_storage(this); |
| 298 | } |
| 299 | // empty storage expected |
| 300 | SKR_ASSERT(entities.entries.size() == 0); |
| 301 | uint32_t size = 0; |
| 302 | bin::Archive(s, size); |
| 303 | entities.entries.resize_default(size); |
| 304 | uint32_t freeSize = 0; |
| 305 | bin::Archive(s, freeSize); |
| 306 | entities.freeEntries.resize_default(freeSize); |
| 307 | ArchiveBuffer(s, entities.freeEntries.data(), freeSize); |
| 308 | uint32_t groupSize = 0; |
| 309 | bin::Archive(s, groupSize); |
| 310 | forloop (i, 0, groupSize) |
| 311 | { |
| 312 | SkrZoneScopedN("deserialize group"); |
| 313 | fixed_stack_scope_t _(localStack); |
| 314 | auto type = deserialize_type(localStack, s, true); |
| 315 | auto group = construct_group(type); |
| 316 | uint32_t chunkCount = 0; |
| 317 | bin::Archive(s, chunkCount); |
| 318 | forloop (j, 0, chunkCount) |
| 319 | { |
| 320 | SkrZoneScopedN("deserialize chunk"); |
| 321 | sugoi_chunk_view_t view; |
| 322 | serialize_view(group, view, nullptr, s, true); |
| 323 | auto ents = sugoiV_get_entities(&view); |
| 324 | forloop(k, 0, view.count) |
| 325 | { |
| 326 | entity_registry_t::entry_t entry; |
| 327 | entry.chunk = view.chunk; |
| 328 | entry.indexInChunk = k + view.start; |
| 329 | entry.version = e_version(ents[k]); |
| 330 | entities.entries[e_id(ents[k])] = entry; |
| 331 | } |
| 332 | } |
| 333 | } |
| 334 | } |
no test coverage detected