コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }