@Override
  public Prefab deserializePrefab(EntityData.Prefab prefabData, String packageContext) {
    String name = prefabData.getName();
    if (!prefabData.getName().startsWith(packageContext + ":")) {
      int existingPackageName = name.lastIndexOf(':');
      if (existingPackageName != -1) {
        name = name.substring(existingPackageName + 1);
      }
      name = packageContext + ":" + name;
    }

    Prefab prefab = prefabManager.createPrefab(name);
    for (String parentName : prefabData.getParentNameList()) {
      int packageSplit = parentName.indexOf(':');
      if (packageSplit == -1) {
        parentName = packageContext + ":" + parentName;
      }
      Prefab parent = prefabManager.getPrefab(parentName);

      if (parent == null) {
        logger.log(Level.SEVERE, "Missing parent prefab (need to fix parent serialization)");
      } else {
        prefab.addParent(parent);
      }
    }

    for (EntityData.Component componentData : prefabData.getComponentList()) {
      Component component = deserializeComponent(componentData);
      if (component != null) {
        prefab.setComponent(component);
      }
    }

    return prefab;
  }
  @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;
  }
Exemple #3
0
 /**
  * Ugly way to retrieve a name from a prefab
  *
  * @return a ":" seperated string, with name and flavor text.
  */
 public static String getName() {
   PrefabManager prefMan = CoreRegistry.get(PrefabManager.class);
   Prefab prefab = prefMan.getPrefab("miniion:nameslist");
   EntityRef namelist = CoreRegistry.get(EntityManager.class).create(prefab);
   namelist.hasComponent(namesComponent.class);
   namesComponent namecomp = namelist.getComponent(namesComponent.class);
   Random rand = new Random();
   return namecomp.namelist.get(rand.nextInt(namecomp.namelist.size()));
 }
 @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);
 }
  @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 Prefab deserializePrefab(EntityData.Prefab prefabData) {
   Prefab prefab = prefabManager.createPrefab(prefabData.getName());
   for (String parentName : prefabData.getParentNameList()) {
     Prefab parent = prefabManager.getPrefab(parentName);
     if (parent == null) {
       logger.log(Level.SEVERE, "Missing parent prefab (need to fix parent serialization)");
     } else {
       prefab.addParent(parent);
     }
   }
   for (EntityData.Component componentData : prefabData.getComponentList()) {
     Component component = deserializeComponent(componentData);
     if (component != null) {
       prefab.setComponent(component);
     }
   }
   return prefab;
 }
  @Override
  public EntityData.World serializeWorld() {
    final EntityData.World.Builder world = EntityData.World.newBuilder();
    writeIdInfo(world);

    if (isUsingLookupTables()) {
      writeComponentTypeTable(world);
    }

    for (Prefab prefab : prefabManager.listPrefabs()) {
      world.addPrefab(serializePrefab(prefab));
    }

    for (EntityRef entity : entityManager.iteratorEntities()) {
      world.addEntity(serializeEntity(entity));
    }
    return world.build();
  }