Esempio n. 1
0
        public WaypointMinHeap(Waypoint root) : this()
        {
            WaypointMinHeapNode node = new WaypointMinHeapNode(root);

            minHeap.Add(node);
            waypointToNodeMap.Add(root, node);
        }
 public WaypointMinHeapNode setPredecessor(WaypointMinHeapNode predecessorNode)
 {
     this.predecessorNode = predecessorNode;
     if (predecessorNode != null)
     {
         pathLength = predecessorNode.pathLength + (waypoint.transform.position - predecessorNode.waypoint.transform.position).magnitude;
     }
     return(this);
 }
Esempio n. 3
0
        private WaypointMinHeapNode add(Waypoint waypoint, WaypointMinHeapNode predecessorNode)
        {
            // create new node
            WaypointMinHeapNode node = new WaypointMinHeapNode(waypoint, predecessorNode);

            // add node to map
            waypointToNodeMap[waypoint] = node;
            minHeap.Add(node);
            bubbleUp(node);
            return(node);
        }
Esempio n. 4
0
 public WaypointMinHeapNode getFirst()
 {
     if (minHeap.Count > 0)
     {
         WaypointMinHeapNode node = (WaypointMinHeapNode)minHeap[0];
         minHeap.RemoveAt(0);
         return(node);
     }
     else
     {
         return(null);
     }
 }
Esempio n. 5
0
        private void bubbleUp(WaypointMinHeapNode node)
        {
            int currIdx   = minHeap.IndexOf(node);
            int parentIdx = getParentIndex(currIdx);

            // termination condition
            if (parentIdx < 0)
            {
                return;
            }

            WaypointMinHeapNode parentNode = (WaypointMinHeapNode)minHeap[parentIdx];

            if (parentNode.pathLength > node.pathLength)
            {
                swap(currIdx, parentIdx);
                bubbleUp(node);
            }
        }
Esempio n. 6
0
 public WaypointMinHeapNode update(Waypoint waypoint, WaypointMinHeapNode predecessorNode)
 {
     // if waypoint was not added already, add it
     if (!contains(waypoint))
     {
         return(add(waypoint, predecessorNode));
     }
     else
     // otherwise find corresponding node and update it
     {
         float pathLength         = predecessorNode.pathLength + (waypoint.transform.position - predecessorNode.waypoint.transform.position).magnitude;
         WaypointMinHeapNode node = waypointToNodeMap[waypoint];
         if (pathLength < node.pathLength)
         {
             node.setPredecessor(predecessorNode);
             bubbleUp(node);
         }
         return(node);
     }
 }
 public WaypointMinHeapNode(Waypoint waypoint, WaypointMinHeapNode predecessorNode)
 {
     this.waypoint = waypoint;
     setPredecessor(predecessorNode);
 }