diff --git a/src/finders/AStarFinder.js b/src/finders/AStarFinder.js index c0a1b81e..b5e748d4 100644 --- a/src/finders/AStarFinder.js +++ b/src/finders/AStarFinder.js @@ -52,7 +52,9 @@ function AStarFinder(opt) { */ AStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) { var openList = new Heap(function(nodeA, nodeB) { - return nodeA.f - nodeB.f; + var MAX_DIFF = 0.000001; + var diff = nodeA.f - nodeB.f; + return abs(diff) < MAX_DIFF ? nodeA.h - nodeB.h : diff; }), startNode = grid.getNodeAt(startX, startY), endNode = grid.getNodeAt(endX, endY), diff --git a/src/finders/BiAStarFinder.js b/src/finders/BiAStarFinder.js index 49159478..318f4096 100644 --- a/src/finders/BiAStarFinder.js +++ b/src/finders/BiAStarFinder.js @@ -52,7 +52,9 @@ function BiAStarFinder(opt) { */ BiAStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) { var cmp = function(nodeA, nodeB) { - return nodeA.f - nodeB.f; + var MAX_DIFF = 0.000001; + var diff = nodeA.f - nodeB.f; + return abs(diff) < MAX_DIFF ? nodeA.h - nodeB.h : diff; }, startOpenList = new Heap(cmp), endOpenList = new Heap(cmp), diff --git a/src/finders/JumpPointFinderBase.js b/src/finders/JumpPointFinderBase.js index 18396ed9..d0a8d778 100644 --- a/src/finders/JumpPointFinderBase.js +++ b/src/finders/JumpPointFinderBase.js @@ -25,10 +25,13 @@ function JumpPointFinderBase(opt) { */ JumpPointFinderBase.prototype.findPath = function(startX, startY, endX, endY, grid) { var openList = this.openList = new Heap(function(nodeA, nodeB) { - return nodeA.f - nodeB.f; + var MAX_DIFF = 0.000001; + var diff = nodeA.f - nodeB.f; + return abs(diff) < MAX_DIFF ? nodeA.h - nodeB.h : diff; }), startNode = this.startNode = grid.getNodeAt(startX, startY), - endNode = this.endNode = grid.getNodeAt(endX, endY), node; + endNode = this.endNode = grid.getNodeAt(endX, endY), node, + abs = Math.abs; this.grid = grid;