tilemap-parser 0.1.0
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/LICENSE +21 -0
- package/README.md +53 -0
- package/dist/core/errors.d.ts +13 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +13 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/loaders.d.ts +19 -0
- package/dist/core/loaders.d.ts.map +1 -0
- package/dist/core/loaders.js +50 -0
- package/dist/core/loaders.js.map +1 -0
- package/dist/core/parser/animation.d.ts +35 -0
- package/dist/core/parser/animation.d.ts.map +1 -0
- package/dist/core/parser/animation.js +178 -0
- package/dist/core/parser/animation.js.map +1 -0
- package/dist/core/parser/coerce.d.ts +13 -0
- package/dist/core/parser/coerce.d.ts.map +1 -0
- package/dist/core/parser/coerce.js +109 -0
- package/dist/core/parser/coerce.js.map +1 -0
- package/dist/core/parser/collision.d.ts +98 -0
- package/dist/core/parser/collision.d.ts.map +1 -0
- package/dist/core/parser/collision.js +486 -0
- package/dist/core/parser/collision.js.map +1 -0
- package/dist/core/parser/index.d.ts +7 -0
- package/dist/core/parser/index.d.ts.map +1 -0
- package/dist/core/parser/index.js +7 -0
- package/dist/core/parser/index.js.map +1 -0
- package/dist/core/parser/map.d.ts +132 -0
- package/dist/core/parser/map.d.ts.map +1 -0
- package/dist/core/parser/map.js +416 -0
- package/dist/core/parser/map.js.map +1 -0
- package/dist/core/parser/node.d.ts +14 -0
- package/dist/core/parser/node.d.ts.map +1 -0
- package/dist/core/parser/node.js +40 -0
- package/dist/core/parser/node.js.map +1 -0
- package/dist/core/parser/particle.d.ts +68 -0
- package/dist/core/parser/particle.d.ts.map +1 -0
- package/dist/core/parser/particle.js +341 -0
- package/dist/core/parser/particle.js.map +1 -0
- package/dist/core/parser/tileanim.d.ts +31 -0
- package/dist/core/parser/tileanim.d.ts.map +1 -0
- package/dist/core/parser/tileanim.js +182 -0
- package/dist/core/parser/tileanim.js.map +1 -0
- package/dist/core/runtime/body.d.ts +27 -0
- package/dist/core/runtime/body.d.ts.map +1 -0
- package/dist/core/runtime/body.js +105 -0
- package/dist/core/runtime/body.js.map +1 -0
- package/dist/core/runtime/collision/hit.d.ts +19 -0
- package/dist/core/runtime/collision/hit.d.ts.map +1 -0
- package/dist/core/runtime/collision/hit.js +87 -0
- package/dist/core/runtime/collision/hit.js.map +1 -0
- package/dist/core/runtime/collision/index.d.ts +4 -0
- package/dist/core/runtime/collision/index.d.ts.map +1 -0
- package/dist/core/runtime/collision/index.js +4 -0
- package/dist/core/runtime/collision/index.js.map +1 -0
- package/dist/core/runtime/collision/manager.d.ts +20 -0
- package/dist/core/runtime/collision/manager.d.ts.map +1 -0
- package/dist/core/runtime/collision/manager.js +142 -0
- package/dist/core/runtime/collision/manager.js.map +1 -0
- package/dist/core/runtime/collision/shapes.d.ts +10 -0
- package/dist/core/runtime/collision/shapes.d.ts.map +1 -0
- package/dist/core/runtime/collision/shapes.js +193 -0
- package/dist/core/runtime/collision/shapes.js.map +1 -0
- package/dist/core/runtime/collision_cache.d.ts +17 -0
- package/dist/core/runtime/collision_cache.d.ts.map +1 -0
- package/dist/core/runtime/collision_cache.js +78 -0
- package/dist/core/runtime/collision_cache.js.map +1 -0
- package/dist/core/runtime/index.d.ts +9 -0
- package/dist/core/runtime/index.d.ts.map +1 -0
- package/dist/core/runtime/index.js +9 -0
- package/dist/core/runtime/index.js.map +1 -0
- package/dist/core/runtime/movement/grounded.d.ts +12 -0
- package/dist/core/runtime/movement/grounded.d.ts.map +1 -0
- package/dist/core/runtime/movement/grounded.js +97 -0
- package/dist/core/runtime/movement/grounded.js.map +1 -0
- package/dist/core/runtime/movement/index.d.ts +8 -0
- package/dist/core/runtime/movement/index.d.ts.map +1 -0
- package/dist/core/runtime/movement/index.js +8 -0
- package/dist/core/runtime/movement/index.js.map +1 -0
- package/dist/core/runtime/movement/platformer.d.ts +15 -0
- package/dist/core/runtime/movement/platformer.d.ts.map +1 -0
- package/dist/core/runtime/movement/platformer.js +419 -0
- package/dist/core/runtime/movement/platformer.js.map +1 -0
- package/dist/core/runtime/movement/queries.d.ts +21 -0
- package/dist/core/runtime/movement/queries.d.ts.map +1 -0
- package/dist/core/runtime/movement/queries.js +326 -0
- package/dist/core/runtime/movement/queries.js.map +1 -0
- package/dist/core/runtime/movement/rpg.d.ts +10 -0
- package/dist/core/runtime/movement/rpg.d.ts.map +1 -0
- package/dist/core/runtime/movement/rpg.js +47 -0
- package/dist/core/runtime/movement/rpg.js.map +1 -0
- package/dist/core/runtime/movement/runner.d.ts +52 -0
- package/dist/core/runtime/movement/runner.d.ts.map +1 -0
- package/dist/core/runtime/movement/runner.js +220 -0
- package/dist/core/runtime/movement/runner.js.map +1 -0
- package/dist/core/runtime/movement/slide.d.ts +12 -0
- package/dist/core/runtime/movement/slide.d.ts.map +1 -0
- package/dist/core/runtime/movement/slide.js +145 -0
- package/dist/core/runtime/movement/slide.js.map +1 -0
- package/dist/core/runtime/movement/types.d.ts +22 -0
- package/dist/core/runtime/movement/types.d.ts.map +1 -0
- package/dist/core/runtime/movement/types.js +21 -0
- package/dist/core/runtime/movement/types.js.map +1 -0
- package/dist/core/runtime/navigation/index.d.ts +4 -0
- package/dist/core/runtime/navigation/index.d.ts.map +1 -0
- package/dist/core/runtime/navigation/index.js +4 -0
- package/dist/core/runtime/navigation/index.js.map +1 -0
- package/dist/core/runtime/navigation/nav_grid.d.ts +36 -0
- package/dist/core/runtime/navigation/nav_grid.d.ts.map +1 -0
- package/dist/core/runtime/navigation/nav_grid.js +245 -0
- package/dist/core/runtime/navigation/nav_grid.js.map +1 -0
- package/dist/core/runtime/navigation/path_follower.d.ts +19 -0
- package/dist/core/runtime/navigation/path_follower.d.ts.map +1 -0
- package/dist/core/runtime/navigation/path_follower.js +59 -0
- package/dist/core/runtime/navigation/path_follower.js.map +1 -0
- package/dist/core/runtime/navigation/pathfinder.d.ts +8 -0
- package/dist/core/runtime/navigation/pathfinder.d.ts.map +1 -0
- package/dist/core/runtime/navigation/pathfinder.js +114 -0
- package/dist/core/runtime/navigation/pathfinder.js.map +1 -0
- package/dist/core/runtime/polygon_query.d.ts +13 -0
- package/dist/core/runtime/polygon_query.d.ts.map +1 -0
- package/dist/core/runtime/polygon_query.js +462 -0
- package/dist/core/runtime/polygon_query.js.map +1 -0
- package/dist/core/runtime/protocols.d.ts +15 -0
- package/dist/core/runtime/protocols.d.ts.map +1 -0
- package/dist/core/runtime/protocols.js +2 -0
- package/dist/core/runtime/protocols.js.map +1 -0
- package/dist/core/runtime/world.d.ts +47 -0
- package/dist/core/runtime/world.d.ts.map +1 -0
- package/dist/core/runtime/world.js +272 -0
- package/dist/core/runtime/world.js.map +1 -0
- package/dist/core/utils/geometry.d.ts +25 -0
- package/dist/core/utils/geometry.d.ts.map +1 -0
- package/dist/core/utils/geometry.js +485 -0
- package/dist/core/utils/geometry.js.map +1 -0
- package/dist/core/utils/index.d.ts +2 -0
- package/dist/core/utils/index.d.ts.map +1 -0
- package/dist/core/utils/index.js +2 -0
- package/dist/core/utils/index.js.map +1 -0
- package/dist/core/vec.d.ts +13 -0
- package/dist/core/vec.d.ts.map +1 -0
- package/dist/core/vec.js +20 -0
- package/dist/core/vec.js.map +1 -0
- package/dist/phaser/anim.d.ts +8 -0
- package/dist/phaser/anim.d.ts.map +1 -0
- package/dist/phaser/anim.js +24 -0
- package/dist/phaser/anim.js.map +1 -0
- package/dist/phaser/camera.d.ts +29 -0
- package/dist/phaser/camera.d.ts.map +1 -0
- package/dist/phaser/camera.js +19 -0
- package/dist/phaser/camera.js.map +1 -0
- package/dist/phaser/images.d.ts +13 -0
- package/dist/phaser/images.d.ts.map +1 -0
- package/dist/phaser/images.js +40 -0
- package/dist/phaser/images.js.map +1 -0
- package/dist/phaser/index.d.ts +12 -0
- package/dist/phaser/index.d.ts.map +1 -0
- package/dist/phaser/index.js +12 -0
- package/dist/phaser/index.js.map +1 -0
- package/dist/phaser/keys.d.ts +11 -0
- package/dist/phaser/keys.d.ts.map +1 -0
- package/dist/phaser/keys.js +29 -0
- package/dist/phaser/keys.js.map +1 -0
- package/dist/phaser/loader.d.ts +9 -0
- package/dist/phaser/loader.d.ts.map +1 -0
- package/dist/phaser/loader.js +23 -0
- package/dist/phaser/loader.js.map +1 -0
- package/dist/phaser/objects.d.ts +20 -0
- package/dist/phaser/objects.d.ts.map +1 -0
- package/dist/phaser/objects.js +56 -0
- package/dist/phaser/objects.js.map +1 -0
- package/dist/phaser/particles.d.ts +34 -0
- package/dist/phaser/particles.d.ts.map +1 -0
- package/dist/phaser/particles.js +24 -0
- package/dist/phaser/particles.js.map +1 -0
- package/dist/phaser/spawns.d.ts +8 -0
- package/dist/phaser/spawns.d.ts.map +1 -0
- package/dist/phaser/spawns.js +29 -0
- package/dist/phaser/spawns.js.map +1 -0
- package/dist/phaser/sprites.d.ts +23 -0
- package/dist/phaser/sprites.d.ts.map +1 -0
- package/dist/phaser/sprites.js +34 -0
- package/dist/phaser/sprites.js.map +1 -0
- package/dist/phaser/tiles.d.ts +16 -0
- package/dist/phaser/tiles.d.ts.map +1 -0
- package/dist/phaser/tiles.js +76 -0
- package/dist/phaser/tiles.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { flippedData, iterCellEntries } from "../world.js";
|
|
2
|
+
import { TilesetCollision, } from "../../parser/collision.js";
|
|
3
|
+
import { tileKey } from "../../vec.js";
|
|
4
|
+
const identityIds = new WeakMap();
|
|
5
|
+
let nextIdentityId = 1;
|
|
6
|
+
function identityId(obj) {
|
|
7
|
+
const existing = identityIds.get(obj);
|
|
8
|
+
if (existing !== undefined)
|
|
9
|
+
return existing;
|
|
10
|
+
const id = nextIdentityId;
|
|
11
|
+
nextIdentityId += 1;
|
|
12
|
+
identityIds.set(obj, id);
|
|
13
|
+
return id;
|
|
14
|
+
}
|
|
15
|
+
export class NavGrid {
|
|
16
|
+
tileMap;
|
|
17
|
+
tilesetCollision;
|
|
18
|
+
tileSize;
|
|
19
|
+
collisionMask;
|
|
20
|
+
effTw;
|
|
21
|
+
effTh;
|
|
22
|
+
width;
|
|
23
|
+
height;
|
|
24
|
+
walkable;
|
|
25
|
+
gidResolver;
|
|
26
|
+
constructor(tileMap, tilesetCollision, tileSize, options = {}) {
|
|
27
|
+
const renderScale = options.renderScale ?? 1.0;
|
|
28
|
+
this.tileMap = tileMap;
|
|
29
|
+
this.tilesetCollision = tilesetCollision;
|
|
30
|
+
this.gidResolver = options.gidResolver ?? null;
|
|
31
|
+
this.collisionMask = options.collisionMask ?? 0xffffffff;
|
|
32
|
+
this.tileSize = tileSize;
|
|
33
|
+
this.effTw = tileSize[0] * renderScale;
|
|
34
|
+
this.effTh = tileSize[1] * renderScale;
|
|
35
|
+
if (options.mapSize !== null && options.mapSize !== undefined) {
|
|
36
|
+
this.width = options.mapSize[0];
|
|
37
|
+
this.height = options.mapSize[1];
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
let w = 0;
|
|
41
|
+
let h = 0;
|
|
42
|
+
for (const key of tileMap.keys()) {
|
|
43
|
+
const sep = key.indexOf(";");
|
|
44
|
+
const tx = Number(key.slice(0, sep));
|
|
45
|
+
const ty = Number(key.slice(sep + 1));
|
|
46
|
+
if (tx >= w)
|
|
47
|
+
w = tx + 1;
|
|
48
|
+
if (ty >= h)
|
|
49
|
+
h = ty + 1;
|
|
50
|
+
}
|
|
51
|
+
this.width = w;
|
|
52
|
+
this.height = h;
|
|
53
|
+
}
|
|
54
|
+
this.walkable = [];
|
|
55
|
+
for (let y = 0; y < this.height; y += 1) {
|
|
56
|
+
const row = [];
|
|
57
|
+
for (let x = 0; x < this.width; x += 1) {
|
|
58
|
+
row.push(this.isTileWalkable(x, y));
|
|
59
|
+
}
|
|
60
|
+
this.walkable.push(row);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
resolve(tileId) {
|
|
64
|
+
if (this.gidResolver !== null)
|
|
65
|
+
return this.gidResolver(tileId);
|
|
66
|
+
return this.tilesetCollision.tiles.get(tileId) ?? null;
|
|
67
|
+
}
|
|
68
|
+
*iterDatas(cell) {
|
|
69
|
+
for (const [gid, flags] of iterCellEntries(cell)) {
|
|
70
|
+
let data = this.resolve(gid);
|
|
71
|
+
if (data === null)
|
|
72
|
+
continue;
|
|
73
|
+
if (flags !== 0)
|
|
74
|
+
data = flippedData(data, flags, this.tileSize);
|
|
75
|
+
if ((this.collisionMask & data.collisionLayer) === 0)
|
|
76
|
+
continue;
|
|
77
|
+
yield data;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
isTileWalkable(tx, ty) {
|
|
81
|
+
for (const tileData of this.iterDatas(this.tileMap.get(tileKey(tx, ty)))) {
|
|
82
|
+
for (const poly of tileData.shapes) {
|
|
83
|
+
if (poly.isValid() && !poly.oneWay)
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
inBounds(tx, ty) {
|
|
90
|
+
return tx >= 0 && tx < this.width && ty >= 0 && ty < this.height;
|
|
91
|
+
}
|
|
92
|
+
isSolid(tx, ty) {
|
|
93
|
+
if (!this.inBounds(tx, ty))
|
|
94
|
+
return true;
|
|
95
|
+
return !(this.walkable[ty]?.[tx] ?? false);
|
|
96
|
+
}
|
|
97
|
+
isWalkable(tx, ty) {
|
|
98
|
+
if (!this.inBounds(tx, ty))
|
|
99
|
+
return false;
|
|
100
|
+
return this.walkable[ty]?.[tx] ?? false;
|
|
101
|
+
}
|
|
102
|
+
isOneWay(tx, ty) {
|
|
103
|
+
let hasOneWay = false;
|
|
104
|
+
for (const tileData of this.iterDatas(this.tileMap.get(tileKey(tx, ty)))) {
|
|
105
|
+
for (const poly of tileData.shapes) {
|
|
106
|
+
if (!poly.isValid())
|
|
107
|
+
continue;
|
|
108
|
+
if (poly.oneWay)
|
|
109
|
+
hasOneWay = true;
|
|
110
|
+
else
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return hasOneWay;
|
|
115
|
+
}
|
|
116
|
+
copy() {
|
|
117
|
+
const clone = Object.create(NavGrid.prototype);
|
|
118
|
+
clone.tileMap = this.tileMap;
|
|
119
|
+
clone.tilesetCollision =
|
|
120
|
+
this.tilesetCollision;
|
|
121
|
+
clone.tileSize = this.tileSize;
|
|
122
|
+
clone.effTw = this.effTw;
|
|
123
|
+
clone.effTh = this.effTh;
|
|
124
|
+
clone.width = this.width;
|
|
125
|
+
clone.height = this.height;
|
|
126
|
+
clone.walkable = this.walkable.map((row) => [
|
|
127
|
+
...row,
|
|
128
|
+
]);
|
|
129
|
+
clone.gidResolver =
|
|
130
|
+
this.gidResolver;
|
|
131
|
+
clone.collisionMask = this.collisionMask;
|
|
132
|
+
return clone;
|
|
133
|
+
}
|
|
134
|
+
erode(margin) {
|
|
135
|
+
const next = this.copy();
|
|
136
|
+
next.erodeInPlace(margin);
|
|
137
|
+
return next;
|
|
138
|
+
}
|
|
139
|
+
erodeInPlace(margin) {
|
|
140
|
+
const original = this.walkable.map((row) => [...row]);
|
|
141
|
+
const r = Math.ceil(margin + 0.5);
|
|
142
|
+
for (let sy = 0; sy < this.height; sy += 1) {
|
|
143
|
+
for (let sx = 0; sx < this.width; sx += 1) {
|
|
144
|
+
if (!original[sy]?.[sx])
|
|
145
|
+
continue;
|
|
146
|
+
const minTx = Math.max(0, sx - r);
|
|
147
|
+
const maxTx = Math.min(this.width - 1, sx + r);
|
|
148
|
+
const minTy = Math.max(0, sy - r);
|
|
149
|
+
const maxTy = Math.min(this.height - 1, sy + r);
|
|
150
|
+
for (let ty = minTy; ty <= maxTy && (this.walkable[sy]?.[sx] ?? false); ty += 1) {
|
|
151
|
+
for (let tx = minTx; tx <= maxTx; tx += 1) {
|
|
152
|
+
if (original[ty]?.[tx])
|
|
153
|
+
continue;
|
|
154
|
+
const dx = Math.abs(tx - sx);
|
|
155
|
+
const dy = Math.abs(ty - sy);
|
|
156
|
+
const distX = Math.max(0.0, dx - 0.5);
|
|
157
|
+
const distY = Math.max(0.0, dy - 0.5);
|
|
158
|
+
let dist;
|
|
159
|
+
if (distX === 0 && distY === 0)
|
|
160
|
+
dist = 0.0;
|
|
161
|
+
else if (distX === 0)
|
|
162
|
+
dist = distY;
|
|
163
|
+
else if (distY === 0)
|
|
164
|
+
dist = distX;
|
|
165
|
+
else
|
|
166
|
+
dist = Math.hypot(distX, distY);
|
|
167
|
+
if (dist <= margin) {
|
|
168
|
+
const row = this.walkable[sy];
|
|
169
|
+
if (row !== undefined)
|
|
170
|
+
row[sx] = false;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
static forEntity(tileMap, tilesetCollision, tileSize, spriteWidth, spriteHeight = null, renderScale = 1.0, mapSize = null, cache = null, gidResolver = null, collisionMask = 0xffffffff) {
|
|
179
|
+
const tw = tileSize[0] * renderScale;
|
|
180
|
+
const size = Math.max(spriteWidth, spriteHeight ?? spriteWidth);
|
|
181
|
+
const margin = size / 2.0 / tw;
|
|
182
|
+
// Cache key includes every input by identity/value: grids must never be
|
|
183
|
+
// reused across different tile maps, tileset collision data, tile sizes,
|
|
184
|
+
// render scales, map sizes, or gidResolver identities. Each cache is
|
|
185
|
+
// therefore owned by the exact combination that populated it.
|
|
186
|
+
const mapId = identityId(tileMap);
|
|
187
|
+
const collisionId = identityId(tilesetCollision);
|
|
188
|
+
const resolverId = gidResolver === null ? "null" : `fn:${identityId(gidResolver)}`;
|
|
189
|
+
const mapSizeKey = mapSize === null ? "auto" : `${mapSize[0]}x${mapSize[1]}`;
|
|
190
|
+
const key = [
|
|
191
|
+
mapId,
|
|
192
|
+
collisionId,
|
|
193
|
+
`${tileSize[0]}x${tileSize[1]}`,
|
|
194
|
+
renderScale,
|
|
195
|
+
mapSizeKey,
|
|
196
|
+
margin,
|
|
197
|
+
resolverId,
|
|
198
|
+
collisionMask,
|
|
199
|
+
].join("|");
|
|
200
|
+
if (cache !== null) {
|
|
201
|
+
const hit = cache.get(key);
|
|
202
|
+
if (hit !== undefined)
|
|
203
|
+
return hit;
|
|
204
|
+
}
|
|
205
|
+
const nav = new NavGrid(tileMap, tilesetCollision, tileSize, {
|
|
206
|
+
renderScale,
|
|
207
|
+
mapSize,
|
|
208
|
+
gidResolver,
|
|
209
|
+
collisionMask,
|
|
210
|
+
}).erode(margin);
|
|
211
|
+
if (cache !== null)
|
|
212
|
+
cache.set(key, nav);
|
|
213
|
+
return nav;
|
|
214
|
+
}
|
|
215
|
+
getNeighbors(tx, ty, diagonals = false) {
|
|
216
|
+
const neighbors = [];
|
|
217
|
+
const orthogonal = [
|
|
218
|
+
[0, -1],
|
|
219
|
+
[0, 1],
|
|
220
|
+
[-1, 0],
|
|
221
|
+
[1, 0],
|
|
222
|
+
];
|
|
223
|
+
for (const [dx, dy] of orthogonal) {
|
|
224
|
+
if (this.isWalkable(tx + dx, ty + dy))
|
|
225
|
+
neighbors.push([tx + dx, ty + dy]);
|
|
226
|
+
}
|
|
227
|
+
if (diagonals) {
|
|
228
|
+
const diagonal = [
|
|
229
|
+
[-1, -1],
|
|
230
|
+
[1, -1],
|
|
231
|
+
[-1, 1],
|
|
232
|
+
[1, 1],
|
|
233
|
+
];
|
|
234
|
+
for (const [dx, dy] of diagonal) {
|
|
235
|
+
if (!this.isWalkable(tx + dx, ty + dy))
|
|
236
|
+
continue;
|
|
237
|
+
if (!this.isWalkable(tx + dx, ty) || !this.isWalkable(tx, ty + dy))
|
|
238
|
+
continue;
|
|
239
|
+
neighbors.push([tx + dx, ty + dy]);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return neighbors;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=nav_grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav_grid.js","sourceRoot":"","sources":["../../../../src/core/runtime/navigation/nav_grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TilesetCollision } from "../../parser/collision.js";
|
|
2
|
+
import type { Vec2 } from "../../vec.js";
|
|
3
|
+
import type { ICollidable } from "../protocols.js";
|
|
4
|
+
import type { CollisionRunner } from "../movement/runner.js";
|
|
5
|
+
import type { TileMap } from "../world.js";
|
|
6
|
+
export interface FollowResult {
|
|
7
|
+
readonly waypointIndex: number;
|
|
8
|
+
readonly done: boolean;
|
|
9
|
+
readonly hitWallX: boolean;
|
|
10
|
+
readonly hitWallY: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class PathFollower {
|
|
13
|
+
readonly arrivalDistance: number;
|
|
14
|
+
private readonly effTw;
|
|
15
|
+
private readonly effTh;
|
|
16
|
+
constructor(effectiveTileSize: Vec2, arrivalDistance?: number | null);
|
|
17
|
+
updateRpg(sprite: ICollidable, path: readonly Vec2[], waypointIndex: number, runner: CollisionRunner, tilesetCollision: TilesetCollision | null, tileMap: TileMap | null, speed?: number, dt?: number): FollowResult;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=path_follower.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path_follower.d.ts","sourceRoot":"","sources":["../../../../src/core/runtime/navigation/path_follower.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,iBAAiB,EAAE,IAAI,EAAE,eAAe,GAAE,MAAM,GAAG,IAAW;IAO1E,SAAS,CACP,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,eAAe,EACvB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,EACzC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,KAAK,SAAQ,EACb,EAAE,SAAQ,GACT,YAAY;CAsDhB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export class PathFollower {
|
|
2
|
+
arrivalDistance;
|
|
3
|
+
effTw;
|
|
4
|
+
effTh;
|
|
5
|
+
constructor(effectiveTileSize, arrivalDistance = null) {
|
|
6
|
+
this.effTw = effectiveTileSize[0];
|
|
7
|
+
this.effTh = effectiveTileSize[1];
|
|
8
|
+
this.arrivalDistance =
|
|
9
|
+
arrivalDistance ?? Math.hypot(this.effTw, this.effTh) * 0.2;
|
|
10
|
+
}
|
|
11
|
+
updateRpg(sprite, path, waypointIndex, runner, tilesetCollision, tileMap, speed = 200.0, dt = 0.016) {
|
|
12
|
+
if (path.length === 0 || waypointIndex >= path.length) {
|
|
13
|
+
return { waypointIndex, done: true, hitWallX: false, hitWallY: false };
|
|
14
|
+
}
|
|
15
|
+
while (waypointIndex < path.length) {
|
|
16
|
+
const wp = path[waypointIndex];
|
|
17
|
+
if (wp === undefined)
|
|
18
|
+
break;
|
|
19
|
+
const tx = wp[0] * this.effTw + this.effTw * 0.5;
|
|
20
|
+
const ty = wp[1] * this.effTh + this.effTh * 0.5;
|
|
21
|
+
if (Math.hypot(tx - sprite.x, ty - sprite.y) < this.arrivalDistance) {
|
|
22
|
+
waypointIndex += 1;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (waypointIndex >= path.length) {
|
|
29
|
+
return { waypointIndex, done: true, hitWallX: false, hitWallY: false };
|
|
30
|
+
}
|
|
31
|
+
const wp = path[waypointIndex];
|
|
32
|
+
if (wp === undefined) {
|
|
33
|
+
return { waypointIndex, done: true, hitWallX: false, hitWallY: false };
|
|
34
|
+
}
|
|
35
|
+
const tx = wp[0] * this.effTw + this.effTw * 0.5;
|
|
36
|
+
const ty = wp[1] * this.effTh + this.effTh * 0.5;
|
|
37
|
+
const dx = tx - sprite.x;
|
|
38
|
+
const dy = ty - sprite.y;
|
|
39
|
+
const dist = Math.hypot(dx, dy);
|
|
40
|
+
let deltaX = 0.0;
|
|
41
|
+
let deltaY = 0.0;
|
|
42
|
+
if (dist >= 0.01) {
|
|
43
|
+
const step = Math.min(speed * dt, dist);
|
|
44
|
+
deltaX = (dx / dist) * step;
|
|
45
|
+
deltaY = (dy / dist) * step;
|
|
46
|
+
}
|
|
47
|
+
const result = runner.moveRpg(sprite, tilesetCollision, tileMap, deltaX, deltaY);
|
|
48
|
+
if (Math.hypot(tx - sprite.x, ty - sprite.y) < this.arrivalDistance) {
|
|
49
|
+
waypointIndex += 1;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
waypointIndex,
|
|
53
|
+
done: waypointIndex >= path.length,
|
|
54
|
+
hitWallX: result.hitWallX,
|
|
55
|
+
hitWallY: result.hitWallY,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=path_follower.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path_follower.js","sourceRoot":"","sources":["../../../../src/core/runtime/navigation/path_follower.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Vec2 } from "../../vec.js";
|
|
2
|
+
import type { NavGrid } from "./nav_grid.js";
|
|
3
|
+
export declare class Pathfinder {
|
|
4
|
+
readonly navGrid: NavGrid;
|
|
5
|
+
constructor(navGrid: NavGrid);
|
|
6
|
+
findPath(start: Vec2, end: Vec2, maxSteps?: number): Vec2[] | null;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=pathfinder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathfinder.d.ts","sourceRoot":"","sources":["../../../../src/core/runtime/navigation/pathfinder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAoE7C,qBAAa,UAAU;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,OAAO,EAAE,OAAO;IAI5B,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,SAAO,GAAG,IAAI,EAAE,GAAG,IAAI;CAiDjE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
function heapPush(heap, entry) {
|
|
2
|
+
heap.push(entry);
|
|
3
|
+
let i = heap.length - 1;
|
|
4
|
+
while (i > 0) {
|
|
5
|
+
const parent = Math.floor((i - 1) / 2);
|
|
6
|
+
const parentEntry = heap[parent];
|
|
7
|
+
if (parentEntry === undefined || parentEntry.f <= entry.f)
|
|
8
|
+
break;
|
|
9
|
+
const current = heap[i];
|
|
10
|
+
if (current === undefined)
|
|
11
|
+
break;
|
|
12
|
+
heap[i] = parentEntry;
|
|
13
|
+
heap[parent] = current;
|
|
14
|
+
i = parent;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function heapPop(heap) {
|
|
18
|
+
const top = heap[0];
|
|
19
|
+
if (top === undefined)
|
|
20
|
+
return null;
|
|
21
|
+
const last = heap.pop();
|
|
22
|
+
if (heap.length > 0 && last !== undefined) {
|
|
23
|
+
heap[0] = last;
|
|
24
|
+
let i = 0;
|
|
25
|
+
for (;;) {
|
|
26
|
+
const left = 2 * i + 1;
|
|
27
|
+
const right = 2 * i + 2;
|
|
28
|
+
let smallest = i;
|
|
29
|
+
const current = heap[i];
|
|
30
|
+
const leftEntry = heap[left];
|
|
31
|
+
const rightEntry = heap[right];
|
|
32
|
+
if (leftEntry !== undefined &&
|
|
33
|
+
current !== undefined &&
|
|
34
|
+
leftEntry.f < current.f) {
|
|
35
|
+
smallest = left;
|
|
36
|
+
}
|
|
37
|
+
const smallestEntry = heap[smallest];
|
|
38
|
+
if (rightEntry !== undefined &&
|
|
39
|
+
smallestEntry !== undefined &&
|
|
40
|
+
rightEntry.f < smallestEntry.f) {
|
|
41
|
+
smallest = right;
|
|
42
|
+
}
|
|
43
|
+
if (smallest === i)
|
|
44
|
+
break;
|
|
45
|
+
const a = heap[i];
|
|
46
|
+
const b = heap[smallest];
|
|
47
|
+
if (a === undefined || b === undefined)
|
|
48
|
+
break;
|
|
49
|
+
heap[i] = b;
|
|
50
|
+
heap[smallest] = a;
|
|
51
|
+
i = smallest;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return top;
|
|
55
|
+
}
|
|
56
|
+
function manhattan(ax, ay, bx, by) {
|
|
57
|
+
return Math.abs(ax - bx) + Math.abs(ay - by);
|
|
58
|
+
}
|
|
59
|
+
export class Pathfinder {
|
|
60
|
+
navGrid;
|
|
61
|
+
constructor(navGrid) {
|
|
62
|
+
this.navGrid = navGrid;
|
|
63
|
+
}
|
|
64
|
+
findPath(start, end, maxSteps = 2000) {
|
|
65
|
+
const [sx, sy] = start;
|
|
66
|
+
const [ex, ey] = end;
|
|
67
|
+
if (!this.navGrid.isWalkable(ex, ey))
|
|
68
|
+
return null;
|
|
69
|
+
const key = (x, y) => `${x},${y}`;
|
|
70
|
+
const open = [{ f: 0.0, x: sx, y: sy }];
|
|
71
|
+
const cameFrom = new Map();
|
|
72
|
+
const gScore = new Map([[key(sx, sy), 0.0]]);
|
|
73
|
+
const closed = new Set();
|
|
74
|
+
let steps = 0;
|
|
75
|
+
while (open.length > 0 && steps < maxSteps) {
|
|
76
|
+
const current = heapPop(open);
|
|
77
|
+
if (current === null)
|
|
78
|
+
break;
|
|
79
|
+
const currentKey = key(current.x, current.y);
|
|
80
|
+
if (closed.has(currentKey))
|
|
81
|
+
continue;
|
|
82
|
+
closed.add(currentKey);
|
|
83
|
+
steps += 1;
|
|
84
|
+
if (current.x === ex && current.y === ey) {
|
|
85
|
+
const path = [[current.x, current.y]];
|
|
86
|
+
let cursor = currentKey;
|
|
87
|
+
while (cameFrom.has(cursor)) {
|
|
88
|
+
const prev = cameFrom.get(cursor);
|
|
89
|
+
if (prev === undefined)
|
|
90
|
+
break;
|
|
91
|
+
cursor = prev;
|
|
92
|
+
const [px, py] = prev.split(",").map(Number);
|
|
93
|
+
path.push([px, py]);
|
|
94
|
+
}
|
|
95
|
+
return path.reverse();
|
|
96
|
+
}
|
|
97
|
+
for (const [nx, ny] of this.navGrid.getNeighbors(current.x, current.y)) {
|
|
98
|
+
const tentative = (gScore.get(currentKey) ?? Infinity) + 1.0;
|
|
99
|
+
const nKey = key(nx, ny);
|
|
100
|
+
if (tentative < (gScore.get(nKey) ?? Infinity)) {
|
|
101
|
+
cameFrom.set(nKey, currentKey);
|
|
102
|
+
gScore.set(nKey, tentative);
|
|
103
|
+
heapPush(open, {
|
|
104
|
+
f: tentative + manhattan(nx, ny, ex, ey),
|
|
105
|
+
x: nx,
|
|
106
|
+
y: ny,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=pathfinder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathfinder.js","sourceRoot":"","sources":["../../../../src/core/runtime/navigation/pathfinder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CollisionPolygon, TilesetCollision, type TileCollisionData } from "../parser/collision.js";
|
|
2
|
+
import type { Vec2 } from "../vec.js";
|
|
3
|
+
import type { ICollidable } from "./protocols.js";
|
|
4
|
+
import { type TileMap } from "./world.js";
|
|
5
|
+
export declare function pointInPolygon(point: Vec2, vertices: readonly Vec2[]): boolean;
|
|
6
|
+
export declare function rectPolygonCollision(rectX: number, rectY: number, rectW: number, rectH: number, vertices: readonly Vec2[]): boolean;
|
|
7
|
+
export declare function circlePolygonCollision(center: Vec2, radius: number, vertices: readonly Vec2[]): boolean;
|
|
8
|
+
export declare function getSpriteBounds(sprite: ICollidable): [number, number, number, number];
|
|
9
|
+
export declare function checkSpritePolygonCollision(sprite: ICollidable, polygon: CollisionPolygon): boolean;
|
|
10
|
+
export declare function checkSpritePolygonOffset(sprite: ICollidable, polygon: CollisionPolygon, ox: number, oy: number, scale?: number): boolean;
|
|
11
|
+
export declare function rectVsTilemap(left: number, top: number, right: number, bottom: number, tileMap: TileMap, tilesetCollision: TilesetCollision, tileSize: Vec2, renderScale?: number, collisionMask?: number | null): boolean;
|
|
12
|
+
export declare function iterCellDatas(tilesetCollision: TilesetCollision, cell: unknown): TileCollisionData[];
|
|
13
|
+
//# sourceMappingURL=polygon_query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon_query.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/polygon_query.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,gBAAgB,EAEhB,gBAAgB,EAChB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAgC,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAExE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,SAAS,IAAI,EAAE,GACxB,OAAO,CA0BT;AA0DD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,IAAI,EAAE,GACxB,OAAO,CA+CT;AAwED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,IAAI,EAAE,GACxB,OAAO,CA+BT;AA4CD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,GAClB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAkClC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CA2BT;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,SAAM,GACV,OAAO,CAyDT;AAoFD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,IAAI,EACd,WAAW,SAAM,EACjB,aAAa,GAAE,MAAM,GAAG,IAAW,GAClC,OAAO,CA4CT;AAED,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,OAAO,GACZ,iBAAiB,EAAE,CAUrB"}
|