protected override JobHandle OnUpdate(JobHandle inputDeps) { var job = new CollisionEventSystemJob(); job.bulletRef = GetComponentDataFromEntity <BulletComponent>(isReadOnly: false); job.healthRef = GetComponentDataFromEntity <HealthComponent>(isReadOnly: false); var jobResult = job.Schedule(stepPhysicsWorld.Simulation, ref buildPhysicsWorldSystem.PhysicsWorld, inputDeps); var commandBuffer = endSimulationCommandBuffer.CreateCommandBuffer().AsParallelWriter(); var result = Entities.ForEach((Entity entity, int entityInQueryIndex, ref BulletComponent bullet) => { if (bullet.destroyed) { commandBuffer.DestroyEntity(entityInQueryIndex, entity); } }).Schedule(jobResult); endSimulationCommandBuffer.AddJobHandleForProducer(result); return(result); }
protected override JobHandle OnUpdate(JobHandle inputDeps) { // параллельная работа, которая проходит по всем триггерам; var job = new CollisionEventSystemJob(); job.HealthRef = GetComponentDataFromEntity <HealthComponent>(isReadOnly: false); job.MagicFireRef = GetComponentDataFromEntity <MagicFireComponent>(isReadOnly: false); var jobResult = job.Schedule(_step.Simulation, ref _world.PhysicsWorld, inputDeps); var commandBuffer = _endSimulationEntityCommandBufferSystem.CreateCommandBuffer().AsParallelWriter(); // собираем команды на удаление Entity магических снарядов, которые были уничтожены; var result = Entities.ForEach((Entity entity, int entityInQueryIndex, ref MagicFireComponent magicFire) => { if (magicFire.Destroyed) { commandBuffer.DestroyEntity(entityInQueryIndex, entity); } }).Schedule(jobResult); // настройка зависимостей; _endSimulationEntityCommandBufferSystem.AddJobHandleForProducer(result); return(result); }