protected override JobHandle OnUpdate(JobHandle inputDeps) { var closestTargets = new NativeArray <Entity>(_noTargetHeroes.CalculateEntityCount(), Allocator.TempJob); var targetJob = new TargetJob { targetEntities = _targetGroup.ToEntityArray(Allocator.TempJob), targetTranslations = _targetGroup.ToComponentDataArray <Translation>(Allocator.TempJob), closestTargets = closestTargets }; var addTargetJob = new AddTargetJob { closestTargets = closestTargets, commandBuffer = _endSimulationEntityCommandBufferSystem.CreateCommandBuffer().ToConcurrent() }; var jobHandle = targetJob.Schedule(this, inputDeps); var addTargetHandle = addTargetJob.Schedule(this, jobHandle); _endSimulationEntityCommandBufferSystem.AddJobHandleForProducer(addTargetHandle); return(addTargetHandle); }
protected override JobHandle OnUpdate(JobHandle inputDeps) { var targetCount = m_TargetGroup.CalculateLength(); if (m_Capacity < targetCount) { if (m_NodeMap.IsCreated) { m_NodeMap.Dispose(); } if (m_TranslationMap.IsCreated) { m_TranslationMap.Dispose(); } m_Capacity = math.max(100, targetCount + targetCount >> 1); m_NodeMap = new NativeMultiHashMap <int2, Entity>(m_Capacity, Allocator.Persistent); m_TranslationMap = new NativeHashMap <Entity, float3>(m_Capacity, Allocator.Persistent); } else { m_NodeMap.Clear(); m_TranslationMap.Clear(); } var count = m_Group.CalculateLength(); if (count > 0) { var entityArray = new NativeArray <Entity>(count, Allocator.TempJob); var targetEntityArray = new NativeArray <Entity>(count, Allocator.TempJob); var engagedArray = new NativeArray <@bool>(count, Allocator.TempJob); var commandBufferSystem = World.GetExistingManager <BeginSimulationEntityCommandBufferSystem>(); var commandBuffer = commandBufferSystem.CreateCommandBuffer(); inputDeps = new ConsolidateNodesJob { NodeMap = m_NodeMap.ToConcurrent(), TranslationMap = m_TranslationMap.ToConcurrent(), NodeSize = NodeSize }.Schedule(this, inputDeps); inputDeps = new EngageNearestTargetJob { NodeMap = m_NodeMap, TranslationMap = m_TranslationMap, EntityArray = entityArray, TargetArray = targetEntityArray, EngagedArray = engagedArray, TargetFromEntity = GetComponentDataFromEntity <Target>(), FactionFromEntity = GetComponentDataFromEntity <Faction>(true), DeadFromEntity = GetComponentDataFromEntity <Dead>(true), NodeSize = NodeSize }.Schedule(this, inputDeps); inputDeps = new AddTargetJob { CommandBuffer = commandBuffer.ToConcurrent(), EntityArray = entityArray, TargetArray = targetEntityArray, EngagedArray = engagedArray, TargetFromEntity = GetComponentDataFromEntity <Target>() }.Schedule(count, 64, inputDeps); commandBufferSystem.AddJobHandleForProducer(inputDeps); } return(inputDeps); }