public static JobHandle Schedule(NavigationGrid grid, ulong flags, BurstBoxCollider box) { return(new SetFlagsInBox { Flags = flags, Array = grid.InnerGrid, ViewData = grid.Data, ToGridLocalMatrix = grid.Transform.ToLocalMatrix, ToGridWorldMatrix = grid.Transform.ToWorldMatrix, Box = box, }.Schedule()); }
public static void DrawWireFrame(BurstBoxCollider obb) { Gizmos.DrawLine(obb.V1, obb.V3); Gizmos.DrawLine(obb.V1, obb.V2); Gizmos.DrawLine(obb.V3, obb.V4); Gizmos.DrawLine(obb.V2, obb.V4); Gizmos.DrawLine(obb.V1, obb.V5); Gizmos.DrawLine(obb.V2, obb.V6); Gizmos.DrawLine(obb.V3, obb.V7); Gizmos.DrawLine(obb.V4, obb.V8); Gizmos.DrawLine(obb.V5, obb.V7); Gizmos.DrawLine(obb.V5, obb.V6); Gizmos.DrawLine(obb.V7, obb.V8); Gizmos.DrawLine(obb.V8, obb.V6); }
public static int[] Run(NavigationGrid grid, ulong flags, BurstBoxCollider boxCollider, int[] trackedIndices) { if (trackedIndices == null) { trackedIndices = new int[0]; } using (var previousIndices = new NativeArray <int>(trackedIndices, Allocator.TempJob)) using (var resultIndices = new NativeIndexList <GridNode>(grid.InnerGrid.Internal, Allocator.TempJob)) { new SetFlagsInBoxDiff { Flags = flags, SourceGrid = grid.InnerGrid, ViewData = grid.Data, ToGridLocalMatrix = grid.Transform.ToLocalMatrix, ToGridWorldMatrix = grid.Transform.ToWorldMatrix, Box = boxCollider, PreviouslyTrackedIndices = previousIndices, TrackedIndicesResult = resultIndices, }.Schedule().Complete(); return(resultIndices.IndicesToArray()); } }
void Update() { if (!ExecuteInEditMode && !Application.isPlaying) { return; } if (GridManager == null || !GridManager.IsValid) { return; } if (!isActiveAndEnabled || !transform.hasChanged) { return; } Box = BurstColliderFactory.CreateBox(transform); if (LogPerformance) { _stopwatch.Restart(); } var box = BurstColliderFactory.CreateBox(Collider as BoxCollider); _closestNodeToCenter = GridManager.Grid.FindClosestNode(Box.Center); _nodesInRange.Clear(); _touchedNodes.Clear(); if (GridManager.Grid.CollidesWithNode(Collider, _closestNodeToCenter, out float gapDistance, out Vector3 pointOnCollider)) { //var scanDistance = 1 + (int) Math.Round((Collider.bounds.size.x / 2f) - gapDistance, MidpointRounding.AwayFromZero); //var boxWorldMin = Box.Center - Box.Min; //var boxWorldMax = Box.Center - Box.Max; //var a = math.transform(Box.ToWorldMatrix, Box.Min); //var b = math.transform(Box.ToWorldMatrix, Box.Max); //DebugExtension.DebugWireSphere(a, Color.yellow, 0.1f); //DebugExtension.DebugWireSphere(b, Color.yellow, 0.1f); //var minNode = GridManager.Grid.FindClosestNode(Box.Bounds.min); //var maxNode = GridManager.Grid.FindClosestNode(Box.Bounds.max); //var debug1 = GridManager.Grid.ToWorldPosition(minNode.Center); //var debug2 = GridManager.Grid.ToWorldPosition(maxNode.Center); //DebugExtension.DebugWireSphere(debug1, Color.red, 0.1f); //DebugExtension.DebugWireSphere(debug2, Color.red, 0.1f); //var sw = Stopwatch.StartNew(); _trackedIndices = GridNodeJobs.AllNodes.IntersectionDiff.SetFlagsInBoxDiff.Run(GridManager.Grid, (ulong)AddFlags, box, _trackedIndices); //sw.Stop(); //Debug.Log($"Took: {sw.Elapsed.TotalMilliseconds:N8} ms"); } }