@Override public EntityRef deserializeEntity(EntityData.Entity entityData) { EntityRef entity = entityManager.createEntityRefWithId(entityData.getId()); if (entityData.hasParentPrefab() && !entityData.getParentPrefab().isEmpty() && prefabManager.exists(entityData.getParentPrefab())) { Prefab prefab = prefabManager.getPrefab(entityData.getParentPrefab()); for (Component component : prefab.listComponents()) { String componentName = ComponentUtil.getComponentClassName(component.getClass()); if (!containsIgnoreCase(componentName, entityData.getRemovedComponentList())) { entity.addComponent(componentLibrary.copy(component)); } } entity.addComponent(new EntityInfoComponent(entityData.getParentPrefab())); } for (EntityData.Component componentData : entityData.getComponentList()) { Class<? extends Component> componentClass = getComponentClass(componentData); if (componentClass == null) continue; if (!entity.hasComponent(componentClass)) { entity.addComponent(deserializeComponent(componentData)); } else { deserializeComponentOnto(entity.getComponent(componentClass), componentData); } } return entity; }
@Override public void deserializeWorld(EntityData.World world) { entityManager.setNextId(world.getNextEntityId()); for (Integer deadId : world.getFreedEntityIdList()) { entityManager.getFreedIds().add(deadId); } for (EntityData.Prefab prefabData : world.getPrefabList()) { if (!prefabManager.exists(prefabData.getName())) { deserializePrefab(prefabData); } } for (int index = 0; index < world.getComponentClassCount(); ++index) { ComponentMetadata componentMetadata = componentLibrary.getMetadata(world.getComponentClass(index)); if (componentMetadata != null) { componentIdTable.put(index, componentMetadata.getType()); } } for (EntityData.Entity entityData : world.getEntityList()) { deserializeEntity(entityData); } }
@Override public EntityData.Entity serializeEntity(EntityRef entityRef) { EntityInfoComponent entityInfo = entityRef.getComponent(EntityInfoComponent.class); if (entityInfo != null) { if (entityInfo.parentPrefab != null && prefabManager.exists(entityInfo.parentPrefab)) { return serializeEntityDelta(entityRef, prefabManager.getPrefab(entityInfo.parentPrefab)); } } return serializeEntityFull(entityRef); }