virtual bool deserialize(UniverseContext& ctx, InputBlob& serializer) override { SerializedEngineHeader header; serializer.read(header); if (header.m_magic != SERIALIZED_ENGINE_MAGIC) { g_log_error.log("engine") << "Wrong or corrupted file"; return false; } if (header.m_version > SerializedEngineVersion::LATEST) { g_log_error.log("engine") << "Unsupported version"; return false; } if (!hasSerializedPlugins(serializer)) { return false; } g_path_manager.deserialize(serializer); ctx.m_universe->deserialize(serializer); ctx.m_hierarchy->deserialize(serializer); m_plugin_manager->deserialize(serializer); int32_t scene_count; serializer.read(scene_count); for (int i = 0; i < scene_count; ++i) { char tmp[32]; serializer.readString(tmp, sizeof(tmp)); IScene* scene = ctx.getScene(crc32(tmp)); scene->deserialize(serializer); } g_path_manager.clear(); return true; }
bool deserialize(UniverseContext& ctx, InputBlob& serializer) override { SerializedEngineHeader header; serializer.read(header); if (header.m_magic != SERIALIZED_ENGINE_MAGIC) { g_log_error.log("engine") << "Wrong or corrupted file"; return false; } if (header.m_version > SerializedEngineVersion::LATEST) { g_log_error.log("engine") << "Unsupported version"; return false; } if (!hasSerializedPlugins(serializer)) { return false; } if (header.m_version > SerializedEngineVersion::SCENE_VERSION_CHECK && !hasSupportedSceneVersions(serializer, ctx)) { return false; } m_path_manager.deserialize(serializer); ctx.m_universe->deserialize(serializer); if (header.m_version <= SerializedEngineVersion::HIERARCHY_COMPONENT) { ctx.getScene(HIERARCHY_HASH)->deserialize(serializer, 0); } m_plugin_manager->deserialize(serializer); int32 scene_count; serializer.read(scene_count); for (int i = 0; i < scene_count; ++i) { char tmp[32]; serializer.readString(tmp, sizeof(tmp)); IScene* scene = ctx.getScene(crc32(tmp)); int scene_version = -1; if (header.m_version > SerializedEngineVersion::SCENE_VERSION) { serializer.read(scene_version); } scene->deserialize(serializer, scene_version); } m_path_manager.clear(); return true; }