addNeighborNodeInOpenXy method

void addNeighborNodeInOpenXy(
  1. DFAStarMap mapInfo,
  2. DFAStarNode current,
  3. int x,
  4. int y,
  5. int value,
)

添加一个邻结点到open表

Implementation

void addNeighborNodeInOpenXy(DFAStarMap mapInfo, DFAStarNode current, int x, int y, int value) {
  if (canAddNodeToOpen(mapInfo, x, y)) {
    DFAStarNode end = mapInfo.end;
    DFTilePosition position = DFTilePosition(x, y);
    int G = current.G + value; // 计算邻结点的G值
    DFAStarNode? child = findNodeInOpen(position);
    if (child == null) {
      int H = calcH(end.position!, position); // 计算H值
      if (isEndNode(end.position!, position)) {
        child = end;
        child.parent = current;
        child.G = G;
        child.H = H;
      } else {
        child = DFAStarNode.newNode(position, current, G, H);
      }
      _openList.add(child);
      _openList.sort((a, b) => a.compareTo(b));
    } else if (child.G > G) {
      child.G = G;
      child.parent = current;
      _openList.add(child);
      _openList.sort((a, b) => a.compareTo(b));
    }
  }
}