Exemplo n.º 1
0
 public void Execute(int index)
 {
     if (index == 0)
     {
         var crossBucket = layerA.GetBucketSlices(layerA.BucketCount - 1);
         for (int i = 0; i < layerB.BucketCount - 1; i++)
         {
             var bucket = layerB.GetBucketSlices(i);
             BipartiteSweep(crossBucket, bucket, layerA.BucketCount + i, processor);
         }
     }
     else if (index == 1)
     {
         var crossBucket = layerB.GetBucketSlices(layerB.BucketCount - 1);
         for (int i = 0; i < layerA.BucketCount - 1; i++)
         {
             var bucket = layerA.GetBucketSlices(i);
             BipartiteSweep(bucket, crossBucket, layerA.BucketCount + layerB.BucketCount + i, processor);
         }
     }
     else
     {
         EntityAliasCheck(layerA, layerB);
     }
 }
        public static void DrawLayer(CollisionLayer layer)
        {
            var colors = new NativeArray <Color>(7, Allocator.TempJob);

            colors[0] = Color.red;
            colors[1] = Color.green;
            colors[2] = Color.blue;
            colors[3] = Color.cyan;
            colors[4] = Color.yellow;
            colors[5] = Color.magenta;
            colors[6] = Color.black;
            var crossColor = Color.white;

            for (int bucketI = 0; bucketI < layer.BucketCount - 1; bucketI++)
            {
                Color choiceColor = colors[bucketI % 7];
                var   slices      = layer.GetBucketSlices(bucketI);
                for (int i = 0; i < slices.count; i++)
                {
                    Aabb aabb = new Aabb(new float3(slices.xmins[i], slices.yzminmaxs[i].xy), new float3(slices.xmaxs[i], slices.yzminmaxs[i].zw));
                    DrawAabb(aabb, choiceColor);
                }
            }
            {
                var slices = layer.GetBucketSlices(layer.BucketCount - 1);
                for (int i = 0; i < slices.count; i++)
                {
                    Aabb aabb = new Aabb(new float3(slices.xmins[i], slices.yzminmaxs[i].xy), new float3(slices.xmaxs[i], slices.yzminmaxs[i].zw));
                    DrawAabb(aabb, crossColor);
                }
            }
            colors.Dispose();
        }
Exemplo n.º 3
0
        public static void RunImmediate <T>(CollisionLayer layerA, CollisionLayer layerB, T processor) where T : struct, IFindPairsProcessor
        {
            for (int i = 0; i < layerA.BucketCount; i++)
            {
                var bucketA = layerA.GetBucketSlices(i);
                var bucketB = layerB.GetBucketSlices(i);
                BipartiteSweep(bucketA, bucketB, processor);
            }

            var crossBucketA = layerA.GetBucketSlices(layerA.BucketCount - 1);

            for (int i = 0; i < layerA.BucketCount - 1; i++)
            {
                var bucket = layerB.GetBucketSlices(i);
                BipartiteSweep(crossBucketA, bucket, processor);
            }

            var crossBucketB = layerB.GetBucketSlices(layerB.BucketCount - 1);

            for (int i = 0; i < layerA.BucketCount - 1; i++)
            {
                var bucket = layerA.GetBucketSlices(i);
                BipartiteSweep(bucket, crossBucketB, processor);
            }
        }
Exemplo n.º 4
0
            public static void RunImmediate(CollisionLayer layerA, CollisionLayer layerB, T processor)
            {
                int jobIndex = 0;

                for (int i = 0; i < layerA.BucketCount; i++)
                {
                    var bucketA = layerA.GetBucketSlices(i);
                    var bucketB = layerB.GetBucketSlices(i);
                    BipartiteSweep(bucketA, bucketB, jobIndex++, processor);
                }

                var crossBucketA = layerA.GetBucketSlices(layerA.BucketCount - 1);

                for (int i = 0; i < layerA.BucketCount - 1; i++)
                {
                    var bucket = layerB.GetBucketSlices(i);
                    BipartiteSweep(crossBucketA, bucket, jobIndex++, processor);
                }

                var crossBucketB = layerB.GetBucketSlices(layerB.BucketCount - 1);

                for (int i = 0; i < layerA.BucketCount - 1; i++)
                {
                    var bucket = layerA.GetBucketSlices(i);
                    BipartiteSweep(bucket, crossBucketB, jobIndex++, processor);
                }
            }
Exemplo n.º 5
0
            public void Execute()
            {
                var crossBucket = layer.GetBucketSlices(layer.BucketCount - 1);

                for (int i = 0; i < layer.BucketCount - 1; i++)
                {
                    var bucket = layer.GetBucketSlices(i);
                    BipartiteSweep(bucket, crossBucket, processor);
                }
            }
Exemplo n.º 6
0
 public void Execute(int i)
 {
     if (i < layer.BucketCount)
     {
         var bucket = layer.GetBucketSlices(i);
         SelfSweep(bucket, i, processor);
     }
     else
     {
         i -= layer.BucketCount;
         var bucket      = layer.GetBucketSlices(i);
         var crossBucket = layer.GetBucketSlices(layer.BucketCount - 1);
         BipartiteSweep(bucket, crossBucket, i + layer.BucketCount, processor);
     }
 }
Exemplo n.º 7
0
            public void Execute(int index)
            {
                var bucketA = layerA.GetBucketSlices(index);
                var bucketB = layerB.GetBucketSlices(index);

                BipartiteSweep(bucketA, bucketB, processor);
            }
Exemplo n.º 8
0
        public static void RunImmediate <T>(CollisionLayer layer, T processor) where T : struct, IFindPairsProcessor
        {
            int jobIndex = 0;

            for (int i = 0; i < layer.BucketCount; i++)
            {
                var bucket = layer.GetBucketSlices(i);
                SelfSweep(bucket, jobIndex++, processor);
            }

            var crossBucket = layer.GetBucketSlices(layer.BucketCount - 1);

            for (int i = 0; i < layer.BucketCount - 1; i++)
            {
                var bucket = layer.GetBucketSlices(i);
                BipartiteSweep(bucket, crossBucket, jobIndex++, processor);
            }
        }
Exemplo n.º 9
0
 public void Execute(int index)
 {
     if (index < layer.BucketCount - 1)
     {
         Color color  = colors[index % colors.Length];
         var   slices = layer.GetBucketSlices(index);
         for (int i = 0; i < slices.count; i++)
         {
             Aabb aabb = new Aabb(new float3(slices.xmins[i], slices.yzminmaxs[i].xy), new float3(slices.xmaxs[i], slices.yzminmaxs[i].zw));
             DrawAabb(aabb, color);
         }
     }
     else
     {
         Color color  = crossColor;
         var   slices = layer.GetBucketSlices(index);
         for (int i = 0; i < slices.count; i++)
         {
             Aabb aabb = new Aabb(new float3(slices.xmins[i], slices.yzminmaxs[i].xy), new float3(slices.xmaxs[i], slices.yzminmaxs[i].zw));
             DrawAabb(aabb, color);
         }
     }
 }
Exemplo n.º 10
0
 public void Execute(int i)
 {
     if (i < layerA.BucketCount)
     {
         var bucketA = layerA.GetBucketSlices(i);
         var bucketB = layerB.GetBucketSlices(i);
         BipartiteSweep(bucketA, bucketB, i, processor);
     }
     else if (i < 2 * layerB.BucketCount - 1)
     {
         i -= layerB.BucketCount;
         var bucket      = layerB.GetBucketSlices(i);
         var crossBucket = layerA.GetBucketSlices(layerA.BucketCount - 1);
         BipartiteSweep(crossBucket, bucket, i + layerB.BucketCount, processor);
     }
     else
     {
         var jobIndex = i;
         i -= (2 * layerB.BucketCount - 1);
         var bucket      = layerA.GetBucketSlices(i);
         var crossBucket = layerB.GetBucketSlices(layerB.BucketCount - 1);
         BipartiteSweep(bucket, crossBucket, jobIndex, processor);
     }
 }
Exemplo n.º 11
0
            public void Execute(int index)
            {
                var bucket = layer.GetBucketSlices(index);

                SelfSweep(bucket, processor);
            }