private static void TryCreateViewEntity(SimAssetBank.JobLookup simAssetBank, EntityCommandBuffer ecb, Entity simEntity, SimAssetId simAssetId, EntityArchetype tileArchetype, EntityArchetype gameObjectArchetype)
 {
     if (simAssetBank.TryGetViewTechType(simAssetId, out ViewTechType viewTechType))
     {
         var    archetype  = viewTechType == ViewTechType.Tile ? tileArchetype : gameObjectArchetype;
         Entity viewEntity = ecb.CreateEntity(archetype);
         ecb.SetComponent(viewEntity, (BindedSimEntity)simEntity);
         ecb.SetComponent(viewEntity, simAssetId);
     }
 }
    private void UpdateViewEntities(SimAssetBank.JobLookup simAssetBank, EntityQuery simEntityQuery)
    {
        if (simEntityQuery.IsEmpty)
        {
            return;
        }

        EntityCommandBuffer                  ecb                     = _ecb.CreateCommandBuffer();
        NativeArray <Entity>                 simEntities             = simEntityQuery.ToEntityArrayAsync(Allocator.TempJob, out JobHandle job1);
        NativeArray <SimAssetId>             simAssetIds             = simEntityQuery.ToComponentDataArrayAsync <SimAssetId>(Allocator.TempJob, out JobHandle job2);
        EntityArchetype                      viewArchetypeTile       = _viewArchetypeTile;
        EntityArchetype                      viewArchetypeGameObject = _viewArchetypeGameObject;
        NativeHashMap <Entity, Entity>       sim2ViewMap             = _sim2ViewMap;
        ComponentDataFromEntity <SimAssetId> viewSimAssetIds         = GetComponentDataFromEntity <SimAssetId>(isReadOnly: true);

        var jobHandle = Job.WithCode(() =>
        {
            for (int i = 0; i < simEntities.Length; i++)
            {
                SimAssetId viewAssetId = SimAssetId.Invalid;
                SimAssetId simAssetId  = simAssetIds[i];
                Entity simEntity       = simEntities[i];

                if (sim2ViewMap.TryGetValue(simEntity, out Entity viewEntity))
                {
                    if (viewSimAssetIds.HasComponent(viewEntity))
                    {
                        viewAssetId = viewSimAssetIds[viewEntity];
                    }
                }

                if (viewAssetId != simAssetId)
                {
                    if (viewEntity != Entity.Null)
                    {
                        ecb.DestroyEntity(viewEntity);
                    }
                    TryCreateViewEntity(simAssetBank, ecb, simEntities[i], simAssetId, viewArchetypeTile, viewArchetypeGameObject);
                }
            }
        })
                        .WithReadOnly(sim2ViewMap)
                        .WithReadOnly(viewSimAssetIds)
                        .WithDisposeOnCompletion(simAssetIds)
                        .WithDisposeOnCompletion(simEntities)
                        .Schedule(JobHandle.CombineDependencies(Dependency, job1, job2));

        Dependency = jobHandle;
    }