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; }