Example #1
0
        protected override JobHandle OnUpdate(JobHandle jobs)
        {
            if (viewCmdStack.Count > 0)
            {
                return(jobs);
            }

            if (patternMatchRequest.IsCreated)
            {
                unswap.Clear();
            }

            var blocksToDelete = new NativeArray <int>(100, Allocator.TempJob);
            var jobCmdBuffer   = cmdBuffer.CreateCommandBuffer().ToConcurrent();

            var swapTestJob = new SwapTest()
            {
                level               = EntityManager.GetBuffer <Level>(levelEntity),
                levelInfo           = levelInfo,
                cmdBuff             = jobCmdBuffer,
                patternMatchRequest = patternMatchRequest.ToConcurrent(),
                viewCmdStack        = viewCmdStack.ToConcurrent()
            };

            var patternMatching = new PatternMatching()
            {
                patternsBufferLookup = GetBufferFromEntity <Pattern>(isReadOnly: true),
                patternMatchRequest  = patternMatchRequest,
                patternsInfo         = patterns,
                levelBufferLookup    = GetBufferFromEntity <Level>(isReadOnly: true),
                levelInfo            = levelInfo,
                blocksToDelete       = blocksToDelete,
                unswap = unswap.ToConcurrent()
            };

            var performSwap = new PerformSwap()
            {
                level        = EntityManager.GetBuffer <Level>(levelEntity),
                levelInfo    = levelInfo,
                unswap       = unswap,
                cmdBuffer    = jobCmdBuffer,
                viewCmdStack = viewCmdStack.ToConcurrent()
            };

            var deleteBlocks = new DeleteBlock()
            {
                blocksToDelete    = blocksToDelete,
                levelBufferLookup = GetBufferFromEntity <Level>(isReadOnly: false),
                levelInfo         = levelInfo,
                cmdBuffer         = jobCmdBuffer,
                viewCmdStack      = viewCmdStack.ToConcurrent()
            };

            var moveDownBlocks = new MoveDownBlocks()
            {
                levelInfo           = levelInfo,
                levelBufferLookup   = GetBufferFromEntity <Level>(isReadOnly: false),
                viewCmdStack        = viewCmdStack.ToConcurrent(),
                patternMatchRequest = patternMatchRequest.ToConcurrent()
            };

            jobs = swapTestJob.Schedule(this, jobs);
            jobs = patternMatching.Schedule(jobs);
            jobs = performSwap.Schedule(this, jobs);
            jobs = deleteBlocks.Schedule(blocksToDelete.Length, 2, jobs);
            jobs = moveDownBlocks.Schedule(levelInfo.size.x, 2, jobs);

            return(jobs);
        }