use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class GlobalStoreBuilder method build.
public EntityData.GlobalStore build(EngineEntityManager entityManager, Iterable<EntityRef> entities) {
EntityData.GlobalStore.Builder store = EntityData.GlobalStore.newBuilder();
Map<Class<? extends Component>, Integer> componentIdTable = Maps.newHashMap();
for (ComponentMetadata<?> componentMetadata : entityManager.getComponentLibrary().iterateComponentMetadata()) {
store.addComponentClass(componentMetadata.getUri().toString());
componentIdTable.put(componentMetadata.getType(), componentIdTable.size());
}
prefabSerializer.setComponentIdMapping(componentIdTable);
/*
* The prefabs can't be obtained from entityManager.getPrefabManager().listPrefabs() as that might not
* be thread save.
*/
Set<Prefab> prefabsRequiredForEntityStorage = new HashSet<>();
for (EntityRef entityRef : entityManager.getAllEntities()) {
Prefab prefab = entityRef.getParentPrefab();
if (prefab != null) {
prefabsRequiredForEntityStorage.add(prefab);
}
}
for (Prefab prefab : prefabsRequiredForEntityStorage) {
store.addPrefab(prefabSerializer.serialize(prefab));
}
EntitySerializer entitySerializer = new EntitySerializer(entityManager);
entitySerializer.setComponentIdMapping(componentIdTable);
for (EntityRef entity : entities) {
if (entity.isPersistent()) {
store.addEntity(entitySerializer.serialize(entity));
}
}
store.setNextEntityId(nextEntityId);
return store.build();
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class PojoEntityRef method toString.
@Override
public String toString() {
Prefab parent = getParentPrefab();
StringBuilder builder = new StringBuilder();
builder.append("EntityRef{id = ");
builder.append(id);
NetworkComponent networkComponent = getComponent(NetworkComponent.class);
if (networkComponent != null) {
builder.append(", netId = ");
builder.append(networkComponent.getNetworkId());
}
if (parent != null) {
builder.append(", prefab = '");
builder.append(parent.getUrn());
builder.append("'");
}
builder.append("}");
return builder.toString();
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class AutoCreateSystem method postBegin.
@Override
public void postBegin() {
Set<Prefab> existingGlobals = Sets.newHashSet();
NetworkMode mode = networkSystem.getMode();
for (EntityRef entity : entityManager.getEntitiesWith(AutoCreateComponent.class)) {
existingGlobals.add(entity.getParentPrefab());
}
for (Prefab prefab : prefabManager.listPrefabs(AutoCreateComponent.class)) {
AutoCreateComponent comp = prefab.getComponent(AutoCreateComponent.class);
if (!existingGlobals.contains(prefab) && (comp.createClientSide || mode.isAuthority())) {
entityManager.create(prefab);
}
}
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class BehaviorNodeFactory method refreshPrefabs.
private void refreshPrefabs() {
Collection<Prefab> prefabs = prefabManager.listPrefabs(BehaviorNodeComponent.class);
if (prefabs.size() == 0) {
// called from main menu
List<String> nodes = Arrays.asList("counter", "timer", "loop", "lookup", "dynselector", "fail", "parallel", "playMusic", "playSound", "running", "selector", "setAnimation", "sequence", "succeed");
prefabs = Lists.newArrayList();
for (String node : nodes) {
prefabs.add(Assets.get(new ResourceUrn("engine:" + node), Prefab.class).orElse(null));
}
}
for (Prefab prefab : prefabs) {
EntityBuilder entityBuilder = entityManager.newBuilder(prefab);
entityBuilder.setPersistent(false);
EntityRef entityRef = entityBuilder.build();
BehaviorNodeComponent component = entityRef.getComponent(BehaviorNodeComponent.class);
addToCategory(component);
nodeComponents.add(component);
}
}
use of org.terasology.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.
the class LocalChunkProviderTest method testCompleteUpdateGeneratesStoredEntitiesFromPrefab.
@Test
public void testCompleteUpdateGeneratesStoredEntitiesFromPrefab() throws Exception {
final Chunk chunk = mockChunkAt(0, 0, 0);
final Prefab prefab = mock(Prefab.class);
final ChunkProviderTestComponent testComponent = new ChunkProviderTestComponent();
final EntityStore entityStore = createEntityStoreWithPrefabAndComponents(prefab, testComponent);
final List<EntityStore> entityStores = Collections.singletonList(entityStore);
final ReadyChunkInfo readyChunkInfo = ReadyChunkInfo.createForNewChunk(chunk, new TShortObjectHashMap<>(), entityStores);
when(chunkFinalizer.completeFinalization()).thenReturn(readyChunkInfo);
final EntityRef mockEntity = mock(EntityRef.class);
when(entityManager.create(any(Prefab.class))).thenReturn(mockEntity);
chunkProvider.completeUpdate();
verify(entityManager).create(eq(prefab));
verify(mockEntity).addComponent(eq(testComponent));
}
Aggregations