本文整理汇总了C#中Heap.Containts方法的典型用法代码示例。如果您正苦于以下问题:C# Heap.Containts方法的具体用法?C# Heap.Containts怎么用?C# Heap.Containts使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Heap
的用法示例。
在下文中一共展示了Heap.Containts方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FindPath
IEnumerator FindPath(Vector3 startPosition, Vector3 targetPosition,Action<Vector3[]> callBack ){
running = true;
yield return new WaitForEndOfFrame();
Stopwatch sw = new Stopwatch();
sw.Start();
Vector3[] waypoints = new Vector3[0];
bool pathSuccess = false;
Node startNode = grid.NodeFromWorldPosition(startPosition);
Node targetNode = grid.NodeFromWorldPosition(targetPosition);
if(startNode != targetNode){
if(startNode.walkable & targetNode.walkable){
Heap<Node> openSet = new Heap<Node>(grid.maxHeapSize);
HashSet<Node> closedSet = new HashSet<Node>();
openSet.Add(startNode);
while(openSet.Count >0){
Node currentNode = openSet.RemoveFirst();
closedSet.Add(currentNode);
if(currentNode == targetNode){
pathSuccess = true;
break;
}
foreach(Node neighbour in grid.GetNeighbours(currentNode)){
if(!neighbour.walkable || closedSet.Contains(neighbour)){
continue;
}
int newMovementCostToNeighbour = currentNode.gCost + Getdistance(currentNode,neighbour);
if(newMovementCostToNeighbour < neighbour.gCost || !openSet.Containts(neighbour)){
neighbour.gCost = newMovementCostToNeighbour;
neighbour.hCost = Getdistance(neighbour,targetNode);
neighbour.parent =currentNode;
if(!openSet.Containts(neighbour)){
openSet.Add(neighbour);
}else{
openSet.UpdateItem(neighbour);
}
}
}
}
}
}
if(pathSuccess){
waypoints = RetracePath(startNode,targetNode);
}
callBack(waypoints);
sw.Stop();
running = false;
print("Found path in "+sw.ElapsedMilliseconds+" ms");
}