Search in sources :

Example 26 with Prefab

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();
}
Also used : Component(org.terasology.entitySystem.Component) Prefab(org.terasology.entitySystem.prefab.Prefab) EntityRef(org.terasology.entitySystem.entity.EntityRef) HashSet(java.util.HashSet) EntitySerializer(org.terasology.persistence.serializers.EntitySerializer)

Example 27 with Prefab

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();
}
Also used : NetworkComponent(org.terasology.network.NetworkComponent) Prefab(org.terasology.entitySystem.prefab.Prefab)

Example 28 with Prefab

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);
        }
    }
}
Also used : NetworkMode(org.terasology.network.NetworkMode) Prefab(org.terasology.entitySystem.prefab.Prefab) EntityRef(org.terasology.entitySystem.entity.EntityRef)

Example 29 with 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);
    }
}
Also used : EntityBuilder(org.terasology.entitySystem.entity.EntityBuilder) ResourceUrn(org.terasology.assets.ResourceUrn) Prefab(org.terasology.entitySystem.prefab.Prefab) EntityRef(org.terasology.entitySystem.entity.EntityRef)

Example 30 with Prefab

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));
}
Also used : ReadyChunkInfo(org.terasology.world.chunks.internal.ReadyChunkInfo) EntityStore(org.terasology.entitySystem.entity.EntityStore) Chunk(org.terasology.world.chunks.Chunk) Prefab(org.terasology.entitySystem.prefab.Prefab) EntityRef(org.terasology.entitySystem.entity.EntityRef) Test(org.junit.Test)

Aggregations

Prefab (org.terasology.entitySystem.prefab.Prefab)49 PojoPrefab (org.terasology.entitySystem.prefab.internal.PojoPrefab)20 PrefabData (org.terasology.entitySystem.prefab.PrefabData)13 Test (org.junit.Test)11 ResourceUrn (org.terasology.assets.ResourceUrn)9 Component (org.terasology.entitySystem.Component)9 EntityRef (org.terasology.entitySystem.entity.EntityRef)9 ModuleAwareAssetTypeManager (org.terasology.assets.module.ModuleAwareAssetTypeManager)7 ContextImpl (org.terasology.context.internal.ContextImpl)6 ModuleManager (org.terasology.engine.module.ModuleManager)6 StringComponent (org.terasology.entitySystem.stubs.StringComponent)6 Command (org.terasology.logic.console.commandSystem.annotations.Command)6 ClientComponent (org.terasology.network.ClientComponent)6 Before (org.junit.Before)5 EntityBuilder (org.terasology.entitySystem.entity.EntityBuilder)5 NetworkComponent (org.terasology.network.NetworkComponent)5 BeforeClass (org.junit.BeforeClass)4 NetworkSystem (org.terasology.network.NetworkSystem)4 EngineEntityManager (org.terasology.entitySystem.entity.internal.EngineEntityManager)3 AssetManager (org.terasology.assets.management.AssetManager)2