private void ProcessEntity(int index, Entity entity, Collider collider, RigidTransform rigidTransform) { Aabb aabb = Physics.CalculateAabb(collider, rigidTransform); colliderAoS[index] = new ColliderAoSData { collider = collider, rigidTransform = rigidTransform, aabb = aabb, entity = entity }; xmins[index] = aabb.min.x; int3 minBucket = math.int3(math.floor((aabb.min - layer.worldMin) / layer.worldAxisStride)); int3 maxBucket = math.int3(math.floor((aabb.max - layer.worldMin) / layer.worldAxisStride)); minBucket = math.clamp(minBucket, 0, layer.worldSubdivisionsPerAxis - 1); maxBucket = math.clamp(maxBucket, 0, layer.worldSubdivisionsPerAxis - 1); if (math.all(minBucket == maxBucket)) { layerIndices[index] = (minBucket.x * layer.worldSubdivisionsPerAxis.y + minBucket.y) * layer.worldSubdivisionsPerAxis.z + minBucket.z; } else { layerIndices[index] = layer.bucketStartsAndCounts.Length - 1; } }
public void Execute(int i) { var aabb = Physics.CalculateAabb(colliderBodies[i].collider, colliderBodies[i].transform); aabbs[i] = aabb; xmins[i] = aabb.min.x; int3 minBucket = math.int3(math.floor((aabb.min - layer.worldMin) / layer.worldAxisStride)); int3 maxBucket = math.int3(math.floor((aabb.max - layer.worldMin) / layer.worldAxisStride)); minBucket = math.clamp(minBucket, 0, layer.worldSubdivisionsPerAxis - 1); maxBucket = math.clamp(maxBucket, 0, layer.worldSubdivisionsPerAxis - 1); if (math.all(minBucket == maxBucket)) { layerIndices[i] = (minBucket.x * layer.worldSubdivisionsPerAxis.y + minBucket.y) * layer.worldSubdivisionsPerAxis.z + minBucket.z; } else { layerIndices[i] = layer.bucketStartsAndCounts.Length - 1; } }