Public Function BE_AI_DIJKSTRA_PATHFIND(NodeSrc As Long, NodeDest As Long) As Boolean
'// find the path between 2 nodes
On Error GoTo Err
Dim i As Long, bRun As Boolean, CurrentVisitNumber As Long
Dim CurrNode As Long, LowestNodeFound As Long, LowestValFound As Double
If (NodeSrc = NodeDest) Then
'we are already there!
nPathList = 2
ReDim PathList(2) As Long
PathList(1) = NodeSrc
PathList(2) = NodeDest
BE_AI_DIJKSTRA_PATHFIND = True
Exit Function
End If
'setup data
For i = 0 To nNodes - 1
TreeNodeList(i).VisitNumber = -1
TreeNodeList(i).Distance = -1
TreeNodeList(i).TmpVar = 99999
Next i
'setup 1st var
TreeNodeList(NodeSrc).VisitNumber = 1
CurrentVisitNumber = 1
CurrNode = NodeSrc
TreeNodeList(NodeSrc).Distance = 0
TreeNodeList(NodeSrc).TmpVar = 0
Do While (Not bRun)
'go through each node the current node touches
If Not (TreeNodeList(CurrNode).NextNode(0) = -1) Then TreeNodeList(TreeNodeList(CurrNode).NextNode(0)).TmpVar = BE_AI_DIJKSTRA_MIN(TreeNodeList(CurrNode).Dist(0) + TreeNodeList(CurrNode).Distance, TreeNodeList(TreeNodeList(CurrNode).NextNode(0)).TmpVar / 1)
If Not (TreeNodeList(CurrNode).NextNode(1) = -1) Then TreeNodeList(TreeNodeList(CurrNode).NextNode(1)).TmpVar = BE_AI_DIJKSTRA_MIN(TreeNodeList(CurrNode).Dist(1) + TreeNodeList(CurrNode).Distance, TreeNodeList(TreeNodeList(CurrNode).NextNode(1)).TmpVar / 1)
If Not (TreeNodeList(CurrNode).NextNode(2) = -1) Then TreeNodeList(TreeNodeList(CurrNode).NextNode(2)).TmpVar = BE_AI_DIJKSTRA_MIN(TreeNodeList(CurrNode).Dist(2) + TreeNodeList(CurrNode).Distance, TreeNodeList(TreeNodeList(CurrNode).NextNode(2)).TmpVar / 1)
If Not (TreeNodeList(CurrNode).NextNode(3) = -1) Then TreeNodeList(TreeNodeList(CurrNode).NextNode(3)).TmpVar = BE_AI_DIJKSTRA_MIN(TreeNodeList(CurrNode).Dist(3) + TreeNodeList(CurrNode).Distance, TreeNodeList(TreeNodeList(CurrNode).NextNode(3)).TmpVar / 1)
'find the lowest temp var
LowestValFound = 100999
For i = 0 To nNodes - 1
If (TreeNodeList(i).TmpVar <= LowestValFound) And (TreeNodeList(i).TmpVar >= 0) And (TreeNodeList(i).VisitNumber < 0) Then