Exemplo n.º 1
0
 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());
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
                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());
                        }
                }
Exemplo n.º 4
0
    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");
        }
    }