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(); }
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); } }
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); } }
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); } }
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); } }
public void Execute(int index) { var bucketA = layerA.GetBucketSlices(index); var bucketB = layerB.GetBucketSlices(index); BipartiteSweep(bucketA, bucketB, processor); }
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); } }
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); } } }
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); } }
public void Execute(int index) { var bucket = layer.GetBucketSlices(index); SelfSweep(bucket, processor); }