コード例 #1
0
        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);
                    }
                }
            }
        }