Ejemplo n.º 1
0
        /// <summary>
        /// Builds a lookup of <see cref="NativeMultiHashMap{TEntityGuidComponent, Entity}"/> for the target world.
        /// </summary>
        /// <remarks>
        /// This will run over ALL entities in the world. This is very expensive.
        /// </remarks>
        private static void BuildEntityLookups(
            EntityManager entityManager,
            EntityQuery entityQuery,
            NativeMultiHashMap <EntityGuid, Entity> entityGuidToEntity,
            NativeHashMap <Entity, EntityGuid> entityToEntityGuid)
        {
            var buildEntityGuidToEntity = new BuildComponentToEntityMultiHashMap <EntityGuid>
            {
                EntityType        = entityManager.GetArchetypeChunkEntityType(),
                ComponentType     = entityManager.GetArchetypeChunkComponentType <EntityGuid>(true),
                ComponentToEntity = entityGuidToEntity.AsParallelWriter()
            }.Schedule(entityQuery);

            var buildEntityToEntityGuid = new BuildEntityToComponentHashMap <EntityGuid>
            {
                EntityType = entityManager.GetArchetypeChunkEntityType(),
                EntityGuidComponentType = entityManager.GetArchetypeChunkComponentType <EntityGuid>(true),
                EntityToEntityGuid      = entityToEntityGuid.AsParallelWriter()
            }.Schedule(entityQuery);

            JobHandle.CombineDependencies(buildEntityGuidToEntity, buildEntityToEntityGuid).Complete();
        }
Ejemplo n.º 2
0
        private static void BuildPrefabAndLinkedEntityGroupLookups(
            EntityManager entityManager,
            EntityQuery entityQuery,
            EntityQuery prefabQuery,
            EntityQuery linkedEntityGroupQuery,
            NativeHashMap <EntityGuid, Entity> entityGuidToPrefab,
            NativeHashMap <Entity, Entity> entityToLinkedEntityGroupRoot)
        {
            var buildPrefabLookups = new BuildComponentToEntityHashMap <EntityGuid>
            {
                EntityType        = entityManager.GetArchetypeChunkEntityType(),
                ComponentType     = entityManager.GetArchetypeChunkComponentType <EntityGuid>(true),
                ComponentToEntity = entityGuidToPrefab.AsParallelWriter()
            }.Schedule(prefabQuery);

            var buildLinkedEntityGroupLookups = new BuildLinkedEntityGroupHashMap
            {
                EntityToLinkedEntityGroupRoot = entityToLinkedEntityGroupRoot.AsParallelWriter(),
                LinkedEntityGroupType         = entityManager.GetArchetypeChunkBufferType <LinkedEntityGroup>(true)
            }.Schedule(linkedEntityGroupQuery);

            JobHandle.CombineDependencies(buildPrefabLookups, buildLinkedEntityGroupLookups).Complete();
        }
Ejemplo n.º 3
0
 public ArchetypeChunkComponentType <T> GetArchetypeChunkComponentType <T>(bool isReadOnly = false) where T : struct, IComponentData
 {
     AddReaderWriter(isReadOnly ? ComponentType.ReadOnly <T>() : ComponentType.ReadWrite <T>());
     return(EntityManager.GetArchetypeChunkComponentType <T>(isReadOnly));
 }