void Update() { Fix64Vec2 center = (Fix64Vec2)transform.position; Fix64 radius = (Fix64)circleRadius; Parallel2D.OverlapCircle(center, radius, layerMask, result); }
// Update is called once per frame void Update() { transform.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime); bool hit = false; Fix64Vec3 start = (Fix64Vec3)transform.position; Fix64Vec3 movement = (Fix64)castRange * (Fix64Vec3)transform.right; Fix64 radius = (Fix64)circleRadius; Fix64Vec3 end = start + movement; hit = Parallel2D.CircleCast((Fix64Vec2)start, radius, (Fix64Vec2)movement, layerMask, ref hitInfo); if (hit) { castPoint = hitInfo.point; castNormal = hitInfo.normal; circleHitPosition = (Fix64Vec2)(start + hitInfo.fraction * movement); } else { castPoint = (Fix64Vec2)end; castNormal = Fix64Vec2.zero; circleHitPosition = castPoint; } }
public static void ParForGPU(ushort[] output, ushort[] input, int width, int height) { Parallel2D.For(window, width - window, window, height - window, (i, j) => { var buffer = new StackArray <ushort>(windowCount * windowCount); for (int k = -window; k <= window; ++k) { for (int p = -window; p <= window; ++p) { int bufferIndex = (k + window) * windowCount + p + window; int pixelIndex = (j + k) * width + (i + p); buffer[bufferIndex] = input[pixelIndex]; } } // sort buffer using StaticSort <...> output[j * width + i] = buffer[(windowCount * windowCount) / 2]; });
// Update is called once per frame void Update() { transform.Rotate(Vector3.forward * rotateSpeed * Time.deltaTime); PRaycastHit2D raycastHit2D; bool hit = false; Fix64Vec2 start = (Fix64Vec2)transform.position; Fix64Vec2 end = start + (Fix64)raycastLength * (Fix64Vec2)transform.right; hit = Parallel2D.RayCast(start, end, layerMask, out raycastHit2D); if (hit) { raycastPoint = raycastHit2D.point; raycastNormal = raycastHit2D.normal; } else { raycastPoint = end; } }