Skip to content

Commit 69c044e

Browse files
author
Daniel
committed
Add Portal support
1 parent a3e5c00 commit 69c044e

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

astar.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// Includes Binary Heap (with modifications) from Marijn Haverbeke.
66
// http://eloquentjavascript.net/appendix2.html
77

8+
"use strict";
9+
810
(function(definition) {
911
if(typeof module === 'object' && typeof module.exports === 'object') {
1012
module.exports = definition();
@@ -52,6 +54,7 @@ var astar = {
5254
options = options || {};
5355
var heuristic = options.heuristic || astar.manhattan;
5456
var diagonal = !!options.diagonal;
57+
var portals = !!options.portals;
5558
var closest = options.closest || false;
5659

5760
var openHeap = astar.heap();
@@ -89,7 +92,8 @@ var astar = {
8992

9093
// Find all neighbors for the current node. Optionally find diagonal neighbors as well (false by default).
9194
var disabledDirections = (currentNode.options.disabledDirections != null) ? currentNode.options.disabledDirections : {};
92-
var neighbors = astar.neighbors(grid, currentNode, {diagonals:diagonal, disabledDirections:disabledDirections});
95+
var portalTargets = ((currentNode.options.portalTargets != null) && portals) ? currentNode.options.portalTargets : [];
96+
var neighbors = astar.neighbors(grid, currentNode, {diagonals:diagonal, disabledDirections:disabledDirections, portalTargets:portalTargets});
9397

9498
var validNeighborCount = 0;
9599
for(var i in neighbors) {
@@ -101,7 +105,7 @@ var astar = {
101105

102106
//This will help us find paths that are mostly not diagonal, but may have node that diagonal is the only option
103107
if ((validNeighborCount == 0) && (diagonal == false)) {
104-
astar.neighbors(grid, currentNode, {diagonals:true, disabledDirections:disabledDirections});
108+
astar.neighbors(grid, currentNode, {diagonals:true, disabledDirections:disabledDirections, portalTargets:portalTargets});
105109
}
106110

107111
for(var i=0, il = neighbors.length; i < il; i++) {
@@ -177,11 +181,16 @@ var astar = {
177181
options = options || {};
178182
var diagonals = options.diagonals || false;
179183
var dd = options.disabledDirections || {};
184+
var pt = options.portalTargets || [];
180185

181186
function IsDirectionEnabled(dir) {
182187
return !dd[dir];
183188
}
184189

190+
function PositionExists(px, py) {
191+
return (grid[px] && grid[px][py]);
192+
}
193+
185194
// West
186195
if(grid[x-1] && grid[x-1][y] && IsDirectionEnabled('w')) {
187196
ret.push(grid[x-1][y]);
@@ -226,6 +235,13 @@ var astar = {
226235

227236
}
228237

238+
for (var p=0; p<pt.length; p++) {
239+
var target = pt[p];
240+
if (PositionExists(target.x, target.y)) {
241+
ret.push(grid[target.x][target.y]);
242+
}
243+
}
244+
229245
return ret;
230246
}
231247
};

0 commit comments

Comments
 (0)