@Override public void loadGlobalStore() throws IOException { Path globalDataFile = storagePathProvider.getGlobalEntityStorePath(); if (Files.isRegularFile(globalDataFile)) { try (InputStream in = new BufferedInputStream(Files.newInputStream(globalDataFile))) { EntityData.GlobalStore store = EntityData.GlobalStore.parseFrom(in); GlobalStoreLoader loader = new GlobalStoreLoader(environment, entityManager, prefabSerializer); loader.load(store); } } }
private Prefab loadPrefab(EntityData.Prefab prefabData, Map<String, EntityData.Prefab> pendingPrefabs) { Optional<Prefab> result = Assets.getPrefab(prefabData.getName()); if (!result.isPresent()) { if (prefabData.hasParentName() && pendingPrefabs.containsKey(prefabData.getParentName())) { loadPrefab(pendingPrefabs.get(prefabData.getParentName()), pendingPrefabs); } Module module = environment.get(new SimpleUri(prefabData.getName()).getModuleName()); try (ModuleContext.ContextSpan ignored = ModuleContext.setContext(module)) { return createPrefab(prefabData); } catch (Exception e) { logger.error("Failed to load prefab {}", prefabData.getParentName(), e); return null; } } return result.get(); }
public void load(EntityData.GlobalStore globalStore) { entityManager.clear(); entityManager.setNextId(globalStore.getNextEntityId()); loadComponentMapping(globalStore); loadMissingPrefabs(globalStore); for (EntityData.Entity entityData : globalStore.getEntityList()) { entitySerializer.deserialize(entityData); } }
private void loadMissingPrefabs(EntityData.GlobalStore globalStore) { // Prefabs that still need to be created, by their name Map<String, EntityData.Prefab> pendingPrefabs = Maps.newHashMap(); for (EntityData.Prefab prefabData : globalStore.getPrefabList()) { if (!prefabManager.exists(prefabData.getName())) { if (!prefabData.hasParentName()) { Module module = environment.get(new SimpleUri(prefabData.getName()).getModuleName()); try (ModuleContext.ContextSpan ignored = ModuleContext.setContext(module)) { createPrefab(prefabData); } catch (Exception e) { logger.error("Failed to load prefab {}", prefabData.getName(), e); } } else { pendingPrefabs.put(prefabData.getName(), prefabData); } } } for (EntityData.Prefab prefabData : pendingPrefabs.values()) { loadPrefab(prefabData, pendingPrefabs); } }