@dzbot/dzstudio-mcp 0.0.0-stage → 0.1.1

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.
Files changed (49) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +162 -2
  3. package/dist/config/config.js +172 -0
  4. package/dist/config/config.js.map +1 -0
  5. package/dist/config/sessions.js +67 -0
  6. package/dist/config/sessions.js.map +1 -0
  7. package/dist/index.js +16 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/mcp/agent.js +1148 -0
  10. package/dist/mcp/agent.js.map +1 -0
  11. package/dist/mcp/server.js +263 -0
  12. package/dist/mcp/server.js.map +1 -0
  13. package/dist/protocol/client.js +134 -0
  14. package/dist/protocol/client.js.map +1 -0
  15. package/dist/protocol/session.js +837 -0
  16. package/dist/protocol/session.js.map +1 -0
  17. package/dist/protocol/transport.js +66 -0
  18. package/dist/protocol/transport.js.map +1 -0
  19. package/dist/scene/chunks.js +30 -0
  20. package/dist/scene/chunks.js.map +1 -0
  21. package/dist/scene/edits.js +183 -0
  22. package/dist/scene/edits.js.map +1 -0
  23. package/dist/scene/float32.js +167 -0
  24. package/dist/scene/float32.js.map +1 -0
  25. package/dist/scene/ids.js +43 -0
  26. package/dist/scene/ids.js.map +1 -0
  27. package/dist/scene/index.js +9 -0
  28. package/dist/scene/index.js.map +1 -0
  29. package/dist/scene/json.js +294 -0
  30. package/dist/scene/json.js.map +1 -0
  31. package/dist/scene/projectload.js +663 -0
  32. package/dist/scene/projectload.js.map +1 -0
  33. package/dist/scene/scene.js +506 -0
  34. package/dist/scene/scene.js.map +1 -0
  35. package/dist/scene/srcjson.js +297 -0
  36. package/dist/scene/srcjson.js.map +1 -0
  37. package/dist/scene/textform.js +257 -0
  38. package/dist/scene/textform.js.map +1 -0
  39. package/dist/scene/types.js +35 -0
  40. package/dist/scene/types.js.map +1 -0
  41. package/dist/world/data.js +604 -0
  42. package/dist/world/data.js.map +1 -0
  43. package/dist/world/format.js +205 -0
  44. package/dist/world/format.js.map +1 -0
  45. package/dist/world/source.js +267 -0
  46. package/dist/world/source.js.map +1 -0
  47. package/dist/world/tools.js +530 -0
  48. package/dist/world/tools.js.map +1 -0
  49. package/package.json +48 -4
@@ -0,0 +1,604 @@
1
+ import { gunzipSync } from 'node:zlib';
2
+ import { decodeRaster, decodeTile, modelId, NO_HIT, POINTS, TILE } from './format.js';
3
+ import { DataCorrupt } from './source.js';
4
+ const DEG = 180 / Math.PI;
5
+ export class ClassIndex {
6
+ source;
7
+ index;
8
+ byLower = new Map();
9
+ byLoose = new Map();
10
+ entries = new Map();
11
+ rasters = new Map();
12
+ asciiLower;
13
+ constructor(source, index) {
14
+ this.source = source;
15
+ this.index = index;
16
+ for (const name of Object.keys(index.classes)) {
17
+ this.byLower.set(name.toLowerCase(), name);
18
+ const loose = name.toLowerCase().replace(/[^a-z0-9]/g, '');
19
+ if (!this.byLoose.has(loose))
20
+ this.byLoose.set(loose, name);
21
+ }
22
+ for (const [id, s] of Object.entries(index.shapes))
23
+ this.entries.set(id, { id, ...s });
24
+ }
25
+ get revision() {
26
+ return this.index.revision;
27
+ }
28
+ static async load(source, revision) {
29
+ return new ClassIndex(source, await source.json(`classes/${revision}/index.json`));
30
+ }
31
+ /** A class by name: exact, then ignoring case, then ignoring case and everything but letters and digits. */
32
+ find(query) {
33
+ const q = String(query);
34
+ const name = this.index.classes[q]
35
+ ? q
36
+ : (this.byLower.get(q.toLowerCase()) ?? this.byLoose.get(q.toLowerCase().replace(/[^a-z0-9]/g, '')));
37
+ if (!name)
38
+ return null;
39
+ const c = this.index.classes[name];
40
+ const e = this.entries.get(c.shape);
41
+ if (!e)
42
+ return null;
43
+ return { name, flags: c.flags, ...e };
44
+ }
45
+ /** Whether the game knows a class: its name ignoring the case of ASCII letters, as the editor looks it up. */
46
+ knows(name) {
47
+ const lower = (t) => t.replace(/[A-Z]/g, (c) => c.toLowerCase());
48
+ this.asciiLower ??= new Set(Object.keys(this.index.classes).map(lower));
49
+ return this.asciiLower.has(lower(name));
50
+ }
51
+ /** A model by its path, or by its model id. */
52
+ shape(modelPathOrId) {
53
+ return this.entries.get(modelPathOrId) ?? this.entries.get(modelId(modelPathOrId)) ?? null;
54
+ }
55
+ /** Box of an object: via the model path first, then via the class name ignoring case. null = box unknown. */
56
+ boxFor(cls, modelPath) {
57
+ const s = modelPath ? this.entries.get(modelId(modelPath)) : undefined;
58
+ if (s && s.clip)
59
+ return s;
60
+ const name = cls ? this.byLower.get(cls.toLowerCase()) : undefined;
61
+ const cs = name ? this.entries.get(this.index.classes[name].shape) : undefined;
62
+ return cs && cs.clip ? cs : null;
63
+ }
64
+ raster(id) {
65
+ let p = this.rasters.get(id);
66
+ if (!p) {
67
+ const s = this.entries.get(id);
68
+ p = !s?.raster
69
+ ? Promise.resolve(null)
70
+ : this.source
71
+ .verified(`classes/${this.revision}/shapes/${id}.bin.gz`, s.raster.bytes, s.raster.sha256)
72
+ .then((gz) => decodeRaster(gunzipSync(gz)));
73
+ p.catch(() => this.rasters.delete(id));
74
+ this.rasters.set(id, p);
75
+ }
76
+ return p;
77
+ }
78
+ }
79
+ export class WorldData {
80
+ source;
81
+ manifest;
82
+ classes;
83
+ cols;
84
+ rows;
85
+ cache = new Map();
86
+ constructor(source, manifest, classes) {
87
+ this.source = source;
88
+ this.manifest = manifest;
89
+ this.classes = classes;
90
+ this.cols = manifest.tile.cols;
91
+ this.rows = manifest.tile.rows;
92
+ }
93
+ get world() {
94
+ return this.manifest.world;
95
+ }
96
+ get revision() {
97
+ return this.manifest.revision;
98
+ }
99
+ static async load(source, world, revision, classes) {
100
+ const manifest = await source.json(`worlds/${world}/${revision}/manifest.json`);
101
+ return new WorldData(source, manifest, classes);
102
+ }
103
+ entry(tx, tz) {
104
+ return this.manifest.tiles[tz * this.cols + tx];
105
+ }
106
+ tile(tx, tz) {
107
+ const k = tz * this.cols + tx;
108
+ let p = this.cache.get(k);
109
+ if (p) {
110
+ this.cache.delete(k);
111
+ this.cache.set(k, p);
112
+ return p;
113
+ }
114
+ if (this.cache.size >= 64)
115
+ this.cache.delete(this.cache.keys().next().value);
116
+ const e = this.entry(tx, tz);
117
+ p = this.source
118
+ .verified(`worlds/${this.world}/${this.revision}/tiles/${tx}_${tz}.bin.gz`, e.bytes, e.sha256)
119
+ .then((gz) => decodeTile(gunzipSync(gz)));
120
+ p.catch(() => this.cache.delete(k));
121
+ this.cache.set(k, p);
122
+ return p;
123
+ }
124
+ locate(x, z) {
125
+ const tx = Math.min(Math.max(Math.floor(x / TILE), 0), this.cols - 1);
126
+ const tz = Math.min(Math.max(Math.floor(z / TILE), 0), this.rows - 1);
127
+ return { tx, tz, c: x - tx * TILE, r: z - tz * TILE };
128
+ }
129
+ /** Terrain height (m), bilinear from the four surrounding grid points. */
130
+ async heightAt(x, z) {
131
+ const { tx, tz, c, r } = this.locate(x, z);
132
+ const t = await this.tile(tx, tz);
133
+ const c0 = Math.min(Math.max(Math.floor(c), 0), TILE - 1);
134
+ const r0 = Math.min(Math.max(Math.floor(r), 0), TILE - 1);
135
+ const fc = Math.min(Math.max(c - c0, 0), 1);
136
+ const fr = Math.min(Math.max(r - r0, 0), 1);
137
+ const h = (cc, rr) => t.heights[rr * POINTS + cc];
138
+ const v = h(c0, r0) * (1 - fc) * (1 - fr) + h(c0 + 1, r0) * fc * (1 - fr) + h(c0, r0 + 1) * (1 - fc) * fr + h(c0 + 1, r0 + 1) * fc * fr;
139
+ return v / 100;
140
+ }
141
+ /** Material, water and walkable surface of the nearest grid point. */
142
+ async surfaceAt(x, z) {
143
+ const { tx, tz, c, r } = this.locate(x, z);
144
+ const t = await this.tile(tx, tz);
145
+ const cc = Math.min(Math.max(Math.round(c), 0), TILE);
146
+ const rr = Math.min(Math.max(Math.round(r), 0), TILE);
147
+ const k = rr * POINTS + cc;
148
+ const mat = this.manifest.materials[t.matl[k]];
149
+ const out = { material: mat.name, water: mat.water, terrain: t.heights[k] / 100, roadway: null };
150
+ if (mat.water === 'sea')
151
+ out.seaLevel = this.manifest.sea;
152
+ const i = binarySearch(t.road.k, k);
153
+ if (i >= 0) {
154
+ out.roadway = {
155
+ model: this.manifest.roadwayShapes[t.road.shape[i]],
156
+ height: (t.heights[k] + t.road.dh[i]) / 100,
157
+ aboveTerrain: t.road.dh[i] / 100,
158
+ };
159
+ }
160
+ return out;
161
+ }
162
+ async groundAt(x, z) {
163
+ return { height: await this.heightAt(x, z), ...(await this.surfaceAt(x, z)) };
164
+ }
165
+ /** Tiles whose objects can reach into the area: those touching it, plus neighbours whose `reach` extends into it. */
166
+ tilesFor(area) {
167
+ return this.manifest.tiles.filter((e) => {
168
+ if (area.circle) {
169
+ const { x, z, radius } = area.circle;
170
+ const dx = Math.max(e.x * TILE - x, 0, x - (e.x + 1) * TILE);
171
+ const dz = Math.max(e.z * TILE - z, 0, z - (e.z + 1) * TILE);
172
+ return Math.hypot(dx, dz) <= radius + e.reach;
173
+ }
174
+ const r = area.rect;
175
+ return ((e.x + 1) * TILE + e.reach >= r.minX &&
176
+ e.x * TILE - e.reach <= r.maxX &&
177
+ (e.z + 1) * TILE + e.reach >= r.minZ &&
178
+ e.z * TILE - e.reach <= r.maxZ);
179
+ });
180
+ }
181
+ /**
182
+ * Static objects whose clipping box (horizontally) touches the area; without a box, whose origin lies in it.
183
+ * Tiles that cannot be loaded are named in `missing`, never treated as empty.
184
+ */
185
+ async objectsIn(area, filter = {}) {
186
+ const out = [];
187
+ const missing = [];
188
+ const want = filter.class?.toLowerCase();
189
+ for (const e of this.tilesFor(area)) {
190
+ if (!e.objects)
191
+ continue;
192
+ let t;
193
+ try {
194
+ t = await this.tile(e.x, e.z);
195
+ }
196
+ catch (err) {
197
+ missing.push(missingName(`${e.x}_${e.z}`, err));
198
+ continue;
199
+ }
200
+ for (const o of this.objectsOf(t)) {
201
+ if (want !== undefined && o.class.toLowerCase() !== want)
202
+ continue;
203
+ if (filter.flags && !(o.flags & filter.flags))
204
+ continue;
205
+ const d = distanceToArea(o, area);
206
+ if (d !== null)
207
+ out.push({ ...o, distance: d });
208
+ }
209
+ }
210
+ out.sort((a, b) => a.distance - b.distance);
211
+ return { objects: out, missing };
212
+ }
213
+ objectsOf(t) {
214
+ if (t.list)
215
+ return t.list;
216
+ const o = t.objs;
217
+ const list = [];
218
+ for (let i = 0; i < o.n; i++) {
219
+ const [cls, shape, flags] = this.manifest.objects[o.tab[i]];
220
+ const rows = Array.from(o.m.subarray(i * 9, i * 9 + 9));
221
+ const x = (t.tx * TILE * 100 + o.x[i]) / 100;
222
+ const z = (t.tz * TILE * 100 + o.z[i]) / 100;
223
+ const y = o.y[i] / 100;
224
+ list.push({
225
+ id: `${this.world}/${this.revision}/${t.tx}_${t.tz}/${i}`,
226
+ source: 'map',
227
+ class: cls,
228
+ shape,
229
+ flags,
230
+ x,
231
+ y,
232
+ z,
233
+ rows,
234
+ ...angles(rows),
235
+ box: this.classes.boxFor(cls, shape),
236
+ });
237
+ }
238
+ t.list = list;
239
+ return list;
240
+ }
241
+ /** A static object by its id `<world>/<revision>/<tx>_<tz>/<n>`. */
242
+ async objectById(id) {
243
+ const m = /^([^/]+)\/([^/]+)\/(\d+)_(\d+)\/(\d+)$/.exec(id);
244
+ if (!m || m[1] !== this.world || m[2] !== this.revision)
245
+ return undefined;
246
+ const tx = Number(m[3]);
247
+ const tz = Number(m[4]);
248
+ if (tx >= this.cols || tz >= this.rows)
249
+ return undefined;
250
+ return this.objectsOf(await this.tile(tx, tz))[Number(m[5])];
251
+ }
252
+ /**
253
+ * Walkable surfaces of static objects at a point, from the `r` rasters (walkable surface seen from below) of the
254
+ * objects whose clipping box covers it. The model-space cell is found at the object's own height, so for strongly
255
+ * tilted objects it is an approximation.
256
+ */
257
+ async rasterSurfaces(x, z) {
258
+ const { objects, missing } = await this.objectsIn({ circle: { x, z, radius: 0 } });
259
+ const surfaces = [];
260
+ for (const o of objects) {
261
+ if (!o.box?.raster)
262
+ continue;
263
+ let raster;
264
+ try {
265
+ raster = await this.classes.raster(o.box.id);
266
+ }
267
+ catch (err) {
268
+ missing.push(missingName(`raster ${o.box.id}`, err));
269
+ continue;
270
+ }
271
+ const r = raster?.channels.r;
272
+ if (!raster || !r)
273
+ continue;
274
+ const local = toLocal(o, x, o.y, z);
275
+ if (!local)
276
+ continue;
277
+ const i = Math.round((local[0] * 1000 - raster.x0Mm) / raster.stepMm);
278
+ const j = Math.round((local[2] * 1000 - raster.z0Mm) / raster.stepMm);
279
+ if (i < 0 || j < 0 || i >= raster.nx || j >= raster.nz)
280
+ continue;
281
+ const v = r[j * raster.nx + i];
282
+ if (v === NO_HIT)
283
+ continue;
284
+ surfaces.push({ height: toWorld(o, local[0], v / 100, local[2])[1], model: o.shape, object: o.id });
285
+ }
286
+ surfaces.sort((a, b) => b.height - a.height);
287
+ return { surfaces, missing };
288
+ }
289
+ }
290
+ /** A tile (`tx_tz`) or raster that could not be used; marked when its data were corrupt rather than unreachable. */
291
+ export function missingName(name, err) {
292
+ return err instanceof DataCorrupt ? `${name} corrupt` : name;
293
+ }
294
+ function binarySearch(arr, v) {
295
+ let lo = 0;
296
+ let hi = arr.length - 1;
297
+ while (lo <= hi) {
298
+ const mid = (lo + hi) >> 1;
299
+ if (arr[mid] === v)
300
+ return mid;
301
+ if (arr[mid] < v)
302
+ lo = mid + 1;
303
+ else
304
+ hi = mid - 1;
305
+ }
306
+ return -1;
307
+ }
308
+ const footprints = new WeakMap();
309
+ function footprintOf(o, clip) {
310
+ let p = footprints.get(o);
311
+ if (!p) {
312
+ p = footprint(clip, o);
313
+ footprints.set(o, p);
314
+ }
315
+ return p;
316
+ }
317
+ /** Distance of an object to an area (0 inside), or null if it does not touch it. */
318
+ export function distanceToArea(o, area) {
319
+ if (area.circle) {
320
+ const { x, z, radius } = area.circle;
321
+ const d = o.box?.clip ? distanceToPolygon(x, z, footprintOf(o, o.box.clip)) : Math.hypot(o.x - x, o.z - z);
322
+ return d <= radius ? d : null;
323
+ }
324
+ const r = area.rect;
325
+ const cx = (r.minX + r.maxX) / 2;
326
+ const cz = (r.minZ + r.maxZ) / 2;
327
+ if (o.box?.clip) {
328
+ const poly = footprintOf(o, o.box.clip);
329
+ if (!polygonTouchesRect(poly, r))
330
+ return null;
331
+ return distanceToPolygon(cx, cz, poly);
332
+ }
333
+ if (o.x < r.minX || o.x > r.maxX || o.z < r.minZ || o.z > r.maxZ)
334
+ return null;
335
+ return Math.hypot(o.x - cx, o.z - cz);
336
+ }
337
+ /** Separating axes in 2D between a convex polygon and an axis-aligned rectangle; touching counts. */
338
+ function polygonTouchesRect(poly, r) {
339
+ const rect = [
340
+ [r.minX, r.minZ],
341
+ [r.maxX, r.minZ],
342
+ [r.maxX, r.maxZ],
343
+ [r.minX, r.maxZ],
344
+ ];
345
+ const axes = [
346
+ [1, 0],
347
+ [0, 1],
348
+ ];
349
+ for (let i = 0; i < poly.length; i++) {
350
+ const a = poly[i];
351
+ const b = poly[(i + 1) % poly.length];
352
+ axes.push([-(b[1] - a[1]), b[0] - a[0]]);
353
+ }
354
+ for (const [ax, az] of axes) {
355
+ if (!ax && !az)
356
+ continue;
357
+ const proj = (pts) => pts.map((p) => p[0] * ax + p[1] * az);
358
+ const pa = proj(poly);
359
+ const pb = proj(rect);
360
+ if (Math.max(...pa) < Math.min(...pb) || Math.max(...pb) < Math.min(...pa))
361
+ return false;
362
+ }
363
+ return true;
364
+ }
365
+ /**
366
+ * yaw/pitch/roll/scale as the export reports them. The engine's pitch is asin of the forward row's Y *with* the scale
367
+ * in it; its scale is the RMS length of the three rows (some walls and rocks are slightly non-uniform).
368
+ */
369
+ export function angles(rows) {
370
+ const [ax, ay, az, ux, uy, uz, dx, dy, dz] = rows.map((v) => v / 1e6);
371
+ return {
372
+ yaw: Math.atan2(dx, dz) * DEG,
373
+ pitch: Math.asin(Math.max(-1, Math.min(1, dy))) * DEG,
374
+ roll: Math.atan2(-ay, uy) * DEG,
375
+ scale: Math.sqrt((ax * ax + ay * ay + az * az + ux * ux + uy * uy + uz * uz + dx * dx + dy * dy + dz * dz) / 3),
376
+ };
377
+ }
378
+ /** Rows (×10⁶, scale included) from yaw/pitch/roll/scale; the inverse of `angles` for |scale · sin(pitch)| ≤ 1. */
379
+ export function rowsFrom(yaw, pitch, roll, scale = 1) {
380
+ const y = yaw / DEG;
381
+ const r = roll / DEG;
382
+ const sp = Math.sin(pitch / DEG) / scale;
383
+ const p = Math.asin(Math.max(-1, Math.min(1, sp)));
384
+ const cy = Math.cos(y);
385
+ const sy = Math.sin(y);
386
+ const cp = Math.cos(p);
387
+ const spp = Math.sin(p);
388
+ const cr = Math.cos(r);
389
+ const sr = Math.sin(r);
390
+ const aside = [cy * cr + sy * spp * sr, -cp * sr, -sy * cr + cy * spp * sr];
391
+ const up = [cy * sr - sy * spp * cr, cp * cr, -sy * sr - cy * spp * cr];
392
+ const dir = [sy * cp, spp, cy * cp];
393
+ return [...aside, ...up, ...dir].map((v) => Math.round(v * scale * 1e6));
394
+ }
395
+ export function toWorld(o, lx, ly, lz) {
396
+ const m = o.rows;
397
+ return [
398
+ o.x + (m[0] * lx + m[3] * ly + m[6] * lz) / 1e6,
399
+ o.y + (m[1] * lx + m[4] * ly + m[7] * lz) / 1e6,
400
+ o.z + (m[2] * lx + m[5] * ly + m[8] * lz) / 1e6,
401
+ ];
402
+ }
403
+ /** Model-space coordinates of a world point, or null for a degenerate transformation. */
404
+ export function toLocal(o, x, y, z) {
405
+ const m = o.rows.map((v) => v / 1e6);
406
+ const [a, b, c] = [m[0], m[3], m[6]];
407
+ const [d, e, f] = [m[1], m[4], m[7]];
408
+ const [g, h, i] = [m[2], m[5], m[8]];
409
+ const det = a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
410
+ if (Math.abs(det) < 1e-12)
411
+ return null;
412
+ const px = x - o.x;
413
+ const py = y - o.y;
414
+ const pz = z - o.z;
415
+ return [
416
+ ((e * i - f * h) * px - (b * i - c * h) * py + (b * f - c * e) * pz) / det,
417
+ (-(d * i - f * g) * px + (a * i - c * g) * py - (a * f - c * d) * pz) / det,
418
+ ((d * h - e * g) * px - (a * h - b * g) * py + (a * e - b * d) * pz) / det,
419
+ ];
420
+ }
421
+ export function corners(box, o) {
422
+ const out = [];
423
+ for (const lx of [box[0], box[3]])
424
+ for (const ly of [box[1], box[4]])
425
+ for (const lz of [box[2], box[5]])
426
+ out.push(toWorld(o, lx, ly, lz));
427
+ return out;
428
+ }
429
+ /** Horizontal outline of a box: the convex hull of its eight corners on X/Z. */
430
+ export function footprint(box, o) {
431
+ const pts = corners(box, o)
432
+ .map(([px, , pz]) => [px, pz])
433
+ .sort((a, b) => a[0] - b[0] || a[1] - b[1]);
434
+ const cross = (o1, a, b) => (a[0] - o1[0]) * (b[1] - o1[1]) - (a[1] - o1[1]) * (b[0] - o1[0]);
435
+ const lower = [];
436
+ const upper = [];
437
+ for (const p of pts) {
438
+ while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], p) <= 0)
439
+ lower.pop();
440
+ lower.push(p);
441
+ }
442
+ for (const p of pts.slice().reverse()) {
443
+ while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], p) <= 0)
444
+ upper.pop();
445
+ upper.push(p);
446
+ }
447
+ return lower.slice(0, -1).concat(upper.slice(0, -1));
448
+ }
449
+ export function distanceToPolygon(x, z, poly) {
450
+ if (poly.length === 1)
451
+ return Math.hypot(poly[0][0] - x, poly[0][1] - z);
452
+ let inside = poly.length >= 3;
453
+ let best = Infinity;
454
+ for (let i = 0; i < poly.length; i++) {
455
+ const a = poly[i];
456
+ const b = poly[(i + 1) % poly.length];
457
+ const ex = b[0] - a[0];
458
+ const ez = b[1] - a[1];
459
+ if (ex * (z - a[1]) - ez * (x - a[0]) < 0)
460
+ inside = false;
461
+ const len = ex * ex + ez * ez;
462
+ const t = len ? Math.max(0, Math.min(1, ((x - a[0]) * ex + (z - a[1]) * ez) / len)) : 0;
463
+ best = Math.min(best, Math.hypot(a[0] + t * ex - x, a[1] + t * ez - z));
464
+ }
465
+ return inside ? 0 : best;
466
+ }
467
+ /** Oriented box (collision box, otherwise clipping box) of an object, with its scale. */
468
+ export function orientedBox(entry, o) {
469
+ const b = entry.collision || entry.clip;
470
+ if (!b)
471
+ return null;
472
+ const m = o.rows.map((v) => v / 1e6);
473
+ const axes = [];
474
+ const half = [];
475
+ for (let k = 0; k < 3; k++) {
476
+ const v = [m[k * 3], m[k * 3 + 1], m[k * 3 + 2]];
477
+ const len = Math.hypot(...v);
478
+ axes.push(v.map((q) => q / len));
479
+ half.push(((b[k + 3] - b[k]) / 2) * len);
480
+ }
481
+ return { center: toWorld(o, (b[0] + b[3]) / 2, (b[1] + b[4]) / 2, (b[2] + b[5]) / 2), axes, half };
482
+ }
483
+ /** Separating-axis test: penetration depth along the axis where it is smallest, or null if they do not intersect. */
484
+ export function overlapDepth(A, B) {
485
+ const dot = (p, q) => p[0] * q[0] + p[1] * q[1] + p[2] * q[2];
486
+ const crossV = (p, q) => [
487
+ p[1] * q[2] - p[2] * q[1],
488
+ p[2] * q[0] - p[0] * q[2],
489
+ p[0] * q[1] - p[1] * q[0],
490
+ ];
491
+ const d = [B.center[0] - A.center[0], B.center[1] - A.center[1], B.center[2] - A.center[2]];
492
+ const candidates = [...A.axes, ...B.axes];
493
+ for (const a of A.axes)
494
+ for (const b of B.axes)
495
+ candidates.push(crossV(a, b));
496
+ let depth = Infinity;
497
+ for (const L0 of candidates) {
498
+ const len = Math.hypot(...L0);
499
+ if (len < 1e-6)
500
+ continue;
501
+ const L = L0.map((v) => v / len);
502
+ const rA = A.half.reduce((s, h, i) => s + h * Math.abs(dot(A.axes[i], L)), 0);
503
+ const rB = B.half.reduce((s, h, i) => s + h * Math.abs(dot(B.axes[i], L)), 0);
504
+ const o = rA + rB - Math.abs(dot(d, L));
505
+ if (o <= 0)
506
+ return null;
507
+ depth = Math.min(depth, o);
508
+ }
509
+ return depth;
510
+ }
511
+ /** Whether the segment from p to q passes through the box (slab test in the box's frame). */
512
+ export function segmentInBox(p, q, box) {
513
+ let t0 = 0;
514
+ let t1 = 1;
515
+ for (let k = 0; k < 3; k++) {
516
+ const ax = box.axes[k];
517
+ const a = (p[0] - box.center[0]) * ax[0] + (p[1] - box.center[1]) * ax[1] + (p[2] - box.center[2]) * ax[2];
518
+ const d = (q[0] - p[0]) * ax[0] + (q[1] - p[1]) * ax[1] + (q[2] - p[2]) * ax[2];
519
+ const h = box.half[k];
520
+ if (Math.abs(d) < 1e-12) {
521
+ if (a < -h || a > h)
522
+ return false;
523
+ continue;
524
+ }
525
+ let lo = (-h - a) / d;
526
+ let hi = (h - a) / d;
527
+ if (lo > hi)
528
+ [lo, hi] = [hi, lo];
529
+ t0 = Math.max(t0, lo);
530
+ t1 = Math.min(t1, hi);
531
+ if (t0 > t1)
532
+ return false;
533
+ }
534
+ return true;
535
+ }
536
+ /**
537
+ * Whether a cell of an object's collision raster (`g`), taken as a vertical column in model space from the bottom of
538
+ * its box up to the hit height, lies inside another box.
539
+ */
540
+ export function rasterHitsBox(o, entry, raster, other) {
541
+ const g = raster.channels.g;
542
+ const b = entry.collision || entry.clip;
543
+ if (!g || !b)
544
+ return false;
545
+ const bottom = b[1];
546
+ for (let j = 0; j < raster.nz; j++) {
547
+ const lz = (raster.z0Mm + j * raster.stepMm) / 1000;
548
+ for (let i = 0; i < raster.nx; i++) {
549
+ const v = g[j * raster.nx + i];
550
+ if (v === NO_HIT)
551
+ continue;
552
+ const lx = (raster.x0Mm + i * raster.stepMm) / 1000;
553
+ const top = v / 100;
554
+ if (segmentInBox(toWorld(o, lx, Math.min(bottom, top), lz), toWorld(o, lx, top, lz), other))
555
+ return true;
556
+ }
557
+ }
558
+ return false;
559
+ }
560
+ /**
561
+ * The four lower corners of the box (collision box, otherwise clipping box), each with the highest surface below it
562
+ * (terrain, walkable surface and, with `rasters`, the walkable rasters of static objects) and the distance to it.
563
+ */
564
+ export async function objectGround(wd, entry, o, opts = {}) {
565
+ const b = entry.collision || entry.clip;
566
+ if (!b)
567
+ return { verdict: 'box unknown' };
568
+ const pts = [
569
+ [b[0], b[2]],
570
+ [b[3], b[2]],
571
+ [b[0], b[5]],
572
+ [b[3], b[5]],
573
+ ].map(([lx, lz]) => toWorld(o, lx, b[1], lz));
574
+ const missing = [];
575
+ const corners = [];
576
+ for (const p of pts) {
577
+ const [x, y, z] = p;
578
+ const g = await wd.groundAt(x, z);
579
+ const surfaces = [{ h: g.height, kind: 'terrain' }];
580
+ if (g.roadway)
581
+ surfaces.push({ h: g.roadway.height, kind: 'roadway' });
582
+ if (opts.rasters) {
583
+ const r = await wd.rasterSurfaces(x, z);
584
+ missing.push(...r.missing);
585
+ for (const s of r.surfaces)
586
+ surfaces.push({ h: s.height, kind: 'object' });
587
+ }
588
+ const below = surfaces.filter((s) => s.h <= y);
589
+ const s = below.length ? below.reduce((a, c) => (c.h > a.h ? c : a)) : surfaces.reduce((a, c) => (c.h < a.h ? c : a));
590
+ corners.push({ corner: p, surface: s.h, distance: y - s.h, kind: s.kind });
591
+ }
592
+ const dist = corners.map((c) => c.distance);
593
+ const min = Math.min(...dist);
594
+ const max = Math.max(...dist);
595
+ const out = { verdict: null, min, max, corners };
596
+ if (missing.length)
597
+ out.missing = [...new Set(missing)];
598
+ if (min > 0.05)
599
+ out.verdict = `floats ${min.toFixed(2)} m`;
600
+ else if (max < -0.05)
601
+ out.verdict = `${(-max).toFixed(2)} m in the ground`;
602
+ return out;
603
+ }
604
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/world/data.ts"],"names":[],"mappings":"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"}