public virtual void Open(Path path, IPathHandler pathHandler) { NavNode node = Node, tmpNode; IPathHandler handler = Handler; node.GetNeighbor(m_Neighbors); for (int i = 0; i < m_Neighbors.Count; i++) { tmpNode = m_Neighbors[i]; if (tmpNode == null) { continue; } IPathNode tmpPN = handler.GetPathnode(tmpNode); int cost = node.GetNeighborCost(i); if (PathID != tmpPN.PathID) { tmpPN.Parent = this; tmpPN.PathID = PathID; tmpPN.Cost = cost; tmpPN.H = path.CalculateHScore(tmpNode); tmpPN.UpdateG(); handler.Heap.Enqueue(tmpPN, tmpPN.F); } else { if (g + cost < tmpPN.G) { tmpPN.Parent = this; tmpPN.Cost = cost; tmpPN.UpdateG(); handler.Heap.Enqueue(tmpPN, tmpPN.F); } } } }