@esengine/pathfinding 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/pathfinding.cjs +34 -18
- package/dist/pathfinding.cjs.map +1 -1
- package/dist/pathfinding.d.ts +3 -1
- package/dist/pathfinding.js +34 -18
- package/dist/pathfinding.js.map +1 -1
- package/dist/pathfinding.mjs +34 -18
- package/dist/pathfinding.mjs.map +1 -1
- package/package.json +17 -4
package/README.md
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
# 寻路算法库
|
|
2
2
|
|
|
3
|
+
[](https://github.com/esengine/ecs-astar/actions)
|
|
4
|
+
[](https://www.npmjs.com/package/@esengine/pathfinding)
|
|
5
|
+
[](https://github.com/esengine/ecs-astar)
|
|
6
|
+
[](https://github.com/esengine/ecs-astar/blob/main/LICENSE)
|
|
7
|
+
|
|
3
8
|
适用于Cocos Creator和Laya引擎的寻路算法库,支持A*和广度优先搜索算法。
|
|
4
9
|
|
|
5
|
-
## 特性
|
|
10
|
+
## ✨ 特性
|
|
6
11
|
|
|
7
12
|
- **多算法支持**:A*、广度优先搜索
|
|
8
13
|
- **引擎兼容**:支持Cocos Creator和Laya引擎
|
|
9
14
|
- **TypeScript**:完整的类型定义
|
|
10
|
-
-
|
|
15
|
+
- **高性能**:对象池优化,减少GC压力
|
|
11
16
|
|
|
12
17
|
## 安装
|
|
13
18
|
|
package/dist/pathfinding.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @esengine/pathfinding v1.0.
|
|
2
|
+
* @esengine/pathfinding v1.0.3
|
|
3
3
|
* 高性能寻路算法库 - 支持A*、广度优先等算法,适用于Cocos Creator、Laya等游戏引擎
|
|
4
4
|
*
|
|
5
5
|
* @author yhh
|
|
@@ -217,10 +217,14 @@ var AStarPathfinder = (function () {
|
|
|
217
217
|
if (startHash === goalHash) {
|
|
218
218
|
return { found: true, goalNode: this._getNode(start, 0, 0) };
|
|
219
219
|
}
|
|
220
|
+
if (!graph.isNodePassable(start)) {
|
|
221
|
+
return { found: false, openSetNodes: [] };
|
|
222
|
+
}
|
|
220
223
|
var startNode = this._getNode(start, 0, graph.heuristic(start, goal));
|
|
221
224
|
openSet.enqueue(startNode);
|
|
222
225
|
openSetMap.set(startHash, startNode);
|
|
223
226
|
var goalNode;
|
|
227
|
+
var processedNodes = [];
|
|
224
228
|
while (!openSet.isEmpty) {
|
|
225
229
|
var current = openSet.dequeue();
|
|
226
230
|
var currentHash = current.hash;
|
|
@@ -251,37 +255,41 @@ var AStarPathfinder = (function () {
|
|
|
251
255
|
openSetMap.set(neighborHash, neighborNode);
|
|
252
256
|
}
|
|
253
257
|
}
|
|
254
|
-
|
|
255
|
-
this._recycleNode(current);
|
|
256
|
-
}
|
|
258
|
+
processedNodes.push(current);
|
|
257
259
|
}
|
|
260
|
+
var remainingNodes = [];
|
|
258
261
|
while (!openSet.isEmpty) {
|
|
259
|
-
|
|
260
|
-
if (node !== goalNode) {
|
|
261
|
-
this._recycleNode(node);
|
|
262
|
-
}
|
|
262
|
+
remainingNodes.push(openSet.dequeue());
|
|
263
263
|
}
|
|
264
|
-
|
|
264
|
+
var allNodesToRecycle = __spreadArray(__spreadArray([], processedNodes, true), remainingNodes, true);
|
|
265
|
+
return { found: !!goalNode, goalNode: goalNode, openSetNodes: allNodesToRecycle };
|
|
265
266
|
};
|
|
266
267
|
AStarPathfinder.searchPath = function (graph, start, goal) {
|
|
267
268
|
var result = this.search(graph, start, goal);
|
|
268
269
|
if (!result.found || !result.goalNode) {
|
|
270
|
+
if (result.openSetNodes) {
|
|
271
|
+
for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {
|
|
272
|
+
var node = _a[_i];
|
|
273
|
+
this._recycleNode(node);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
269
276
|
return [];
|
|
270
277
|
}
|
|
271
|
-
|
|
278
|
+
var path = this.reconstructPathFromNode(result.goalNode);
|
|
279
|
+
if (result.openSetNodes) {
|
|
280
|
+
for (var _b = 0, _c = result.openSetNodes; _b < _c.length; _b++) {
|
|
281
|
+
var node = _c[_b];
|
|
282
|
+
this._recycleNode(node);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return path;
|
|
272
286
|
};
|
|
273
|
-
AStarPathfinder.reconstructPathFromNode = function (goalNode
|
|
287
|
+
AStarPathfinder.reconstructPathFromNode = function (goalNode) {
|
|
274
288
|
this._tempPath.length = 0;
|
|
275
289
|
var current = goalNode;
|
|
276
|
-
var startHash = Vector2Utils.toHash(start);
|
|
277
290
|
while (current) {
|
|
278
291
|
this._tempPath.unshift(current.node);
|
|
279
|
-
|
|
280
|
-
var parent_1 = current.parent;
|
|
281
|
-
if (currentHash !== startHash) {
|
|
282
|
-
this._recycleNode(current);
|
|
283
|
-
}
|
|
284
|
-
current = parent_1;
|
|
292
|
+
current = current.parent;
|
|
285
293
|
}
|
|
286
294
|
return __spreadArray([], this._tempPath, true);
|
|
287
295
|
};
|
|
@@ -290,6 +298,14 @@ var AStarPathfinder = (function () {
|
|
|
290
298
|
if (result.goalNode) {
|
|
291
299
|
this._recycleNode(result.goalNode);
|
|
292
300
|
}
|
|
301
|
+
if (result.openSetNodes) {
|
|
302
|
+
for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {
|
|
303
|
+
var node = _a[_i];
|
|
304
|
+
if (node !== result.goalNode) {
|
|
305
|
+
this._recycleNode(node);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
293
309
|
return result.found;
|
|
294
310
|
};
|
|
295
311
|
AStarPathfinder.clearPool = function () {
|
package/dist/pathfinding.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathfinding.cjs","sources":["../bin/Types/IVector2.js","../bin/Utils/PriorityQueue.js","../bin/AI/Pathfinding/AStar/AStarPathfinder.js","../bin/AI/Pathfinding/AStar/AstarGridGraph.js","../bin/AI/Pathfinding/BreadthFirst/BreadthFirstPathfinder.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGraph.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGridGraph.js"],"sourcesContent":["var Vector2Utils = (function () {\n function Vector2Utils() {\n }\n Vector2Utils.equals = function (a, b) {\n if (a.equals) {\n return a.equals(b);\n }\n return a.x === b.x && a.y === b.y;\n };\n Vector2Utils.create = function (x, y) {\n return { x: x, y: y };\n };\n Vector2Utils.clone = function (vector) {\n return { x: vector.x, y: vector.y };\n };\n Vector2Utils.add = function (a, b) {\n return { x: a.x + b.x, y: a.y + b.y };\n };\n Vector2Utils.manhattanDistance = function (a, b) {\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);\n };\n Vector2Utils.distance = function (a, b) {\n var dx = a.x - b.x;\n var dy = a.y - b.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Vector2Utils.toHash = function (vector) {\n var x = (vector.x + this.MAX_COORD) | 0;\n var y = (vector.y + this.MAX_COORD) | 0;\n return (x << 16) | y;\n };\n Vector2Utils.toKey = function (vector) {\n return \"\".concat(vector.x, \",\").concat(vector.y);\n };\n Vector2Utils.fromHash = function (hash) {\n var x = (hash >> 16) - this.MAX_COORD;\n var y = (hash & 0xFFFF) - this.MAX_COORD;\n return { x: x, y: y };\n };\n Vector2Utils.HASH_MULTIPLIER = 73856093;\n Vector2Utils.MAX_COORD = 32767;\n return Vector2Utils;\n}());\nexport { Vector2Utils };\n","var PriorityQueue = (function () {\n function PriorityQueue() {\n this._heap = [];\n this._size = 0;\n }\n Object.defineProperty(PriorityQueue.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PriorityQueue.prototype, \"isEmpty\", {\n get: function () {\n return this._size === 0;\n },\n enumerable: false,\n configurable: true\n });\n PriorityQueue.prototype.clear = function () {\n this._heap.length = 0;\n this._size = 0;\n };\n PriorityQueue.prototype.enqueue = function (item) {\n this._heap[this._size] = item;\n this._bubbleUp(this._size);\n this._size++;\n };\n PriorityQueue.prototype.dequeue = function () {\n if (this._size === 0) {\n return undefined;\n }\n var result = this._heap[0];\n this._size--;\n if (this._size > 0) {\n this._heap[0] = this._heap[this._size];\n this._bubbleDown(0);\n }\n return result;\n };\n PriorityQueue.prototype.peek = function () {\n return this._size > 0 ? this._heap[0] : undefined;\n };\n PriorityQueue.prototype._bubbleUp = function (index) {\n while (index > 0) {\n var parentIndex = Math.floor((index - 1) / 2);\n if (this._heap[index].priority >= this._heap[parentIndex].priority) {\n break;\n }\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n };\n PriorityQueue.prototype._bubbleDown = function (index) {\n while (true) {\n var minIndex = index;\n var leftChild = 2 * index + 1;\n var rightChild = 2 * index + 2;\n if (leftChild < this._size &&\n this._heap[leftChild].priority < this._heap[minIndex].priority) {\n minIndex = leftChild;\n }\n if (rightChild < this._size &&\n this._heap[rightChild].priority < this._heap[minIndex].priority) {\n minIndex = rightChild;\n }\n if (minIndex === index) {\n break;\n }\n this._swap(index, minIndex);\n index = minIndex;\n }\n };\n PriorityQueue.prototype._swap = function (i, j) {\n var temp = this._heap[i];\n this._heap[i] = this._heap[j];\n this._heap[j] = temp;\n };\n return PriorityQueue;\n}());\nexport { PriorityQueue };\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { Vector2Utils } from '../../../Types/IVector2';\nimport { PriorityQueue } from '../../../Utils/PriorityQueue';\nvar AStarNode = (function () {\n function AStarNode(node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n }\n AStarNode.prototype.updateCosts = function (gCost, hCost, parent) {\n if (parent === void 0) { parent = null; }\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n };\n AStarNode.prototype.updateNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n };\n AStarNode.prototype.reset = function () {\n this.node = null;\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n };\n return AStarNode;\n}());\nvar AStarPathfinder = (function () {\n function AStarPathfinder() {\n }\n AStarPathfinder._getNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n var astarNode = this._nodePool.pop();\n if (!astarNode) {\n astarNode = new AStarNode(node, gCost, hCost, parent);\n }\n else {\n astarNode.updateNode(node, gCost, hCost, parent);\n }\n return astarNode;\n };\n AStarPathfinder._recycleNode = function (node) {\n if (this._nodePool.length < 1000) {\n node.reset();\n this._nodePool.push(node);\n }\n };\n AStarPathfinder.search = function (graph, start, goal) {\n var openSet = new PriorityQueue();\n var closedSet = new Set();\n var openSetMap = new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return { found: true, goalNode: this._getNode(start, 0, 0) };\n }\n var startNode = this._getNode(start, 0, graph.heuristic(start, goal));\n openSet.enqueue(startNode);\n openSetMap.set(startHash, startNode);\n var goalNode;\n while (!openSet.isEmpty) {\n var current = openSet.dequeue();\n var currentHash = current.hash;\n openSetMap.delete(currentHash);\n if (currentHash === goalHash) {\n goalNode = current;\n break;\n }\n closedSet.add(currentHash);\n for (var _i = 0, _a = graph.getNeighbors(current.node); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (closedSet.has(neighborHash)) {\n continue;\n }\n var tentativeGScore = current.gCost + graph.cost(current.node, neighbor);\n var existingNode = openSetMap.get(neighborHash);\n if (existingNode) {\n if (tentativeGScore < existingNode.gCost) {\n var hCost = existingNode.hCost;\n existingNode.updateCosts(tentativeGScore, hCost, current);\n }\n }\n else {\n var hCost = graph.heuristic(neighbor, goal);\n var neighborNode = this._getNode(neighbor, tentativeGScore, hCost, current);\n openSet.enqueue(neighborNode);\n openSetMap.set(neighborHash, neighborNode);\n }\n }\n if (current !== goalNode) {\n this._recycleNode(current);\n }\n }\n while (!openSet.isEmpty) {\n var node = openSet.dequeue();\n if (node !== goalNode) {\n this._recycleNode(node);\n }\n }\n return { found: !!goalNode, goalNode: goalNode };\n };\n AStarPathfinder.searchPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (!result.found || !result.goalNode) {\n return [];\n }\n return this.reconstructPathFromNode(result.goalNode, start);\n };\n AStarPathfinder.reconstructPathFromNode = function (goalNode, start) {\n this._tempPath.length = 0;\n var current = goalNode;\n var startHash = Vector2Utils.toHash(start);\n while (current) {\n this._tempPath.unshift(current.node);\n var currentHash = current.hash;\n var parent_1 = current.parent;\n if (currentHash !== startHash) {\n this._recycleNode(current);\n }\n current = parent_1;\n }\n return __spreadArray([], this._tempPath, true);\n };\n AStarPathfinder.hasPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (result.goalNode) {\n this._recycleNode(result.goalNode);\n }\n return result.found;\n };\n AStarPathfinder.clearPool = function () {\n this._nodePool.length = 0;\n this._tempPath.length = 0;\n };\n AStarPathfinder.getPoolStats = function () {\n return {\n poolSize: this._nodePool.length,\n maxPoolSize: 1000\n };\n };\n AStarPathfinder._nodePool = [];\n AStarPathfinder._tempPath = [];\n return AStarPathfinder;\n}());\nexport { AStarPathfinder };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { AStarPathfinder } from './AStarPathfinder';\nvar AstarGridGraph = (function () {\n function AstarGridGraph(width, height) {\n this.dirs = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n this.walls = [];\n this.weightedNodes = [];\n this.defaultWeight = 1;\n this.weightedNodeWeight = 5;\n this._neighbors = new Array(4);\n this._wallsSet = new Set();\n this._weightedNodesSet = new Set();\n this._wallsDirty = true;\n this._weightedNodesDirty = true;\n this._width = width;\n this._height = height;\n }\n AstarGridGraph.prototype.addWall = function (wall) {\n this.walls.push(wall);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.addWalls = function (walls) {\n var _a;\n (_a = this.walls).push.apply(_a, walls);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.clearWalls = function () {\n this.walls.length = 0;\n this._wallsSet.clear();\n this._wallsDirty = false;\n };\n AstarGridGraph.prototype.addWeightedNode = function (node) {\n this.weightedNodes.push(node);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.addWeightedNodes = function (nodes) {\n var _a;\n (_a = this.weightedNodes).push.apply(_a, nodes);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.clearWeightedNodes = function () {\n this.weightedNodes.length = 0;\n this._weightedNodesSet.clear();\n this._weightedNodesDirty = false;\n };\n AstarGridGraph.prototype._updateHashSets = function () {\n if (this._wallsDirty) {\n this._wallsSet.clear();\n for (var _i = 0, _a = this.walls; _i < _a.length; _i++) {\n var wall = _a[_i];\n this._wallsSet.add(Vector2Utils.toHash(wall));\n }\n this._wallsDirty = false;\n }\n if (this._weightedNodesDirty) {\n this._weightedNodesSet.clear();\n for (var _b = 0, _c = this.weightedNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._weightedNodesSet.add(Vector2Utils.toHash(node));\n }\n this._weightedNodesDirty = false;\n }\n };\n AstarGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n AstarGridGraph.prototype.isNodePassable = function (node) {\n this._updateHashSets();\n return !this._wallsSet.has(Vector2Utils.toHash(node));\n };\n AstarGridGraph.prototype.search = function (start, goal) {\n return AStarPathfinder.hasPath(this, start, goal);\n };\n AstarGridGraph.prototype.searchPath = function (start, goal) {\n return AStarPathfinder.searchPath(this, start, goal);\n };\n AstarGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this.dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n AstarGridGraph.prototype.cost = function (from, to) {\n this._updateHashSets();\n return this._weightedNodesSet.has(Vector2Utils.toHash(to)) ? this.weightedNodeWeight : this.defaultWeight;\n };\n AstarGridGraph.prototype.heuristic = function (node, goal) {\n return Vector2Utils.manhattanDistance(node, goal);\n };\n AstarGridGraph.prototype.getStats = function () {\n this._updateHashSets();\n return {\n walls: this.walls.length,\n weightedNodes: this.weightedNodes.length,\n gridSize: \"\".concat(this._width, \"x\").concat(this._height),\n wallsSetSize: this._wallsSet.size,\n weightedNodesSetSize: this._weightedNodesSet.size\n };\n };\n return AstarGridGraph;\n}());\nexport { AstarGridGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nvar BreadthFirstPathfinder = (function () {\n function BreadthFirstPathfinder() {\n }\n BreadthFirstPathfinder.search = function (graph, start, goal, cameFrom) {\n var frontier = [];\n var visited = new Set();\n var pathMap = cameFrom || new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return true;\n }\n frontier.push(start);\n visited.add(startHash);\n while (frontier.length > 0) {\n var current = frontier.shift();\n var currentHash = Vector2Utils.toHash(current);\n if (currentHash === goalHash) {\n return true;\n }\n for (var _i = 0, _a = graph.getNeighbors(current); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (visited.has(neighborHash)) {\n continue;\n }\n visited.add(neighborHash);\n pathMap.set(neighborHash, current);\n frontier.push(neighbor);\n }\n }\n return false;\n };\n BreadthFirstPathfinder.searchPath = function (graph, start, goal) {\n var cameFrom = new Map();\n if (this.search(graph, start, goal, cameFrom)) {\n return this.reconstructPath(cameFrom, start, goal);\n }\n return [];\n };\n BreadthFirstPathfinder.reconstructPath = function (cameFrom, start, goal) {\n var path = [];\n var current = goal;\n var startHash = Vector2Utils.toHash(start);\n while (Vector2Utils.toHash(current) !== startHash) {\n path.unshift(current);\n var currentHash = Vector2Utils.toHash(current);\n var parent_1 = cameFrom.get(currentHash);\n if (!parent_1)\n break;\n current = parent_1;\n }\n path.unshift(start);\n return path;\n };\n return BreadthFirstPathfinder;\n}());\nexport { BreadthFirstPathfinder };\n","var UnweightedGraph = (function () {\n function UnweightedGraph() {\n this.edges = new Map();\n }\n UnweightedGraph.prototype.addEdgesForNode = function (node, neighbors) {\n this.edges.set(node, neighbors);\n return this;\n };\n UnweightedGraph.prototype.getNeighbors = function (node) {\n return this.edges.get(node) || [];\n };\n return UnweightedGraph;\n}());\nexport { UnweightedGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { BreadthFirstPathfinder } from './BreadthFirstPathfinder';\nvar UnweightedGridGraph = (function () {\n function UnweightedGridGraph(width, height, allowDiagonalSearch) {\n if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }\n this.walls = [];\n this._neighbors = [];\n this._width = width;\n this._height = height;\n this._dirs = allowDiagonalSearch ? UnweightedGridGraph.COMPASS_DIRS : UnweightedGridGraph.CARDINAL_DIRS;\n }\n UnweightedGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n UnweightedGridGraph.prototype.isNodePassable = function (node) {\n return !this.walls.find(function (wall) { return Vector2Utils.equals(wall, node); });\n };\n UnweightedGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this._dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n UnweightedGridGraph.prototype.searchPath = function (start, goal) {\n return BreadthFirstPathfinder.searchPath(this, start, goal);\n };\n UnweightedGridGraph.prototype.hasPath = function (start, goal) {\n return BreadthFirstPathfinder.search(this, start, goal);\n };\n UnweightedGridGraph.CARDINAL_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n UnweightedGridGraph.COMPASS_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(1, -1),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(-1, 1),\n Vector2Utils.create(0, 1),\n Vector2Utils.create(1, 1),\n ];\n return UnweightedGridGraph;\n}());\nexport { UnweightedGridGraph };\n"],"names":["this"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pathfinding.cjs","sources":["../bin/Types/IVector2.js","../bin/Utils/PriorityQueue.js","../bin/AI/Pathfinding/AStar/AStarPathfinder.js","../bin/AI/Pathfinding/AStar/AstarGridGraph.js","../bin/AI/Pathfinding/BreadthFirst/BreadthFirstPathfinder.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGraph.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGridGraph.js"],"sourcesContent":["var Vector2Utils = (function () {\n function Vector2Utils() {\n }\n Vector2Utils.equals = function (a, b) {\n if (a.equals) {\n return a.equals(b);\n }\n return a.x === b.x && a.y === b.y;\n };\n Vector2Utils.create = function (x, y) {\n return { x: x, y: y };\n };\n Vector2Utils.clone = function (vector) {\n return { x: vector.x, y: vector.y };\n };\n Vector2Utils.add = function (a, b) {\n return { x: a.x + b.x, y: a.y + b.y };\n };\n Vector2Utils.manhattanDistance = function (a, b) {\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);\n };\n Vector2Utils.distance = function (a, b) {\n var dx = a.x - b.x;\n var dy = a.y - b.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Vector2Utils.toHash = function (vector) {\n var x = (vector.x + this.MAX_COORD) | 0;\n var y = (vector.y + this.MAX_COORD) | 0;\n return (x << 16) | y;\n };\n Vector2Utils.toKey = function (vector) {\n return \"\".concat(vector.x, \",\").concat(vector.y);\n };\n Vector2Utils.fromHash = function (hash) {\n var x = (hash >> 16) - this.MAX_COORD;\n var y = (hash & 0xFFFF) - this.MAX_COORD;\n return { x: x, y: y };\n };\n Vector2Utils.HASH_MULTIPLIER = 73856093;\n Vector2Utils.MAX_COORD = 32767;\n return Vector2Utils;\n}());\nexport { Vector2Utils };\n","var PriorityQueue = (function () {\n function PriorityQueue() {\n this._heap = [];\n this._size = 0;\n }\n Object.defineProperty(PriorityQueue.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PriorityQueue.prototype, \"isEmpty\", {\n get: function () {\n return this._size === 0;\n },\n enumerable: false,\n configurable: true\n });\n PriorityQueue.prototype.clear = function () {\n this._heap.length = 0;\n this._size = 0;\n };\n PriorityQueue.prototype.enqueue = function (item) {\n this._heap[this._size] = item;\n this._bubbleUp(this._size);\n this._size++;\n };\n PriorityQueue.prototype.dequeue = function () {\n if (this._size === 0) {\n return undefined;\n }\n var result = this._heap[0];\n this._size--;\n if (this._size > 0) {\n this._heap[0] = this._heap[this._size];\n this._bubbleDown(0);\n }\n return result;\n };\n PriorityQueue.prototype.peek = function () {\n return this._size > 0 ? this._heap[0] : undefined;\n };\n PriorityQueue.prototype._bubbleUp = function (index) {\n while (index > 0) {\n var parentIndex = Math.floor((index - 1) / 2);\n if (this._heap[index].priority >= this._heap[parentIndex].priority) {\n break;\n }\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n };\n PriorityQueue.prototype._bubbleDown = function (index) {\n while (true) {\n var minIndex = index;\n var leftChild = 2 * index + 1;\n var rightChild = 2 * index + 2;\n if (leftChild < this._size &&\n this._heap[leftChild].priority < this._heap[minIndex].priority) {\n minIndex = leftChild;\n }\n if (rightChild < this._size &&\n this._heap[rightChild].priority < this._heap[minIndex].priority) {\n minIndex = rightChild;\n }\n if (minIndex === index) {\n break;\n }\n this._swap(index, minIndex);\n index = minIndex;\n }\n };\n PriorityQueue.prototype._swap = function (i, j) {\n var temp = this._heap[i];\n this._heap[i] = this._heap[j];\n this._heap[j] = temp;\n };\n return PriorityQueue;\n}());\nexport { PriorityQueue };\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { Vector2Utils } from '../../../Types/IVector2';\nimport { PriorityQueue } from '../../../Utils/PriorityQueue';\nvar AStarNode = (function () {\n function AStarNode(node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n }\n AStarNode.prototype.updateCosts = function (gCost, hCost, parent) {\n if (parent === void 0) { parent = null; }\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n };\n AStarNode.prototype.updateNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n };\n AStarNode.prototype.reset = function () {\n this.node = null;\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n };\n return AStarNode;\n}());\nvar AStarPathfinder = (function () {\n function AStarPathfinder() {\n }\n AStarPathfinder._getNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n var astarNode = this._nodePool.pop();\n if (!astarNode) {\n astarNode = new AStarNode(node, gCost, hCost, parent);\n }\n else {\n astarNode.updateNode(node, gCost, hCost, parent);\n }\n return astarNode;\n };\n AStarPathfinder._recycleNode = function (node) {\n if (this._nodePool.length < 1000) {\n node.reset();\n this._nodePool.push(node);\n }\n };\n AStarPathfinder.search = function (graph, start, goal) {\n var openSet = new PriorityQueue();\n var closedSet = new Set();\n var openSetMap = new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return { found: true, goalNode: this._getNode(start, 0, 0) };\n }\n if (!graph.isNodePassable(start)) {\n return { found: false, openSetNodes: [] };\n }\n var startNode = this._getNode(start, 0, graph.heuristic(start, goal));\n openSet.enqueue(startNode);\n openSetMap.set(startHash, startNode);\n var goalNode;\n var processedNodes = [];\n while (!openSet.isEmpty) {\n var current = openSet.dequeue();\n var currentHash = current.hash;\n openSetMap.delete(currentHash);\n if (currentHash === goalHash) {\n goalNode = current;\n break;\n }\n closedSet.add(currentHash);\n for (var _i = 0, _a = graph.getNeighbors(current.node); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (closedSet.has(neighborHash)) {\n continue;\n }\n var tentativeGScore = current.gCost + graph.cost(current.node, neighbor);\n var existingNode = openSetMap.get(neighborHash);\n if (existingNode) {\n if (tentativeGScore < existingNode.gCost) {\n var hCost = existingNode.hCost;\n existingNode.updateCosts(tentativeGScore, hCost, current);\n }\n }\n else {\n var hCost = graph.heuristic(neighbor, goal);\n var neighborNode = this._getNode(neighbor, tentativeGScore, hCost, current);\n openSet.enqueue(neighborNode);\n openSetMap.set(neighborHash, neighborNode);\n }\n }\n processedNodes.push(current);\n }\n var remainingNodes = [];\n while (!openSet.isEmpty) {\n remainingNodes.push(openSet.dequeue());\n }\n var allNodesToRecycle = __spreadArray(__spreadArray([], processedNodes, true), remainingNodes, true);\n return { found: !!goalNode, goalNode: goalNode, openSetNodes: allNodesToRecycle };\n };\n AStarPathfinder.searchPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (!result.found || !result.goalNode) {\n if (result.openSetNodes) {\n for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {\n var node = _a[_i];\n this._recycleNode(node);\n }\n }\n return [];\n }\n var path = this.reconstructPathFromNode(result.goalNode);\n if (result.openSetNodes) {\n for (var _b = 0, _c = result.openSetNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._recycleNode(node);\n }\n }\n return path;\n };\n AStarPathfinder.reconstructPathFromNode = function (goalNode) {\n this._tempPath.length = 0;\n var current = goalNode;\n while (current) {\n this._tempPath.unshift(current.node);\n current = current.parent;\n }\n return __spreadArray([], this._tempPath, true);\n };\n AStarPathfinder.hasPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (result.goalNode) {\n this._recycleNode(result.goalNode);\n }\n if (result.openSetNodes) {\n for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {\n var node = _a[_i];\n if (node !== result.goalNode) {\n this._recycleNode(node);\n }\n }\n }\n return result.found;\n };\n AStarPathfinder.clearPool = function () {\n this._nodePool.length = 0;\n this._tempPath.length = 0;\n };\n AStarPathfinder.getPoolStats = function () {\n return {\n poolSize: this._nodePool.length,\n maxPoolSize: 1000\n };\n };\n AStarPathfinder._nodePool = [];\n AStarPathfinder._tempPath = [];\n return AStarPathfinder;\n}());\nexport { AStarPathfinder };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { AStarPathfinder } from './AStarPathfinder';\nvar AstarGridGraph = (function () {\n function AstarGridGraph(width, height) {\n this.dirs = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n this.walls = [];\n this.weightedNodes = [];\n this.defaultWeight = 1;\n this.weightedNodeWeight = 5;\n this._neighbors = new Array(4);\n this._wallsSet = new Set();\n this._weightedNodesSet = new Set();\n this._wallsDirty = true;\n this._weightedNodesDirty = true;\n this._width = width;\n this._height = height;\n }\n AstarGridGraph.prototype.addWall = function (wall) {\n this.walls.push(wall);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.addWalls = function (walls) {\n var _a;\n (_a = this.walls).push.apply(_a, walls);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.clearWalls = function () {\n this.walls.length = 0;\n this._wallsSet.clear();\n this._wallsDirty = false;\n };\n AstarGridGraph.prototype.addWeightedNode = function (node) {\n this.weightedNodes.push(node);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.addWeightedNodes = function (nodes) {\n var _a;\n (_a = this.weightedNodes).push.apply(_a, nodes);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.clearWeightedNodes = function () {\n this.weightedNodes.length = 0;\n this._weightedNodesSet.clear();\n this._weightedNodesDirty = false;\n };\n AstarGridGraph.prototype._updateHashSets = function () {\n if (this._wallsDirty) {\n this._wallsSet.clear();\n for (var _i = 0, _a = this.walls; _i < _a.length; _i++) {\n var wall = _a[_i];\n this._wallsSet.add(Vector2Utils.toHash(wall));\n }\n this._wallsDirty = false;\n }\n if (this._weightedNodesDirty) {\n this._weightedNodesSet.clear();\n for (var _b = 0, _c = this.weightedNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._weightedNodesSet.add(Vector2Utils.toHash(node));\n }\n this._weightedNodesDirty = false;\n }\n };\n AstarGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n AstarGridGraph.prototype.isNodePassable = function (node) {\n this._updateHashSets();\n return !this._wallsSet.has(Vector2Utils.toHash(node));\n };\n AstarGridGraph.prototype.search = function (start, goal) {\n return AStarPathfinder.hasPath(this, start, goal);\n };\n AstarGridGraph.prototype.searchPath = function (start, goal) {\n return AStarPathfinder.searchPath(this, start, goal);\n };\n AstarGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this.dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n AstarGridGraph.prototype.cost = function (from, to) {\n this._updateHashSets();\n return this._weightedNodesSet.has(Vector2Utils.toHash(to)) ? this.weightedNodeWeight : this.defaultWeight;\n };\n AstarGridGraph.prototype.heuristic = function (node, goal) {\n return Vector2Utils.manhattanDistance(node, goal);\n };\n AstarGridGraph.prototype.getStats = function () {\n this._updateHashSets();\n return {\n walls: this.walls.length,\n weightedNodes: this.weightedNodes.length,\n gridSize: \"\".concat(this._width, \"x\").concat(this._height),\n wallsSetSize: this._wallsSet.size,\n weightedNodesSetSize: this._weightedNodesSet.size\n };\n };\n return AstarGridGraph;\n}());\nexport { AstarGridGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nvar BreadthFirstPathfinder = (function () {\n function BreadthFirstPathfinder() {\n }\n BreadthFirstPathfinder.search = function (graph, start, goal, cameFrom) {\n var frontier = [];\n var visited = new Set();\n var pathMap = cameFrom || new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return true;\n }\n frontier.push(start);\n visited.add(startHash);\n while (frontier.length > 0) {\n var current = frontier.shift();\n var currentHash = Vector2Utils.toHash(current);\n if (currentHash === goalHash) {\n return true;\n }\n for (var _i = 0, _a = graph.getNeighbors(current); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (visited.has(neighborHash)) {\n continue;\n }\n visited.add(neighborHash);\n pathMap.set(neighborHash, current);\n frontier.push(neighbor);\n }\n }\n return false;\n };\n BreadthFirstPathfinder.searchPath = function (graph, start, goal) {\n var cameFrom = new Map();\n if (this.search(graph, start, goal, cameFrom)) {\n return this.reconstructPath(cameFrom, start, goal);\n }\n return [];\n };\n BreadthFirstPathfinder.reconstructPath = function (cameFrom, start, goal) {\n var path = [];\n var current = goal;\n var startHash = Vector2Utils.toHash(start);\n while (Vector2Utils.toHash(current) !== startHash) {\n path.unshift(current);\n var currentHash = Vector2Utils.toHash(current);\n var parent_1 = cameFrom.get(currentHash);\n if (!parent_1)\n break;\n current = parent_1;\n }\n path.unshift(start);\n return path;\n };\n return BreadthFirstPathfinder;\n}());\nexport { BreadthFirstPathfinder };\n","var UnweightedGraph = (function () {\n function UnweightedGraph() {\n this.edges = new Map();\n }\n UnweightedGraph.prototype.addEdgesForNode = function (node, neighbors) {\n this.edges.set(node, neighbors);\n return this;\n };\n UnweightedGraph.prototype.getNeighbors = function (node) {\n return this.edges.get(node) || [];\n };\n return UnweightedGraph;\n}());\nexport { UnweightedGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { BreadthFirstPathfinder } from './BreadthFirstPathfinder';\nvar UnweightedGridGraph = (function () {\n function UnweightedGridGraph(width, height, allowDiagonalSearch) {\n if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }\n this.walls = [];\n this._neighbors = [];\n this._width = width;\n this._height = height;\n this._dirs = allowDiagonalSearch ? UnweightedGridGraph.COMPASS_DIRS : UnweightedGridGraph.CARDINAL_DIRS;\n }\n UnweightedGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n UnweightedGridGraph.prototype.isNodePassable = function (node) {\n return !this.walls.find(function (wall) { return Vector2Utils.equals(wall, node); });\n };\n UnweightedGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this._dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n UnweightedGridGraph.prototype.searchPath = function (start, goal) {\n return BreadthFirstPathfinder.searchPath(this, start, goal);\n };\n UnweightedGridGraph.prototype.hasPath = function (start, goal) {\n return BreadthFirstPathfinder.search(this, start, goal);\n };\n UnweightedGridGraph.CARDINAL_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n UnweightedGridGraph.COMPASS_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(1, -1),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(-1, 1),\n Vector2Utils.create(0, 1),\n Vector2Utils.create(1, 1),\n ];\n return UnweightedGridGraph;\n}());\nexport { UnweightedGridGraph };\n"],"names":["this"],"mappings":"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"}
|
package/dist/pathfinding.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @esengine/pathfinding v1.0.
|
|
2
|
+
* @esengine/pathfinding v1.0.3
|
|
3
3
|
* TypeScript definitions
|
|
4
4
|
*/
|
|
5
5
|
interface IVector2 {
|
|
@@ -44,6 +44,7 @@ interface IAstarGraph<T extends IVector2> {
|
|
|
44
44
|
getNeighbors(node: T): T[];
|
|
45
45
|
cost(from: T, to: T): number;
|
|
46
46
|
heuristic(node: T, goal: T): number;
|
|
47
|
+
isNodePassable(node: T): boolean;
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
declare class AStarNode implements IPriorityQueueNode {
|
|
@@ -66,6 +67,7 @@ declare class AStarPathfinder {
|
|
|
66
67
|
static search<T extends IVector2>(graph: IAstarGraph<T>, start: T, goal: T): {
|
|
67
68
|
found: boolean;
|
|
68
69
|
goalNode?: AStarNode;
|
|
70
|
+
openSetNodes?: AStarNode[];
|
|
69
71
|
};
|
|
70
72
|
static searchPath<T extends IVector2>(graph: IAstarGraph<T>, start: T, goal: T): T[];
|
|
71
73
|
private static reconstructPathFromNode;
|
package/dist/pathfinding.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @esengine/pathfinding v1.0.
|
|
2
|
+
* @esengine/pathfinding v1.0.3
|
|
3
3
|
* 高性能寻路算法库 - 支持A*、广度优先等算法,适用于Cocos Creator、Laya等游戏引擎
|
|
4
4
|
*
|
|
5
5
|
* @author yhh
|
|
@@ -221,10 +221,14 @@
|
|
|
221
221
|
if (startHash === goalHash) {
|
|
222
222
|
return { found: true, goalNode: this._getNode(start, 0, 0) };
|
|
223
223
|
}
|
|
224
|
+
if (!graph.isNodePassable(start)) {
|
|
225
|
+
return { found: false, openSetNodes: [] };
|
|
226
|
+
}
|
|
224
227
|
var startNode = this._getNode(start, 0, graph.heuristic(start, goal));
|
|
225
228
|
openSet.enqueue(startNode);
|
|
226
229
|
openSetMap.set(startHash, startNode);
|
|
227
230
|
var goalNode;
|
|
231
|
+
var processedNodes = [];
|
|
228
232
|
while (!openSet.isEmpty) {
|
|
229
233
|
var current = openSet.dequeue();
|
|
230
234
|
var currentHash = current.hash;
|
|
@@ -255,37 +259,41 @@
|
|
|
255
259
|
openSetMap.set(neighborHash, neighborNode);
|
|
256
260
|
}
|
|
257
261
|
}
|
|
258
|
-
|
|
259
|
-
this._recycleNode(current);
|
|
260
|
-
}
|
|
262
|
+
processedNodes.push(current);
|
|
261
263
|
}
|
|
264
|
+
var remainingNodes = [];
|
|
262
265
|
while (!openSet.isEmpty) {
|
|
263
|
-
|
|
264
|
-
if (node !== goalNode) {
|
|
265
|
-
this._recycleNode(node);
|
|
266
|
-
}
|
|
266
|
+
remainingNodes.push(openSet.dequeue());
|
|
267
267
|
}
|
|
268
|
-
|
|
268
|
+
var allNodesToRecycle = __spreadArray(__spreadArray([], processedNodes, true), remainingNodes, true);
|
|
269
|
+
return { found: !!goalNode, goalNode: goalNode, openSetNodes: allNodesToRecycle };
|
|
269
270
|
};
|
|
270
271
|
AStarPathfinder.searchPath = function (graph, start, goal) {
|
|
271
272
|
var result = this.search(graph, start, goal);
|
|
272
273
|
if (!result.found || !result.goalNode) {
|
|
274
|
+
if (result.openSetNodes) {
|
|
275
|
+
for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {
|
|
276
|
+
var node = _a[_i];
|
|
277
|
+
this._recycleNode(node);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
273
280
|
return [];
|
|
274
281
|
}
|
|
275
|
-
|
|
282
|
+
var path = this.reconstructPathFromNode(result.goalNode);
|
|
283
|
+
if (result.openSetNodes) {
|
|
284
|
+
for (var _b = 0, _c = result.openSetNodes; _b < _c.length; _b++) {
|
|
285
|
+
var node = _c[_b];
|
|
286
|
+
this._recycleNode(node);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return path;
|
|
276
290
|
};
|
|
277
|
-
AStarPathfinder.reconstructPathFromNode = function (goalNode
|
|
291
|
+
AStarPathfinder.reconstructPathFromNode = function (goalNode) {
|
|
278
292
|
this._tempPath.length = 0;
|
|
279
293
|
var current = goalNode;
|
|
280
|
-
var startHash = Vector2Utils.toHash(start);
|
|
281
294
|
while (current) {
|
|
282
295
|
this._tempPath.unshift(current.node);
|
|
283
|
-
|
|
284
|
-
var parent_1 = current.parent;
|
|
285
|
-
if (currentHash !== startHash) {
|
|
286
|
-
this._recycleNode(current);
|
|
287
|
-
}
|
|
288
|
-
current = parent_1;
|
|
296
|
+
current = current.parent;
|
|
289
297
|
}
|
|
290
298
|
return __spreadArray([], this._tempPath, true);
|
|
291
299
|
};
|
|
@@ -294,6 +302,14 @@
|
|
|
294
302
|
if (result.goalNode) {
|
|
295
303
|
this._recycleNode(result.goalNode);
|
|
296
304
|
}
|
|
305
|
+
if (result.openSetNodes) {
|
|
306
|
+
for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {
|
|
307
|
+
var node = _a[_i];
|
|
308
|
+
if (node !== result.goalNode) {
|
|
309
|
+
this._recycleNode(node);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
297
313
|
return result.found;
|
|
298
314
|
};
|
|
299
315
|
AStarPathfinder.clearPool = function () {
|
package/dist/pathfinding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathfinding.js","sources":["../bin/Types/IVector2.js","../bin/Utils/PriorityQueue.js","../bin/AI/Pathfinding/AStar/AStarPathfinder.js","../bin/AI/Pathfinding/AStar/AstarGridGraph.js","../bin/AI/Pathfinding/BreadthFirst/BreadthFirstPathfinder.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGraph.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGridGraph.js"],"sourcesContent":["var Vector2Utils = (function () {\n function Vector2Utils() {\n }\n Vector2Utils.equals = function (a, b) {\n if (a.equals) {\n return a.equals(b);\n }\n return a.x === b.x && a.y === b.y;\n };\n Vector2Utils.create = function (x, y) {\n return { x: x, y: y };\n };\n Vector2Utils.clone = function (vector) {\n return { x: vector.x, y: vector.y };\n };\n Vector2Utils.add = function (a, b) {\n return { x: a.x + b.x, y: a.y + b.y };\n };\n Vector2Utils.manhattanDistance = function (a, b) {\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);\n };\n Vector2Utils.distance = function (a, b) {\n var dx = a.x - b.x;\n var dy = a.y - b.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Vector2Utils.toHash = function (vector) {\n var x = (vector.x + this.MAX_COORD) | 0;\n var y = (vector.y + this.MAX_COORD) | 0;\n return (x << 16) | y;\n };\n Vector2Utils.toKey = function (vector) {\n return \"\".concat(vector.x, \",\").concat(vector.y);\n };\n Vector2Utils.fromHash = function (hash) {\n var x = (hash >> 16) - this.MAX_COORD;\n var y = (hash & 0xFFFF) - this.MAX_COORD;\n return { x: x, y: y };\n };\n Vector2Utils.HASH_MULTIPLIER = 73856093;\n Vector2Utils.MAX_COORD = 32767;\n return Vector2Utils;\n}());\nexport { Vector2Utils };\n","var PriorityQueue = (function () {\n function PriorityQueue() {\n this._heap = [];\n this._size = 0;\n }\n Object.defineProperty(PriorityQueue.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PriorityQueue.prototype, \"isEmpty\", {\n get: function () {\n return this._size === 0;\n },\n enumerable: false,\n configurable: true\n });\n PriorityQueue.prototype.clear = function () {\n this._heap.length = 0;\n this._size = 0;\n };\n PriorityQueue.prototype.enqueue = function (item) {\n this._heap[this._size] = item;\n this._bubbleUp(this._size);\n this._size++;\n };\n PriorityQueue.prototype.dequeue = function () {\n if (this._size === 0) {\n return undefined;\n }\n var result = this._heap[0];\n this._size--;\n if (this._size > 0) {\n this._heap[0] = this._heap[this._size];\n this._bubbleDown(0);\n }\n return result;\n };\n PriorityQueue.prototype.peek = function () {\n return this._size > 0 ? this._heap[0] : undefined;\n };\n PriorityQueue.prototype._bubbleUp = function (index) {\n while (index > 0) {\n var parentIndex = Math.floor((index - 1) / 2);\n if (this._heap[index].priority >= this._heap[parentIndex].priority) {\n break;\n }\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n };\n PriorityQueue.prototype._bubbleDown = function (index) {\n while (true) {\n var minIndex = index;\n var leftChild = 2 * index + 1;\n var rightChild = 2 * index + 2;\n if (leftChild < this._size &&\n this._heap[leftChild].priority < this._heap[minIndex].priority) {\n minIndex = leftChild;\n }\n if (rightChild < this._size &&\n this._heap[rightChild].priority < this._heap[minIndex].priority) {\n minIndex = rightChild;\n }\n if (minIndex === index) {\n break;\n }\n this._swap(index, minIndex);\n index = minIndex;\n }\n };\n PriorityQueue.prototype._swap = function (i, j) {\n var temp = this._heap[i];\n this._heap[i] = this._heap[j];\n this._heap[j] = temp;\n };\n return PriorityQueue;\n}());\nexport { PriorityQueue };\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { Vector2Utils } from '../../../Types/IVector2';\nimport { PriorityQueue } from '../../../Utils/PriorityQueue';\nvar AStarNode = (function () {\n function AStarNode(node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n }\n AStarNode.prototype.updateCosts = function (gCost, hCost, parent) {\n if (parent === void 0) { parent = null; }\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n };\n AStarNode.prototype.updateNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n };\n AStarNode.prototype.reset = function () {\n this.node = null;\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n };\n return AStarNode;\n}());\nvar AStarPathfinder = (function () {\n function AStarPathfinder() {\n }\n AStarPathfinder._getNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n var astarNode = this._nodePool.pop();\n if (!astarNode) {\n astarNode = new AStarNode(node, gCost, hCost, parent);\n }\n else {\n astarNode.updateNode(node, gCost, hCost, parent);\n }\n return astarNode;\n };\n AStarPathfinder._recycleNode = function (node) {\n if (this._nodePool.length < 1000) {\n node.reset();\n this._nodePool.push(node);\n }\n };\n AStarPathfinder.search = function (graph, start, goal) {\n var openSet = new PriorityQueue();\n var closedSet = new Set();\n var openSetMap = new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return { found: true, goalNode: this._getNode(start, 0, 0) };\n }\n var startNode = this._getNode(start, 0, graph.heuristic(start, goal));\n openSet.enqueue(startNode);\n openSetMap.set(startHash, startNode);\n var goalNode;\n while (!openSet.isEmpty) {\n var current = openSet.dequeue();\n var currentHash = current.hash;\n openSetMap.delete(currentHash);\n if (currentHash === goalHash) {\n goalNode = current;\n break;\n }\n closedSet.add(currentHash);\n for (var _i = 0, _a = graph.getNeighbors(current.node); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (closedSet.has(neighborHash)) {\n continue;\n }\n var tentativeGScore = current.gCost + graph.cost(current.node, neighbor);\n var existingNode = openSetMap.get(neighborHash);\n if (existingNode) {\n if (tentativeGScore < existingNode.gCost) {\n var hCost = existingNode.hCost;\n existingNode.updateCosts(tentativeGScore, hCost, current);\n }\n }\n else {\n var hCost = graph.heuristic(neighbor, goal);\n var neighborNode = this._getNode(neighbor, tentativeGScore, hCost, current);\n openSet.enqueue(neighborNode);\n openSetMap.set(neighborHash, neighborNode);\n }\n }\n if (current !== goalNode) {\n this._recycleNode(current);\n }\n }\n while (!openSet.isEmpty) {\n var node = openSet.dequeue();\n if (node !== goalNode) {\n this._recycleNode(node);\n }\n }\n return { found: !!goalNode, goalNode: goalNode };\n };\n AStarPathfinder.searchPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (!result.found || !result.goalNode) {\n return [];\n }\n return this.reconstructPathFromNode(result.goalNode, start);\n };\n AStarPathfinder.reconstructPathFromNode = function (goalNode, start) {\n this._tempPath.length = 0;\n var current = goalNode;\n var startHash = Vector2Utils.toHash(start);\n while (current) {\n this._tempPath.unshift(current.node);\n var currentHash = current.hash;\n var parent_1 = current.parent;\n if (currentHash !== startHash) {\n this._recycleNode(current);\n }\n current = parent_1;\n }\n return __spreadArray([], this._tempPath, true);\n };\n AStarPathfinder.hasPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (result.goalNode) {\n this._recycleNode(result.goalNode);\n }\n return result.found;\n };\n AStarPathfinder.clearPool = function () {\n this._nodePool.length = 0;\n this._tempPath.length = 0;\n };\n AStarPathfinder.getPoolStats = function () {\n return {\n poolSize: this._nodePool.length,\n maxPoolSize: 1000\n };\n };\n AStarPathfinder._nodePool = [];\n AStarPathfinder._tempPath = [];\n return AStarPathfinder;\n}());\nexport { AStarPathfinder };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { AStarPathfinder } from './AStarPathfinder';\nvar AstarGridGraph = (function () {\n function AstarGridGraph(width, height) {\n this.dirs = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n this.walls = [];\n this.weightedNodes = [];\n this.defaultWeight = 1;\n this.weightedNodeWeight = 5;\n this._neighbors = new Array(4);\n this._wallsSet = new Set();\n this._weightedNodesSet = new Set();\n this._wallsDirty = true;\n this._weightedNodesDirty = true;\n this._width = width;\n this._height = height;\n }\n AstarGridGraph.prototype.addWall = function (wall) {\n this.walls.push(wall);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.addWalls = function (walls) {\n var _a;\n (_a = this.walls).push.apply(_a, walls);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.clearWalls = function () {\n this.walls.length = 0;\n this._wallsSet.clear();\n this._wallsDirty = false;\n };\n AstarGridGraph.prototype.addWeightedNode = function (node) {\n this.weightedNodes.push(node);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.addWeightedNodes = function (nodes) {\n var _a;\n (_a = this.weightedNodes).push.apply(_a, nodes);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.clearWeightedNodes = function () {\n this.weightedNodes.length = 0;\n this._weightedNodesSet.clear();\n this._weightedNodesDirty = false;\n };\n AstarGridGraph.prototype._updateHashSets = function () {\n if (this._wallsDirty) {\n this._wallsSet.clear();\n for (var _i = 0, _a = this.walls; _i < _a.length; _i++) {\n var wall = _a[_i];\n this._wallsSet.add(Vector2Utils.toHash(wall));\n }\n this._wallsDirty = false;\n }\n if (this._weightedNodesDirty) {\n this._weightedNodesSet.clear();\n for (var _b = 0, _c = this.weightedNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._weightedNodesSet.add(Vector2Utils.toHash(node));\n }\n this._weightedNodesDirty = false;\n }\n };\n AstarGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n AstarGridGraph.prototype.isNodePassable = function (node) {\n this._updateHashSets();\n return !this._wallsSet.has(Vector2Utils.toHash(node));\n };\n AstarGridGraph.prototype.search = function (start, goal) {\n return AStarPathfinder.hasPath(this, start, goal);\n };\n AstarGridGraph.prototype.searchPath = function (start, goal) {\n return AStarPathfinder.searchPath(this, start, goal);\n };\n AstarGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this.dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n AstarGridGraph.prototype.cost = function (from, to) {\n this._updateHashSets();\n return this._weightedNodesSet.has(Vector2Utils.toHash(to)) ? this.weightedNodeWeight : this.defaultWeight;\n };\n AstarGridGraph.prototype.heuristic = function (node, goal) {\n return Vector2Utils.manhattanDistance(node, goal);\n };\n AstarGridGraph.prototype.getStats = function () {\n this._updateHashSets();\n return {\n walls: this.walls.length,\n weightedNodes: this.weightedNodes.length,\n gridSize: \"\".concat(this._width, \"x\").concat(this._height),\n wallsSetSize: this._wallsSet.size,\n weightedNodesSetSize: this._weightedNodesSet.size\n };\n };\n return AstarGridGraph;\n}());\nexport { AstarGridGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nvar BreadthFirstPathfinder = (function () {\n function BreadthFirstPathfinder() {\n }\n BreadthFirstPathfinder.search = function (graph, start, goal, cameFrom) {\n var frontier = [];\n var visited = new Set();\n var pathMap = cameFrom || new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return true;\n }\n frontier.push(start);\n visited.add(startHash);\n while (frontier.length > 0) {\n var current = frontier.shift();\n var currentHash = Vector2Utils.toHash(current);\n if (currentHash === goalHash) {\n return true;\n }\n for (var _i = 0, _a = graph.getNeighbors(current); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (visited.has(neighborHash)) {\n continue;\n }\n visited.add(neighborHash);\n pathMap.set(neighborHash, current);\n frontier.push(neighbor);\n }\n }\n return false;\n };\n BreadthFirstPathfinder.searchPath = function (graph, start, goal) {\n var cameFrom = new Map();\n if (this.search(graph, start, goal, cameFrom)) {\n return this.reconstructPath(cameFrom, start, goal);\n }\n return [];\n };\n BreadthFirstPathfinder.reconstructPath = function (cameFrom, start, goal) {\n var path = [];\n var current = goal;\n var startHash = Vector2Utils.toHash(start);\n while (Vector2Utils.toHash(current) !== startHash) {\n path.unshift(current);\n var currentHash = Vector2Utils.toHash(current);\n var parent_1 = cameFrom.get(currentHash);\n if (!parent_1)\n break;\n current = parent_1;\n }\n path.unshift(start);\n return path;\n };\n return BreadthFirstPathfinder;\n}());\nexport { BreadthFirstPathfinder };\n","var UnweightedGraph = (function () {\n function UnweightedGraph() {\n this.edges = new Map();\n }\n UnweightedGraph.prototype.addEdgesForNode = function (node, neighbors) {\n this.edges.set(node, neighbors);\n return this;\n };\n UnweightedGraph.prototype.getNeighbors = function (node) {\n return this.edges.get(node) || [];\n };\n return UnweightedGraph;\n}());\nexport { UnweightedGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { BreadthFirstPathfinder } from './BreadthFirstPathfinder';\nvar UnweightedGridGraph = (function () {\n function UnweightedGridGraph(width, height, allowDiagonalSearch) {\n if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }\n this.walls = [];\n this._neighbors = [];\n this._width = width;\n this._height = height;\n this._dirs = allowDiagonalSearch ? UnweightedGridGraph.COMPASS_DIRS : UnweightedGridGraph.CARDINAL_DIRS;\n }\n UnweightedGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n UnweightedGridGraph.prototype.isNodePassable = function (node) {\n return !this.walls.find(function (wall) { return Vector2Utils.equals(wall, node); });\n };\n UnweightedGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this._dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n UnweightedGridGraph.prototype.searchPath = function (start, goal) {\n return BreadthFirstPathfinder.searchPath(this, start, goal);\n };\n UnweightedGridGraph.prototype.hasPath = function (start, goal) {\n return BreadthFirstPathfinder.search(this, start, goal);\n };\n UnweightedGridGraph.CARDINAL_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n UnweightedGridGraph.COMPASS_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(1, -1),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(-1, 1),\n Vector2Utils.create(0, 1),\n Vector2Utils.create(1, 1),\n ];\n return UnweightedGridGraph;\n}());\nexport { UnweightedGridGraph };\n"],"names":["this"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pathfinding.js","sources":["../bin/Types/IVector2.js","../bin/Utils/PriorityQueue.js","../bin/AI/Pathfinding/AStar/AStarPathfinder.js","../bin/AI/Pathfinding/AStar/AstarGridGraph.js","../bin/AI/Pathfinding/BreadthFirst/BreadthFirstPathfinder.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGraph.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGridGraph.js"],"sourcesContent":["var Vector2Utils = (function () {\n function Vector2Utils() {\n }\n Vector2Utils.equals = function (a, b) {\n if (a.equals) {\n return a.equals(b);\n }\n return a.x === b.x && a.y === b.y;\n };\n Vector2Utils.create = function (x, y) {\n return { x: x, y: y };\n };\n Vector2Utils.clone = function (vector) {\n return { x: vector.x, y: vector.y };\n };\n Vector2Utils.add = function (a, b) {\n return { x: a.x + b.x, y: a.y + b.y };\n };\n Vector2Utils.manhattanDistance = function (a, b) {\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);\n };\n Vector2Utils.distance = function (a, b) {\n var dx = a.x - b.x;\n var dy = a.y - b.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Vector2Utils.toHash = function (vector) {\n var x = (vector.x + this.MAX_COORD) | 0;\n var y = (vector.y + this.MAX_COORD) | 0;\n return (x << 16) | y;\n };\n Vector2Utils.toKey = function (vector) {\n return \"\".concat(vector.x, \",\").concat(vector.y);\n };\n Vector2Utils.fromHash = function (hash) {\n var x = (hash >> 16) - this.MAX_COORD;\n var y = (hash & 0xFFFF) - this.MAX_COORD;\n return { x: x, y: y };\n };\n Vector2Utils.HASH_MULTIPLIER = 73856093;\n Vector2Utils.MAX_COORD = 32767;\n return Vector2Utils;\n}());\nexport { Vector2Utils };\n","var PriorityQueue = (function () {\n function PriorityQueue() {\n this._heap = [];\n this._size = 0;\n }\n Object.defineProperty(PriorityQueue.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PriorityQueue.prototype, \"isEmpty\", {\n get: function () {\n return this._size === 0;\n },\n enumerable: false,\n configurable: true\n });\n PriorityQueue.prototype.clear = function () {\n this._heap.length = 0;\n this._size = 0;\n };\n PriorityQueue.prototype.enqueue = function (item) {\n this._heap[this._size] = item;\n this._bubbleUp(this._size);\n this._size++;\n };\n PriorityQueue.prototype.dequeue = function () {\n if (this._size === 0) {\n return undefined;\n }\n var result = this._heap[0];\n this._size--;\n if (this._size > 0) {\n this._heap[0] = this._heap[this._size];\n this._bubbleDown(0);\n }\n return result;\n };\n PriorityQueue.prototype.peek = function () {\n return this._size > 0 ? this._heap[0] : undefined;\n };\n PriorityQueue.prototype._bubbleUp = function (index) {\n while (index > 0) {\n var parentIndex = Math.floor((index - 1) / 2);\n if (this._heap[index].priority >= this._heap[parentIndex].priority) {\n break;\n }\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n };\n PriorityQueue.prototype._bubbleDown = function (index) {\n while (true) {\n var minIndex = index;\n var leftChild = 2 * index + 1;\n var rightChild = 2 * index + 2;\n if (leftChild < this._size &&\n this._heap[leftChild].priority < this._heap[minIndex].priority) {\n minIndex = leftChild;\n }\n if (rightChild < this._size &&\n this._heap[rightChild].priority < this._heap[minIndex].priority) {\n minIndex = rightChild;\n }\n if (minIndex === index) {\n break;\n }\n this._swap(index, minIndex);\n index = minIndex;\n }\n };\n PriorityQueue.prototype._swap = function (i, j) {\n var temp = this._heap[i];\n this._heap[i] = this._heap[j];\n this._heap[j] = temp;\n };\n return PriorityQueue;\n}());\nexport { PriorityQueue };\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { Vector2Utils } from '../../../Types/IVector2';\nimport { PriorityQueue } from '../../../Utils/PriorityQueue';\nvar AStarNode = (function () {\n function AStarNode(node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n }\n AStarNode.prototype.updateCosts = function (gCost, hCost, parent) {\n if (parent === void 0) { parent = null; }\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n };\n AStarNode.prototype.updateNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n };\n AStarNode.prototype.reset = function () {\n this.node = null;\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n };\n return AStarNode;\n}());\nvar AStarPathfinder = (function () {\n function AStarPathfinder() {\n }\n AStarPathfinder._getNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n var astarNode = this._nodePool.pop();\n if (!astarNode) {\n astarNode = new AStarNode(node, gCost, hCost, parent);\n }\n else {\n astarNode.updateNode(node, gCost, hCost, parent);\n }\n return astarNode;\n };\n AStarPathfinder._recycleNode = function (node) {\n if (this._nodePool.length < 1000) {\n node.reset();\n this._nodePool.push(node);\n }\n };\n AStarPathfinder.search = function (graph, start, goal) {\n var openSet = new PriorityQueue();\n var closedSet = new Set();\n var openSetMap = new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return { found: true, goalNode: this._getNode(start, 0, 0) };\n }\n if (!graph.isNodePassable(start)) {\n return { found: false, openSetNodes: [] };\n }\n var startNode = this._getNode(start, 0, graph.heuristic(start, goal));\n openSet.enqueue(startNode);\n openSetMap.set(startHash, startNode);\n var goalNode;\n var processedNodes = [];\n while (!openSet.isEmpty) {\n var current = openSet.dequeue();\n var currentHash = current.hash;\n openSetMap.delete(currentHash);\n if (currentHash === goalHash) {\n goalNode = current;\n break;\n }\n closedSet.add(currentHash);\n for (var _i = 0, _a = graph.getNeighbors(current.node); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (closedSet.has(neighborHash)) {\n continue;\n }\n var tentativeGScore = current.gCost + graph.cost(current.node, neighbor);\n var existingNode = openSetMap.get(neighborHash);\n if (existingNode) {\n if (tentativeGScore < existingNode.gCost) {\n var hCost = existingNode.hCost;\n existingNode.updateCosts(tentativeGScore, hCost, current);\n }\n }\n else {\n var hCost = graph.heuristic(neighbor, goal);\n var neighborNode = this._getNode(neighbor, tentativeGScore, hCost, current);\n openSet.enqueue(neighborNode);\n openSetMap.set(neighborHash, neighborNode);\n }\n }\n processedNodes.push(current);\n }\n var remainingNodes = [];\n while (!openSet.isEmpty) {\n remainingNodes.push(openSet.dequeue());\n }\n var allNodesToRecycle = __spreadArray(__spreadArray([], processedNodes, true), remainingNodes, true);\n return { found: !!goalNode, goalNode: goalNode, openSetNodes: allNodesToRecycle };\n };\n AStarPathfinder.searchPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (!result.found || !result.goalNode) {\n if (result.openSetNodes) {\n for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {\n var node = _a[_i];\n this._recycleNode(node);\n }\n }\n return [];\n }\n var path = this.reconstructPathFromNode(result.goalNode);\n if (result.openSetNodes) {\n for (var _b = 0, _c = result.openSetNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._recycleNode(node);\n }\n }\n return path;\n };\n AStarPathfinder.reconstructPathFromNode = function (goalNode) {\n this._tempPath.length = 0;\n var current = goalNode;\n while (current) {\n this._tempPath.unshift(current.node);\n current = current.parent;\n }\n return __spreadArray([], this._tempPath, true);\n };\n AStarPathfinder.hasPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (result.goalNode) {\n this._recycleNode(result.goalNode);\n }\n if (result.openSetNodes) {\n for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {\n var node = _a[_i];\n if (node !== result.goalNode) {\n this._recycleNode(node);\n }\n }\n }\n return result.found;\n };\n AStarPathfinder.clearPool = function () {\n this._nodePool.length = 0;\n this._tempPath.length = 0;\n };\n AStarPathfinder.getPoolStats = function () {\n return {\n poolSize: this._nodePool.length,\n maxPoolSize: 1000\n };\n };\n AStarPathfinder._nodePool = [];\n AStarPathfinder._tempPath = [];\n return AStarPathfinder;\n}());\nexport { AStarPathfinder };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { AStarPathfinder } from './AStarPathfinder';\nvar AstarGridGraph = (function () {\n function AstarGridGraph(width, height) {\n this.dirs = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n this.walls = [];\n this.weightedNodes = [];\n this.defaultWeight = 1;\n this.weightedNodeWeight = 5;\n this._neighbors = new Array(4);\n this._wallsSet = new Set();\n this._weightedNodesSet = new Set();\n this._wallsDirty = true;\n this._weightedNodesDirty = true;\n this._width = width;\n this._height = height;\n }\n AstarGridGraph.prototype.addWall = function (wall) {\n this.walls.push(wall);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.addWalls = function (walls) {\n var _a;\n (_a = this.walls).push.apply(_a, walls);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.clearWalls = function () {\n this.walls.length = 0;\n this._wallsSet.clear();\n this._wallsDirty = false;\n };\n AstarGridGraph.prototype.addWeightedNode = function (node) {\n this.weightedNodes.push(node);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.addWeightedNodes = function (nodes) {\n var _a;\n (_a = this.weightedNodes).push.apply(_a, nodes);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.clearWeightedNodes = function () {\n this.weightedNodes.length = 0;\n this._weightedNodesSet.clear();\n this._weightedNodesDirty = false;\n };\n AstarGridGraph.prototype._updateHashSets = function () {\n if (this._wallsDirty) {\n this._wallsSet.clear();\n for (var _i = 0, _a = this.walls; _i < _a.length; _i++) {\n var wall = _a[_i];\n this._wallsSet.add(Vector2Utils.toHash(wall));\n }\n this._wallsDirty = false;\n }\n if (this._weightedNodesDirty) {\n this._weightedNodesSet.clear();\n for (var _b = 0, _c = this.weightedNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._weightedNodesSet.add(Vector2Utils.toHash(node));\n }\n this._weightedNodesDirty = false;\n }\n };\n AstarGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n AstarGridGraph.prototype.isNodePassable = function (node) {\n this._updateHashSets();\n return !this._wallsSet.has(Vector2Utils.toHash(node));\n };\n AstarGridGraph.prototype.search = function (start, goal) {\n return AStarPathfinder.hasPath(this, start, goal);\n };\n AstarGridGraph.prototype.searchPath = function (start, goal) {\n return AStarPathfinder.searchPath(this, start, goal);\n };\n AstarGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this.dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n AstarGridGraph.prototype.cost = function (from, to) {\n this._updateHashSets();\n return this._weightedNodesSet.has(Vector2Utils.toHash(to)) ? this.weightedNodeWeight : this.defaultWeight;\n };\n AstarGridGraph.prototype.heuristic = function (node, goal) {\n return Vector2Utils.manhattanDistance(node, goal);\n };\n AstarGridGraph.prototype.getStats = function () {\n this._updateHashSets();\n return {\n walls: this.walls.length,\n weightedNodes: this.weightedNodes.length,\n gridSize: \"\".concat(this._width, \"x\").concat(this._height),\n wallsSetSize: this._wallsSet.size,\n weightedNodesSetSize: this._weightedNodesSet.size\n };\n };\n return AstarGridGraph;\n}());\nexport { AstarGridGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nvar BreadthFirstPathfinder = (function () {\n function BreadthFirstPathfinder() {\n }\n BreadthFirstPathfinder.search = function (graph, start, goal, cameFrom) {\n var frontier = [];\n var visited = new Set();\n var pathMap = cameFrom || new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return true;\n }\n frontier.push(start);\n visited.add(startHash);\n while (frontier.length > 0) {\n var current = frontier.shift();\n var currentHash = Vector2Utils.toHash(current);\n if (currentHash === goalHash) {\n return true;\n }\n for (var _i = 0, _a = graph.getNeighbors(current); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (visited.has(neighborHash)) {\n continue;\n }\n visited.add(neighborHash);\n pathMap.set(neighborHash, current);\n frontier.push(neighbor);\n }\n }\n return false;\n };\n BreadthFirstPathfinder.searchPath = function (graph, start, goal) {\n var cameFrom = new Map();\n if (this.search(graph, start, goal, cameFrom)) {\n return this.reconstructPath(cameFrom, start, goal);\n }\n return [];\n };\n BreadthFirstPathfinder.reconstructPath = function (cameFrom, start, goal) {\n var path = [];\n var current = goal;\n var startHash = Vector2Utils.toHash(start);\n while (Vector2Utils.toHash(current) !== startHash) {\n path.unshift(current);\n var currentHash = Vector2Utils.toHash(current);\n var parent_1 = cameFrom.get(currentHash);\n if (!parent_1)\n break;\n current = parent_1;\n }\n path.unshift(start);\n return path;\n };\n return BreadthFirstPathfinder;\n}());\nexport { BreadthFirstPathfinder };\n","var UnweightedGraph = (function () {\n function UnweightedGraph() {\n this.edges = new Map();\n }\n UnweightedGraph.prototype.addEdgesForNode = function (node, neighbors) {\n this.edges.set(node, neighbors);\n return this;\n };\n UnweightedGraph.prototype.getNeighbors = function (node) {\n return this.edges.get(node) || [];\n };\n return UnweightedGraph;\n}());\nexport { UnweightedGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { BreadthFirstPathfinder } from './BreadthFirstPathfinder';\nvar UnweightedGridGraph = (function () {\n function UnweightedGridGraph(width, height, allowDiagonalSearch) {\n if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }\n this.walls = [];\n this._neighbors = [];\n this._width = width;\n this._height = height;\n this._dirs = allowDiagonalSearch ? UnweightedGridGraph.COMPASS_DIRS : UnweightedGridGraph.CARDINAL_DIRS;\n }\n UnweightedGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n UnweightedGridGraph.prototype.isNodePassable = function (node) {\n return !this.walls.find(function (wall) { return Vector2Utils.equals(wall, node); });\n };\n UnweightedGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this._dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n UnweightedGridGraph.prototype.searchPath = function (start, goal) {\n return BreadthFirstPathfinder.searchPath(this, start, goal);\n };\n UnweightedGridGraph.prototype.hasPath = function (start, goal) {\n return BreadthFirstPathfinder.search(this, start, goal);\n };\n UnweightedGridGraph.CARDINAL_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n UnweightedGridGraph.COMPASS_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(1, -1),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(-1, 1),\n Vector2Utils.create(0, 1),\n Vector2Utils.create(1, 1),\n ];\n return UnweightedGridGraph;\n}());\nexport { UnweightedGridGraph };\n"],"names":["this"],"mappings":"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"}
|
package/dist/pathfinding.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @esengine/pathfinding v1.0.
|
|
2
|
+
* @esengine/pathfinding v1.0.3
|
|
3
3
|
* 高性能寻路算法库 - 支持A*、广度优先等算法,适用于Cocos Creator、Laya等游戏引擎
|
|
4
4
|
*
|
|
5
5
|
* @author yhh
|
|
@@ -215,10 +215,14 @@ var AStarPathfinder = (function () {
|
|
|
215
215
|
if (startHash === goalHash) {
|
|
216
216
|
return { found: true, goalNode: this._getNode(start, 0, 0) };
|
|
217
217
|
}
|
|
218
|
+
if (!graph.isNodePassable(start)) {
|
|
219
|
+
return { found: false, openSetNodes: [] };
|
|
220
|
+
}
|
|
218
221
|
var startNode = this._getNode(start, 0, graph.heuristic(start, goal));
|
|
219
222
|
openSet.enqueue(startNode);
|
|
220
223
|
openSetMap.set(startHash, startNode);
|
|
221
224
|
var goalNode;
|
|
225
|
+
var processedNodes = [];
|
|
222
226
|
while (!openSet.isEmpty) {
|
|
223
227
|
var current = openSet.dequeue();
|
|
224
228
|
var currentHash = current.hash;
|
|
@@ -249,37 +253,41 @@ var AStarPathfinder = (function () {
|
|
|
249
253
|
openSetMap.set(neighborHash, neighborNode);
|
|
250
254
|
}
|
|
251
255
|
}
|
|
252
|
-
|
|
253
|
-
this._recycleNode(current);
|
|
254
|
-
}
|
|
256
|
+
processedNodes.push(current);
|
|
255
257
|
}
|
|
258
|
+
var remainingNodes = [];
|
|
256
259
|
while (!openSet.isEmpty) {
|
|
257
|
-
|
|
258
|
-
if (node !== goalNode) {
|
|
259
|
-
this._recycleNode(node);
|
|
260
|
-
}
|
|
260
|
+
remainingNodes.push(openSet.dequeue());
|
|
261
261
|
}
|
|
262
|
-
|
|
262
|
+
var allNodesToRecycle = __spreadArray(__spreadArray([], processedNodes, true), remainingNodes, true);
|
|
263
|
+
return { found: !!goalNode, goalNode: goalNode, openSetNodes: allNodesToRecycle };
|
|
263
264
|
};
|
|
264
265
|
AStarPathfinder.searchPath = function (graph, start, goal) {
|
|
265
266
|
var result = this.search(graph, start, goal);
|
|
266
267
|
if (!result.found || !result.goalNode) {
|
|
268
|
+
if (result.openSetNodes) {
|
|
269
|
+
for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {
|
|
270
|
+
var node = _a[_i];
|
|
271
|
+
this._recycleNode(node);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
267
274
|
return [];
|
|
268
275
|
}
|
|
269
|
-
|
|
276
|
+
var path = this.reconstructPathFromNode(result.goalNode);
|
|
277
|
+
if (result.openSetNodes) {
|
|
278
|
+
for (var _b = 0, _c = result.openSetNodes; _b < _c.length; _b++) {
|
|
279
|
+
var node = _c[_b];
|
|
280
|
+
this._recycleNode(node);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return path;
|
|
270
284
|
};
|
|
271
|
-
AStarPathfinder.reconstructPathFromNode = function (goalNode
|
|
285
|
+
AStarPathfinder.reconstructPathFromNode = function (goalNode) {
|
|
272
286
|
this._tempPath.length = 0;
|
|
273
287
|
var current = goalNode;
|
|
274
|
-
var startHash = Vector2Utils.toHash(start);
|
|
275
288
|
while (current) {
|
|
276
289
|
this._tempPath.unshift(current.node);
|
|
277
|
-
|
|
278
|
-
var parent_1 = current.parent;
|
|
279
|
-
if (currentHash !== startHash) {
|
|
280
|
-
this._recycleNode(current);
|
|
281
|
-
}
|
|
282
|
-
current = parent_1;
|
|
290
|
+
current = current.parent;
|
|
283
291
|
}
|
|
284
292
|
return __spreadArray([], this._tempPath, true);
|
|
285
293
|
};
|
|
@@ -288,6 +296,14 @@ var AStarPathfinder = (function () {
|
|
|
288
296
|
if (result.goalNode) {
|
|
289
297
|
this._recycleNode(result.goalNode);
|
|
290
298
|
}
|
|
299
|
+
if (result.openSetNodes) {
|
|
300
|
+
for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {
|
|
301
|
+
var node = _a[_i];
|
|
302
|
+
if (node !== result.goalNode) {
|
|
303
|
+
this._recycleNode(node);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
291
307
|
return result.found;
|
|
292
308
|
};
|
|
293
309
|
AStarPathfinder.clearPool = function () {
|
package/dist/pathfinding.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathfinding.mjs","sources":["../bin/Types/IVector2.js","../bin/Utils/PriorityQueue.js","../bin/AI/Pathfinding/AStar/AStarPathfinder.js","../bin/AI/Pathfinding/AStar/AstarGridGraph.js","../bin/AI/Pathfinding/BreadthFirst/BreadthFirstPathfinder.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGraph.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGridGraph.js"],"sourcesContent":["var Vector2Utils = (function () {\n function Vector2Utils() {\n }\n Vector2Utils.equals = function (a, b) {\n if (a.equals) {\n return a.equals(b);\n }\n return a.x === b.x && a.y === b.y;\n };\n Vector2Utils.create = function (x, y) {\n return { x: x, y: y };\n };\n Vector2Utils.clone = function (vector) {\n return { x: vector.x, y: vector.y };\n };\n Vector2Utils.add = function (a, b) {\n return { x: a.x + b.x, y: a.y + b.y };\n };\n Vector2Utils.manhattanDistance = function (a, b) {\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);\n };\n Vector2Utils.distance = function (a, b) {\n var dx = a.x - b.x;\n var dy = a.y - b.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Vector2Utils.toHash = function (vector) {\n var x = (vector.x + this.MAX_COORD) | 0;\n var y = (vector.y + this.MAX_COORD) | 0;\n return (x << 16) | y;\n };\n Vector2Utils.toKey = function (vector) {\n return \"\".concat(vector.x, \",\").concat(vector.y);\n };\n Vector2Utils.fromHash = function (hash) {\n var x = (hash >> 16) - this.MAX_COORD;\n var y = (hash & 0xFFFF) - this.MAX_COORD;\n return { x: x, y: y };\n };\n Vector2Utils.HASH_MULTIPLIER = 73856093;\n Vector2Utils.MAX_COORD = 32767;\n return Vector2Utils;\n}());\nexport { Vector2Utils };\n","var PriorityQueue = (function () {\n function PriorityQueue() {\n this._heap = [];\n this._size = 0;\n }\n Object.defineProperty(PriorityQueue.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PriorityQueue.prototype, \"isEmpty\", {\n get: function () {\n return this._size === 0;\n },\n enumerable: false,\n configurable: true\n });\n PriorityQueue.prototype.clear = function () {\n this._heap.length = 0;\n this._size = 0;\n };\n PriorityQueue.prototype.enqueue = function (item) {\n this._heap[this._size] = item;\n this._bubbleUp(this._size);\n this._size++;\n };\n PriorityQueue.prototype.dequeue = function () {\n if (this._size === 0) {\n return undefined;\n }\n var result = this._heap[0];\n this._size--;\n if (this._size > 0) {\n this._heap[0] = this._heap[this._size];\n this._bubbleDown(0);\n }\n return result;\n };\n PriorityQueue.prototype.peek = function () {\n return this._size > 0 ? this._heap[0] : undefined;\n };\n PriorityQueue.prototype._bubbleUp = function (index) {\n while (index > 0) {\n var parentIndex = Math.floor((index - 1) / 2);\n if (this._heap[index].priority >= this._heap[parentIndex].priority) {\n break;\n }\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n };\n PriorityQueue.prototype._bubbleDown = function (index) {\n while (true) {\n var minIndex = index;\n var leftChild = 2 * index + 1;\n var rightChild = 2 * index + 2;\n if (leftChild < this._size &&\n this._heap[leftChild].priority < this._heap[minIndex].priority) {\n minIndex = leftChild;\n }\n if (rightChild < this._size &&\n this._heap[rightChild].priority < this._heap[minIndex].priority) {\n minIndex = rightChild;\n }\n if (minIndex === index) {\n break;\n }\n this._swap(index, minIndex);\n index = minIndex;\n }\n };\n PriorityQueue.prototype._swap = function (i, j) {\n var temp = this._heap[i];\n this._heap[i] = this._heap[j];\n this._heap[j] = temp;\n };\n return PriorityQueue;\n}());\nexport { PriorityQueue };\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { Vector2Utils } from '../../../Types/IVector2';\nimport { PriorityQueue } from '../../../Utils/PriorityQueue';\nvar AStarNode = (function () {\n function AStarNode(node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n }\n AStarNode.prototype.updateCosts = function (gCost, hCost, parent) {\n if (parent === void 0) { parent = null; }\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n };\n AStarNode.prototype.updateNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n };\n AStarNode.prototype.reset = function () {\n this.node = null;\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n };\n return AStarNode;\n}());\nvar AStarPathfinder = (function () {\n function AStarPathfinder() {\n }\n AStarPathfinder._getNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n var astarNode = this._nodePool.pop();\n if (!astarNode) {\n astarNode = new AStarNode(node, gCost, hCost, parent);\n }\n else {\n astarNode.updateNode(node, gCost, hCost, parent);\n }\n return astarNode;\n };\n AStarPathfinder._recycleNode = function (node) {\n if (this._nodePool.length < 1000) {\n node.reset();\n this._nodePool.push(node);\n }\n };\n AStarPathfinder.search = function (graph, start, goal) {\n var openSet = new PriorityQueue();\n var closedSet = new Set();\n var openSetMap = new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return { found: true, goalNode: this._getNode(start, 0, 0) };\n }\n var startNode = this._getNode(start, 0, graph.heuristic(start, goal));\n openSet.enqueue(startNode);\n openSetMap.set(startHash, startNode);\n var goalNode;\n while (!openSet.isEmpty) {\n var current = openSet.dequeue();\n var currentHash = current.hash;\n openSetMap.delete(currentHash);\n if (currentHash === goalHash) {\n goalNode = current;\n break;\n }\n closedSet.add(currentHash);\n for (var _i = 0, _a = graph.getNeighbors(current.node); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (closedSet.has(neighborHash)) {\n continue;\n }\n var tentativeGScore = current.gCost + graph.cost(current.node, neighbor);\n var existingNode = openSetMap.get(neighborHash);\n if (existingNode) {\n if (tentativeGScore < existingNode.gCost) {\n var hCost = existingNode.hCost;\n existingNode.updateCosts(tentativeGScore, hCost, current);\n }\n }\n else {\n var hCost = graph.heuristic(neighbor, goal);\n var neighborNode = this._getNode(neighbor, tentativeGScore, hCost, current);\n openSet.enqueue(neighborNode);\n openSetMap.set(neighborHash, neighborNode);\n }\n }\n if (current !== goalNode) {\n this._recycleNode(current);\n }\n }\n while (!openSet.isEmpty) {\n var node = openSet.dequeue();\n if (node !== goalNode) {\n this._recycleNode(node);\n }\n }\n return { found: !!goalNode, goalNode: goalNode };\n };\n AStarPathfinder.searchPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (!result.found || !result.goalNode) {\n return [];\n }\n return this.reconstructPathFromNode(result.goalNode, start);\n };\n AStarPathfinder.reconstructPathFromNode = function (goalNode, start) {\n this._tempPath.length = 0;\n var current = goalNode;\n var startHash = Vector2Utils.toHash(start);\n while (current) {\n this._tempPath.unshift(current.node);\n var currentHash = current.hash;\n var parent_1 = current.parent;\n if (currentHash !== startHash) {\n this._recycleNode(current);\n }\n current = parent_1;\n }\n return __spreadArray([], this._tempPath, true);\n };\n AStarPathfinder.hasPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (result.goalNode) {\n this._recycleNode(result.goalNode);\n }\n return result.found;\n };\n AStarPathfinder.clearPool = function () {\n this._nodePool.length = 0;\n this._tempPath.length = 0;\n };\n AStarPathfinder.getPoolStats = function () {\n return {\n poolSize: this._nodePool.length,\n maxPoolSize: 1000\n };\n };\n AStarPathfinder._nodePool = [];\n AStarPathfinder._tempPath = [];\n return AStarPathfinder;\n}());\nexport { AStarPathfinder };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { AStarPathfinder } from './AStarPathfinder';\nvar AstarGridGraph = (function () {\n function AstarGridGraph(width, height) {\n this.dirs = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n this.walls = [];\n this.weightedNodes = [];\n this.defaultWeight = 1;\n this.weightedNodeWeight = 5;\n this._neighbors = new Array(4);\n this._wallsSet = new Set();\n this._weightedNodesSet = new Set();\n this._wallsDirty = true;\n this._weightedNodesDirty = true;\n this._width = width;\n this._height = height;\n }\n AstarGridGraph.prototype.addWall = function (wall) {\n this.walls.push(wall);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.addWalls = function (walls) {\n var _a;\n (_a = this.walls).push.apply(_a, walls);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.clearWalls = function () {\n this.walls.length = 0;\n this._wallsSet.clear();\n this._wallsDirty = false;\n };\n AstarGridGraph.prototype.addWeightedNode = function (node) {\n this.weightedNodes.push(node);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.addWeightedNodes = function (nodes) {\n var _a;\n (_a = this.weightedNodes).push.apply(_a, nodes);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.clearWeightedNodes = function () {\n this.weightedNodes.length = 0;\n this._weightedNodesSet.clear();\n this._weightedNodesDirty = false;\n };\n AstarGridGraph.prototype._updateHashSets = function () {\n if (this._wallsDirty) {\n this._wallsSet.clear();\n for (var _i = 0, _a = this.walls; _i < _a.length; _i++) {\n var wall = _a[_i];\n this._wallsSet.add(Vector2Utils.toHash(wall));\n }\n this._wallsDirty = false;\n }\n if (this._weightedNodesDirty) {\n this._weightedNodesSet.clear();\n for (var _b = 0, _c = this.weightedNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._weightedNodesSet.add(Vector2Utils.toHash(node));\n }\n this._weightedNodesDirty = false;\n }\n };\n AstarGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n AstarGridGraph.prototype.isNodePassable = function (node) {\n this._updateHashSets();\n return !this._wallsSet.has(Vector2Utils.toHash(node));\n };\n AstarGridGraph.prototype.search = function (start, goal) {\n return AStarPathfinder.hasPath(this, start, goal);\n };\n AstarGridGraph.prototype.searchPath = function (start, goal) {\n return AStarPathfinder.searchPath(this, start, goal);\n };\n AstarGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this.dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n AstarGridGraph.prototype.cost = function (from, to) {\n this._updateHashSets();\n return this._weightedNodesSet.has(Vector2Utils.toHash(to)) ? this.weightedNodeWeight : this.defaultWeight;\n };\n AstarGridGraph.prototype.heuristic = function (node, goal) {\n return Vector2Utils.manhattanDistance(node, goal);\n };\n AstarGridGraph.prototype.getStats = function () {\n this._updateHashSets();\n return {\n walls: this.walls.length,\n weightedNodes: this.weightedNodes.length,\n gridSize: \"\".concat(this._width, \"x\").concat(this._height),\n wallsSetSize: this._wallsSet.size,\n weightedNodesSetSize: this._weightedNodesSet.size\n };\n };\n return AstarGridGraph;\n}());\nexport { AstarGridGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nvar BreadthFirstPathfinder = (function () {\n function BreadthFirstPathfinder() {\n }\n BreadthFirstPathfinder.search = function (graph, start, goal, cameFrom) {\n var frontier = [];\n var visited = new Set();\n var pathMap = cameFrom || new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return true;\n }\n frontier.push(start);\n visited.add(startHash);\n while (frontier.length > 0) {\n var current = frontier.shift();\n var currentHash = Vector2Utils.toHash(current);\n if (currentHash === goalHash) {\n return true;\n }\n for (var _i = 0, _a = graph.getNeighbors(current); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (visited.has(neighborHash)) {\n continue;\n }\n visited.add(neighborHash);\n pathMap.set(neighborHash, current);\n frontier.push(neighbor);\n }\n }\n return false;\n };\n BreadthFirstPathfinder.searchPath = function (graph, start, goal) {\n var cameFrom = new Map();\n if (this.search(graph, start, goal, cameFrom)) {\n return this.reconstructPath(cameFrom, start, goal);\n }\n return [];\n };\n BreadthFirstPathfinder.reconstructPath = function (cameFrom, start, goal) {\n var path = [];\n var current = goal;\n var startHash = Vector2Utils.toHash(start);\n while (Vector2Utils.toHash(current) !== startHash) {\n path.unshift(current);\n var currentHash = Vector2Utils.toHash(current);\n var parent_1 = cameFrom.get(currentHash);\n if (!parent_1)\n break;\n current = parent_1;\n }\n path.unshift(start);\n return path;\n };\n return BreadthFirstPathfinder;\n}());\nexport { BreadthFirstPathfinder };\n","var UnweightedGraph = (function () {\n function UnweightedGraph() {\n this.edges = new Map();\n }\n UnweightedGraph.prototype.addEdgesForNode = function (node, neighbors) {\n this.edges.set(node, neighbors);\n return this;\n };\n UnweightedGraph.prototype.getNeighbors = function (node) {\n return this.edges.get(node) || [];\n };\n return UnweightedGraph;\n}());\nexport { UnweightedGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { BreadthFirstPathfinder } from './BreadthFirstPathfinder';\nvar UnweightedGridGraph = (function () {\n function UnweightedGridGraph(width, height, allowDiagonalSearch) {\n if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }\n this.walls = [];\n this._neighbors = [];\n this._width = width;\n this._height = height;\n this._dirs = allowDiagonalSearch ? UnweightedGridGraph.COMPASS_DIRS : UnweightedGridGraph.CARDINAL_DIRS;\n }\n UnweightedGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n UnweightedGridGraph.prototype.isNodePassable = function (node) {\n return !this.walls.find(function (wall) { return Vector2Utils.equals(wall, node); });\n };\n UnweightedGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this._dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n UnweightedGridGraph.prototype.searchPath = function (start, goal) {\n return BreadthFirstPathfinder.searchPath(this, start, goal);\n };\n UnweightedGridGraph.prototype.hasPath = function (start, goal) {\n return BreadthFirstPathfinder.search(this, start, goal);\n };\n UnweightedGridGraph.CARDINAL_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n UnweightedGridGraph.COMPASS_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(1, -1),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(-1, 1),\n Vector2Utils.create(0, 1),\n Vector2Utils.create(1, 1),\n ];\n return UnweightedGridGraph;\n}());\nexport { UnweightedGridGraph };\n"],"names":["this"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pathfinding.mjs","sources":["../bin/Types/IVector2.js","../bin/Utils/PriorityQueue.js","../bin/AI/Pathfinding/AStar/AStarPathfinder.js","../bin/AI/Pathfinding/AStar/AstarGridGraph.js","../bin/AI/Pathfinding/BreadthFirst/BreadthFirstPathfinder.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGraph.js","../bin/AI/Pathfinding/BreadthFirst/UnweightedGridGraph.js"],"sourcesContent":["var Vector2Utils = (function () {\n function Vector2Utils() {\n }\n Vector2Utils.equals = function (a, b) {\n if (a.equals) {\n return a.equals(b);\n }\n return a.x === b.x && a.y === b.y;\n };\n Vector2Utils.create = function (x, y) {\n return { x: x, y: y };\n };\n Vector2Utils.clone = function (vector) {\n return { x: vector.x, y: vector.y };\n };\n Vector2Utils.add = function (a, b) {\n return { x: a.x + b.x, y: a.y + b.y };\n };\n Vector2Utils.manhattanDistance = function (a, b) {\n return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);\n };\n Vector2Utils.distance = function (a, b) {\n var dx = a.x - b.x;\n var dy = a.y - b.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Vector2Utils.toHash = function (vector) {\n var x = (vector.x + this.MAX_COORD) | 0;\n var y = (vector.y + this.MAX_COORD) | 0;\n return (x << 16) | y;\n };\n Vector2Utils.toKey = function (vector) {\n return \"\".concat(vector.x, \",\").concat(vector.y);\n };\n Vector2Utils.fromHash = function (hash) {\n var x = (hash >> 16) - this.MAX_COORD;\n var y = (hash & 0xFFFF) - this.MAX_COORD;\n return { x: x, y: y };\n };\n Vector2Utils.HASH_MULTIPLIER = 73856093;\n Vector2Utils.MAX_COORD = 32767;\n return Vector2Utils;\n}());\nexport { Vector2Utils };\n","var PriorityQueue = (function () {\n function PriorityQueue() {\n this._heap = [];\n this._size = 0;\n }\n Object.defineProperty(PriorityQueue.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PriorityQueue.prototype, \"isEmpty\", {\n get: function () {\n return this._size === 0;\n },\n enumerable: false,\n configurable: true\n });\n PriorityQueue.prototype.clear = function () {\n this._heap.length = 0;\n this._size = 0;\n };\n PriorityQueue.prototype.enqueue = function (item) {\n this._heap[this._size] = item;\n this._bubbleUp(this._size);\n this._size++;\n };\n PriorityQueue.prototype.dequeue = function () {\n if (this._size === 0) {\n return undefined;\n }\n var result = this._heap[0];\n this._size--;\n if (this._size > 0) {\n this._heap[0] = this._heap[this._size];\n this._bubbleDown(0);\n }\n return result;\n };\n PriorityQueue.prototype.peek = function () {\n return this._size > 0 ? this._heap[0] : undefined;\n };\n PriorityQueue.prototype._bubbleUp = function (index) {\n while (index > 0) {\n var parentIndex = Math.floor((index - 1) / 2);\n if (this._heap[index].priority >= this._heap[parentIndex].priority) {\n break;\n }\n this._swap(index, parentIndex);\n index = parentIndex;\n }\n };\n PriorityQueue.prototype._bubbleDown = function (index) {\n while (true) {\n var minIndex = index;\n var leftChild = 2 * index + 1;\n var rightChild = 2 * index + 2;\n if (leftChild < this._size &&\n this._heap[leftChild].priority < this._heap[minIndex].priority) {\n minIndex = leftChild;\n }\n if (rightChild < this._size &&\n this._heap[rightChild].priority < this._heap[minIndex].priority) {\n minIndex = rightChild;\n }\n if (minIndex === index) {\n break;\n }\n this._swap(index, minIndex);\n index = minIndex;\n }\n };\n PriorityQueue.prototype._swap = function (i, j) {\n var temp = this._heap[i];\n this._heap[i] = this._heap[j];\n this._heap[j] = temp;\n };\n return PriorityQueue;\n}());\nexport { PriorityQueue };\n","var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { Vector2Utils } from '../../../Types/IVector2';\nimport { PriorityQueue } from '../../../Utils/PriorityQueue';\nvar AStarNode = (function () {\n function AStarNode(node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n }\n AStarNode.prototype.updateCosts = function (gCost, hCost, parent) {\n if (parent === void 0) { parent = null; }\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n };\n AStarNode.prototype.updateNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n this.node = node;\n this.gCost = gCost;\n this.hCost = hCost;\n this.priority = gCost + hCost;\n this.parent = parent;\n this.hash = Vector2Utils.toHash(node);\n };\n AStarNode.prototype.reset = function () {\n this.node = null;\n this.priority = 0;\n this.gCost = 0;\n this.hCost = 0;\n this.parent = null;\n this.hash = 0;\n };\n return AStarNode;\n}());\nvar AStarPathfinder = (function () {\n function AStarPathfinder() {\n }\n AStarPathfinder._getNode = function (node, gCost, hCost, parent) {\n if (gCost === void 0) { gCost = 0; }\n if (hCost === void 0) { hCost = 0; }\n if (parent === void 0) { parent = null; }\n var astarNode = this._nodePool.pop();\n if (!astarNode) {\n astarNode = new AStarNode(node, gCost, hCost, parent);\n }\n else {\n astarNode.updateNode(node, gCost, hCost, parent);\n }\n return astarNode;\n };\n AStarPathfinder._recycleNode = function (node) {\n if (this._nodePool.length < 1000) {\n node.reset();\n this._nodePool.push(node);\n }\n };\n AStarPathfinder.search = function (graph, start, goal) {\n var openSet = new PriorityQueue();\n var closedSet = new Set();\n var openSetMap = new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return { found: true, goalNode: this._getNode(start, 0, 0) };\n }\n if (!graph.isNodePassable(start)) {\n return { found: false, openSetNodes: [] };\n }\n var startNode = this._getNode(start, 0, graph.heuristic(start, goal));\n openSet.enqueue(startNode);\n openSetMap.set(startHash, startNode);\n var goalNode;\n var processedNodes = [];\n while (!openSet.isEmpty) {\n var current = openSet.dequeue();\n var currentHash = current.hash;\n openSetMap.delete(currentHash);\n if (currentHash === goalHash) {\n goalNode = current;\n break;\n }\n closedSet.add(currentHash);\n for (var _i = 0, _a = graph.getNeighbors(current.node); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (closedSet.has(neighborHash)) {\n continue;\n }\n var tentativeGScore = current.gCost + graph.cost(current.node, neighbor);\n var existingNode = openSetMap.get(neighborHash);\n if (existingNode) {\n if (tentativeGScore < existingNode.gCost) {\n var hCost = existingNode.hCost;\n existingNode.updateCosts(tentativeGScore, hCost, current);\n }\n }\n else {\n var hCost = graph.heuristic(neighbor, goal);\n var neighborNode = this._getNode(neighbor, tentativeGScore, hCost, current);\n openSet.enqueue(neighborNode);\n openSetMap.set(neighborHash, neighborNode);\n }\n }\n processedNodes.push(current);\n }\n var remainingNodes = [];\n while (!openSet.isEmpty) {\n remainingNodes.push(openSet.dequeue());\n }\n var allNodesToRecycle = __spreadArray(__spreadArray([], processedNodes, true), remainingNodes, true);\n return { found: !!goalNode, goalNode: goalNode, openSetNodes: allNodesToRecycle };\n };\n AStarPathfinder.searchPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (!result.found || !result.goalNode) {\n if (result.openSetNodes) {\n for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {\n var node = _a[_i];\n this._recycleNode(node);\n }\n }\n return [];\n }\n var path = this.reconstructPathFromNode(result.goalNode);\n if (result.openSetNodes) {\n for (var _b = 0, _c = result.openSetNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._recycleNode(node);\n }\n }\n return path;\n };\n AStarPathfinder.reconstructPathFromNode = function (goalNode) {\n this._tempPath.length = 0;\n var current = goalNode;\n while (current) {\n this._tempPath.unshift(current.node);\n current = current.parent;\n }\n return __spreadArray([], this._tempPath, true);\n };\n AStarPathfinder.hasPath = function (graph, start, goal) {\n var result = this.search(graph, start, goal);\n if (result.goalNode) {\n this._recycleNode(result.goalNode);\n }\n if (result.openSetNodes) {\n for (var _i = 0, _a = result.openSetNodes; _i < _a.length; _i++) {\n var node = _a[_i];\n if (node !== result.goalNode) {\n this._recycleNode(node);\n }\n }\n }\n return result.found;\n };\n AStarPathfinder.clearPool = function () {\n this._nodePool.length = 0;\n this._tempPath.length = 0;\n };\n AStarPathfinder.getPoolStats = function () {\n return {\n poolSize: this._nodePool.length,\n maxPoolSize: 1000\n };\n };\n AStarPathfinder._nodePool = [];\n AStarPathfinder._tempPath = [];\n return AStarPathfinder;\n}());\nexport { AStarPathfinder };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { AStarPathfinder } from './AStarPathfinder';\nvar AstarGridGraph = (function () {\n function AstarGridGraph(width, height) {\n this.dirs = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n this.walls = [];\n this.weightedNodes = [];\n this.defaultWeight = 1;\n this.weightedNodeWeight = 5;\n this._neighbors = new Array(4);\n this._wallsSet = new Set();\n this._weightedNodesSet = new Set();\n this._wallsDirty = true;\n this._weightedNodesDirty = true;\n this._width = width;\n this._height = height;\n }\n AstarGridGraph.prototype.addWall = function (wall) {\n this.walls.push(wall);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.addWalls = function (walls) {\n var _a;\n (_a = this.walls).push.apply(_a, walls);\n this._wallsDirty = true;\n };\n AstarGridGraph.prototype.clearWalls = function () {\n this.walls.length = 0;\n this._wallsSet.clear();\n this._wallsDirty = false;\n };\n AstarGridGraph.prototype.addWeightedNode = function (node) {\n this.weightedNodes.push(node);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.addWeightedNodes = function (nodes) {\n var _a;\n (_a = this.weightedNodes).push.apply(_a, nodes);\n this._weightedNodesDirty = true;\n };\n AstarGridGraph.prototype.clearWeightedNodes = function () {\n this.weightedNodes.length = 0;\n this._weightedNodesSet.clear();\n this._weightedNodesDirty = false;\n };\n AstarGridGraph.prototype._updateHashSets = function () {\n if (this._wallsDirty) {\n this._wallsSet.clear();\n for (var _i = 0, _a = this.walls; _i < _a.length; _i++) {\n var wall = _a[_i];\n this._wallsSet.add(Vector2Utils.toHash(wall));\n }\n this._wallsDirty = false;\n }\n if (this._weightedNodesDirty) {\n this._weightedNodesSet.clear();\n for (var _b = 0, _c = this.weightedNodes; _b < _c.length; _b++) {\n var node = _c[_b];\n this._weightedNodesSet.add(Vector2Utils.toHash(node));\n }\n this._weightedNodesDirty = false;\n }\n };\n AstarGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n AstarGridGraph.prototype.isNodePassable = function (node) {\n this._updateHashSets();\n return !this._wallsSet.has(Vector2Utils.toHash(node));\n };\n AstarGridGraph.prototype.search = function (start, goal) {\n return AStarPathfinder.hasPath(this, start, goal);\n };\n AstarGridGraph.prototype.searchPath = function (start, goal) {\n return AStarPathfinder.searchPath(this, start, goal);\n };\n AstarGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this.dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n AstarGridGraph.prototype.cost = function (from, to) {\n this._updateHashSets();\n return this._weightedNodesSet.has(Vector2Utils.toHash(to)) ? this.weightedNodeWeight : this.defaultWeight;\n };\n AstarGridGraph.prototype.heuristic = function (node, goal) {\n return Vector2Utils.manhattanDistance(node, goal);\n };\n AstarGridGraph.prototype.getStats = function () {\n this._updateHashSets();\n return {\n walls: this.walls.length,\n weightedNodes: this.weightedNodes.length,\n gridSize: \"\".concat(this._width, \"x\").concat(this._height),\n wallsSetSize: this._wallsSet.size,\n weightedNodesSetSize: this._weightedNodesSet.size\n };\n };\n return AstarGridGraph;\n}());\nexport { AstarGridGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nvar BreadthFirstPathfinder = (function () {\n function BreadthFirstPathfinder() {\n }\n BreadthFirstPathfinder.search = function (graph, start, goal, cameFrom) {\n var frontier = [];\n var visited = new Set();\n var pathMap = cameFrom || new Map();\n var startHash = Vector2Utils.toHash(start);\n var goalHash = Vector2Utils.toHash(goal);\n if (startHash === goalHash) {\n return true;\n }\n frontier.push(start);\n visited.add(startHash);\n while (frontier.length > 0) {\n var current = frontier.shift();\n var currentHash = Vector2Utils.toHash(current);\n if (currentHash === goalHash) {\n return true;\n }\n for (var _i = 0, _a = graph.getNeighbors(current); _i < _a.length; _i++) {\n var neighbor = _a[_i];\n var neighborHash = Vector2Utils.toHash(neighbor);\n if (visited.has(neighborHash)) {\n continue;\n }\n visited.add(neighborHash);\n pathMap.set(neighborHash, current);\n frontier.push(neighbor);\n }\n }\n return false;\n };\n BreadthFirstPathfinder.searchPath = function (graph, start, goal) {\n var cameFrom = new Map();\n if (this.search(graph, start, goal, cameFrom)) {\n return this.reconstructPath(cameFrom, start, goal);\n }\n return [];\n };\n BreadthFirstPathfinder.reconstructPath = function (cameFrom, start, goal) {\n var path = [];\n var current = goal;\n var startHash = Vector2Utils.toHash(start);\n while (Vector2Utils.toHash(current) !== startHash) {\n path.unshift(current);\n var currentHash = Vector2Utils.toHash(current);\n var parent_1 = cameFrom.get(currentHash);\n if (!parent_1)\n break;\n current = parent_1;\n }\n path.unshift(start);\n return path;\n };\n return BreadthFirstPathfinder;\n}());\nexport { BreadthFirstPathfinder };\n","var UnweightedGraph = (function () {\n function UnweightedGraph() {\n this.edges = new Map();\n }\n UnweightedGraph.prototype.addEdgesForNode = function (node, neighbors) {\n this.edges.set(node, neighbors);\n return this;\n };\n UnweightedGraph.prototype.getNeighbors = function (node) {\n return this.edges.get(node) || [];\n };\n return UnweightedGraph;\n}());\nexport { UnweightedGraph };\n","import { Vector2Utils } from '../../../Types/IVector2';\nimport { BreadthFirstPathfinder } from './BreadthFirstPathfinder';\nvar UnweightedGridGraph = (function () {\n function UnweightedGridGraph(width, height, allowDiagonalSearch) {\n if (allowDiagonalSearch === void 0) { allowDiagonalSearch = false; }\n this.walls = [];\n this._neighbors = [];\n this._width = width;\n this._height = height;\n this._dirs = allowDiagonalSearch ? UnweightedGridGraph.COMPASS_DIRS : UnweightedGridGraph.CARDINAL_DIRS;\n }\n UnweightedGridGraph.prototype.isNodeInBounds = function (node) {\n return 0 <= node.x && node.x < this._width && 0 <= node.y && node.y < this._height;\n };\n UnweightedGridGraph.prototype.isNodePassable = function (node) {\n return !this.walls.find(function (wall) { return Vector2Utils.equals(wall, node); });\n };\n UnweightedGridGraph.prototype.getNeighbors = function (node) {\n this._neighbors.length = 0;\n for (var _i = 0, _a = this._dirs; _i < _a.length; _i++) {\n var dir = _a[_i];\n var next = Vector2Utils.add(node, dir);\n if (this.isNodeInBounds(next) && this.isNodePassable(next)) {\n this._neighbors.push(next);\n }\n }\n return this._neighbors;\n };\n UnweightedGridGraph.prototype.searchPath = function (start, goal) {\n return BreadthFirstPathfinder.searchPath(this, start, goal);\n };\n UnweightedGridGraph.prototype.hasPath = function (start, goal) {\n return BreadthFirstPathfinder.search(this, start, goal);\n };\n UnweightedGridGraph.CARDINAL_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(0, 1)\n ];\n UnweightedGridGraph.COMPASS_DIRS = [\n Vector2Utils.create(1, 0),\n Vector2Utils.create(1, -1),\n Vector2Utils.create(0, -1),\n Vector2Utils.create(-1, -1),\n Vector2Utils.create(-1, 0),\n Vector2Utils.create(-1, 1),\n Vector2Utils.create(0, 1),\n Vector2Utils.create(1, 1),\n ];\n return UnweightedGridGraph;\n}());\nexport { UnweightedGridGraph };\n"],"names":["this"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esengine/pathfinding",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "寻路算法库,支持A*、广度优先等算法,适用于Cocos Creator、Laya等游戏引擎",
|
|
5
5
|
"main": "dist/pathfinding.cjs",
|
|
6
6
|
"module": "dist/pathfinding.mjs",
|
|
@@ -26,7 +26,12 @@
|
|
|
26
26
|
"lib": "lib"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
|
-
"test": "
|
|
29
|
+
"test": "jest",
|
|
30
|
+
"test:watch": "jest --watch",
|
|
31
|
+
"test:coverage": "jest --coverage",
|
|
32
|
+
"test:mocha": "mocha --recursive --reporter tap --growl",
|
|
33
|
+
"type-check": "tsc --noEmit",
|
|
34
|
+
"lint": "npm run eslint",
|
|
30
35
|
"eslint": "eslint src --ext .ts",
|
|
31
36
|
"clean": "rimraf bin dist",
|
|
32
37
|
"build:ts": "tsc",
|
|
@@ -35,6 +40,8 @@
|
|
|
35
40
|
"build:watch": "tsc --watch",
|
|
36
41
|
"rebuild": "npm run clean && npm run build",
|
|
37
42
|
"dev": "npm run build:ts && rollup -c --watch",
|
|
43
|
+
"ci": "npm run type-check && npm run test && npm run build",
|
|
44
|
+
"prepublishOnly": "npm run ci",
|
|
38
45
|
"publish:patch": "npm version patch && npm run build && npm publish"
|
|
39
46
|
},
|
|
40
47
|
"author": "yhh",
|
|
@@ -42,11 +49,17 @@
|
|
|
42
49
|
"devDependencies": {
|
|
43
50
|
"@rollup/plugin-commonjs": "^28.0.3",
|
|
44
51
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
52
|
+
"@types/jest": "^29.5.12",
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
54
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
55
|
+
"eslint": "^8.0.0",
|
|
56
|
+
"jest": "^29.7.0",
|
|
57
|
+
"ts-jest": "^29.1.2",
|
|
45
58
|
"rimraf": "^5.0.0",
|
|
46
59
|
"rollup": "^4.42.0",
|
|
47
60
|
"rollup-plugin-dts": "^6.2.1",
|
|
48
|
-
"typedoc": "^0.25.
|
|
49
|
-
"typescript": "^5.
|
|
61
|
+
"typedoc": "^0.25.13",
|
|
62
|
+
"typescript": "^5.4.5"
|
|
50
63
|
},
|
|
51
64
|
"dependencies": {
|
|
52
65
|
"@esengine/ecs-framework": "^2.0.5"
|