@bitmagic/world-forger 0.1.3 → 0.1.5
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/dist/artifact-types.d.ts +27 -0
- package/dist/artifact-types.d.ts.map +1 -1
- package/dist/generated/game-data-schema.d.ts +152 -1
- package/dist/generated/game-data-schema.d.ts.map +1 -1
- package/dist/generated/game-data-schema.js +184 -1
- package/dist/generated/game-data-schema.js.map +1 -1
- package/dist/pipeline/create-level-archetypes.d.ts.map +1 -1
- package/dist/pipeline/create-level-archetypes.js +30 -2
- package/dist/pipeline/create-level-archetypes.js.map +1 -1
- package/dist/pipeline/deps.d.ts +17 -0
- package/dist/pipeline/deps.d.ts.map +1 -1
- package/dist/pipeline/forge-map-render.d.ts +40 -0
- package/dist/pipeline/forge-map-render.d.ts.map +1 -0
- package/dist/pipeline/forge-map-render.js +109 -0
- package/dist/pipeline/forge-map-render.js.map +1 -0
- package/dist/pipeline/index.d.ts +3 -0
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +3 -0
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/layout-map.d.ts +109 -0
- package/dist/pipeline/layout-map.d.ts.map +1 -0
- package/dist/pipeline/layout-map.js +175 -0
- package/dist/pipeline/layout-map.js.map +1 -0
- package/dist/pipeline/place-and-persist-level.d.ts.map +1 -1
- package/dist/pipeline/place-and-persist-level.js +25 -0
- package/dist/pipeline/place-and-persist-level.js.map +1 -1
- package/dist/pipeline/progress-types.d.ts +116 -0
- package/dist/pipeline/progress-types.d.ts.map +1 -0
- package/dist/pipeline/progress-types.js +67 -0
- package/dist/pipeline/progress-types.js.map +1 -0
- package/dist/pipeline/transport-types.d.ts +13 -0
- package/dist/pipeline/transport-types.d.ts.map +1 -1
- package/dist/pipeline/voxelize-level.d.ts +21 -0
- package/dist/pipeline/voxelize-level.d.ts.map +1 -1
- package/dist/pipeline/voxelize-level.js +84 -2
- package/dist/pipeline/voxelize-level.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Longest raster axis. 128 is about the point where a map stops gaining legibility: a 512m level
|
|
3
|
+
* is then 4m per pixel, finer than the dots drawn on top of it, and the encoded raster stays
|
|
4
|
+
* around 22KB base64 — small enough for one SSE frame.
|
|
5
|
+
*/
|
|
6
|
+
export const FORGE_MAP_MAX_DIM = 128;
|
|
7
|
+
/**
|
|
8
|
+
* Object dots to draw. A forge can place a couple of thousand instances and a dungeon can place
|
|
9
|
+
* ~640 of a single archetype; past a few hundred dots the map reads as noise rather than layout,
|
|
10
|
+
* and the payload grows for nothing.
|
|
11
|
+
*/
|
|
12
|
+
export const FORGE_MAP_MAX_OBJECTS = 600;
|
|
13
|
+
/** Below this height range the terrain is flat (a dungeon plate) and normalising would amplify
|
|
14
|
+
* rounding noise into a static field. Metres. */
|
|
15
|
+
const FLAT_TERRAIN_EPSILON = 0.05;
|
|
16
|
+
/** What a flat level's every sample becomes — mid-ramp, so it reads as "no relief", not as a hole. */
|
|
17
|
+
const FLAT_TERRAIN_SAMPLE = 128;
|
|
18
|
+
/**
|
|
19
|
+
* The map's colours, as `[r, g, b]`.
|
|
20
|
+
*
|
|
21
|
+
* Exported because it has TWO renderers — the dev shell's canvas and the Creator's — and neither
|
|
22
|
+
* can share drawing code with the other (the dev shell is a template literal that cannot import,
|
|
23
|
+
* so it interpolates this object into the page). Hand-copied colours in two places would drift on
|
|
24
|
+
* the first tweak.
|
|
25
|
+
*/
|
|
26
|
+
export const FORGE_MAP_PALETTE = {
|
|
27
|
+
/** Anything at or below `waterLevel`. */
|
|
28
|
+
water: [38, 78, 120],
|
|
29
|
+
/** The elevation ramp's ends; everything between is a linear blend. */
|
|
30
|
+
low: [58, 74, 52],
|
|
31
|
+
high: [214, 208, 190],
|
|
32
|
+
/** Object instances. */
|
|
33
|
+
object: [232, 168, 72],
|
|
34
|
+
/** Named markers. */
|
|
35
|
+
marker: [122, 184, 232],
|
|
36
|
+
/** The player's spawn. */
|
|
37
|
+
start: [240, 96, 88],
|
|
38
|
+
};
|
|
39
|
+
function toBase64(bytes) {
|
|
40
|
+
// `Buffer` rather than `btoa`: this package's hosts are all Node (the CLI and game-play-agent
|
|
41
|
+
// drive the browser, they do not run in it), and the storage seam already depends on it.
|
|
42
|
+
return Buffer.from(bytes).toString('base64');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Box-average the grid down to `width * height` samples.
|
|
46
|
+
*
|
|
47
|
+
* Averaging rather than nearest-neighbour because the input is up to 513 samples across and the
|
|
48
|
+
* output is 128: point-sampling a ridge at a 4:1 ratio aliases it into a dotted line, which reads
|
|
49
|
+
* as terrain noise rather than as a ridge.
|
|
50
|
+
*/
|
|
51
|
+
function downsample(grid, width, height) {
|
|
52
|
+
const stride = grid.nx + 1;
|
|
53
|
+
const srcW = grid.nx + 1;
|
|
54
|
+
const srcH = grid.nz + 1;
|
|
55
|
+
const out = new Float64Array(width * height);
|
|
56
|
+
for (let y = 0; y < height; y++) {
|
|
57
|
+
const z0 = Math.floor((y * srcH) / height);
|
|
58
|
+
const z1 = Math.max(z0 + 1, Math.floor(((y + 1) * srcH) / height));
|
|
59
|
+
for (let x = 0; x < width; x++) {
|
|
60
|
+
const x0 = Math.floor((x * srcW) / width);
|
|
61
|
+
const x1 = Math.max(x0 + 1, Math.floor(((x + 1) * srcW) / width));
|
|
62
|
+
let sum = 0;
|
|
63
|
+
let count = 0;
|
|
64
|
+
for (let z = z0; z < z1 && z < srcH; z++) {
|
|
65
|
+
for (let i = x0; i < x1 && i < srcW; i++) {
|
|
66
|
+
sum += grid.heights[z * stride + i] ?? 0;
|
|
67
|
+
count++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
out[y * width + x] = count > 0 ? sum / count : 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
/** Raster dimensions for a grid, longest axis at {@link FORGE_MAP_MAX_DIM}, aspect preserved. */
|
|
76
|
+
function rasterSize(grid) {
|
|
77
|
+
const srcW = grid.nx + 1;
|
|
78
|
+
const srcH = grid.nz + 1;
|
|
79
|
+
const scale = FORGE_MAP_MAX_DIM / Math.max(srcW, srcH);
|
|
80
|
+
if (scale >= 1)
|
|
81
|
+
return { width: srcW, height: srcH };
|
|
82
|
+
return {
|
|
83
|
+
width: Math.max(1, Math.round(srcW * scale)),
|
|
84
|
+
height: Math.max(1, Math.round(srcH * scale)),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Thin a list to at most `cap` entries by even stride.
|
|
89
|
+
*
|
|
90
|
+
* Stride, never truncation: a placement list is ordered by how the forge generated it (scatter by
|
|
91
|
+
* scatter, lot by lot), so taking the first N would delete whole regions of the map and leave a
|
|
92
|
+
* level that looks half-empty. An even stride thins a dense forest instead.
|
|
93
|
+
*/
|
|
94
|
+
function thin(items, cap) {
|
|
95
|
+
if (items.length <= cap)
|
|
96
|
+
return [...items];
|
|
97
|
+
const step = items.length / cap;
|
|
98
|
+
const out = [];
|
|
99
|
+
for (let i = 0; i < cap; i++)
|
|
100
|
+
out.push(items[Math.floor(i * step)]);
|
|
101
|
+
return out;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Build the map, or null when there is nothing to draw.
|
|
105
|
+
*
|
|
106
|
+
* Null rather than an empty map for a resumed run whose cached artifact predates
|
|
107
|
+
* `terrainHeightGrid`, or a grid too degenerate to raster — a host renders nothing, which is
|
|
108
|
+
* honest, where a blank rectangle would read as "this level is empty".
|
|
109
|
+
*/
|
|
110
|
+
export function buildForgeLayoutMap(artifact) {
|
|
111
|
+
const grid = artifact.terrainHeightGrid;
|
|
112
|
+
if (!grid || !Array.isArray(grid.heights) || grid.heights.length === 0)
|
|
113
|
+
return null;
|
|
114
|
+
if (!(grid.nx > 0) || !(grid.nz > 0) || !(grid.cellSize > 0))
|
|
115
|
+
return null;
|
|
116
|
+
const { width, height } = rasterSize(grid);
|
|
117
|
+
const samples = downsample(grid, width, height);
|
|
118
|
+
let min = Infinity;
|
|
119
|
+
let max = -Infinity;
|
|
120
|
+
for (const value of samples) {
|
|
121
|
+
if (value < min)
|
|
122
|
+
min = value;
|
|
123
|
+
if (value > max)
|
|
124
|
+
max = value;
|
|
125
|
+
}
|
|
126
|
+
if (!Number.isFinite(min) || !Number.isFinite(max))
|
|
127
|
+
return null;
|
|
128
|
+
// A dungeon's terrain is a flat plate. Normalising a range of a few millimetres would turn
|
|
129
|
+
// rounding noise into a full-contrast static field, so relief is reported as absent instead.
|
|
130
|
+
const flat = max - min < FLAT_TERRAIN_EPSILON;
|
|
131
|
+
const range = flat ? 1 : max - min;
|
|
132
|
+
const quantize = (value) => flat ? FLAT_TERRAIN_SAMPLE : Math.max(0, Math.min(255, Math.round(((value - min) / range) * 255)));
|
|
133
|
+
const bytes = new Uint8Array(width * height);
|
|
134
|
+
for (let i = 0; i < bytes.length; i++)
|
|
135
|
+
bytes[i] = quantize(samples[i]);
|
|
136
|
+
// Water rides the SAME scale as the heights, so a renderer compares two bytes and never has to
|
|
137
|
+
// carry world coordinates alongside the raster. A sea level above the terrain's own maximum is
|
|
138
|
+
// reported as absent rather than flooding the whole map.
|
|
139
|
+
const waterY = artifact.waterLevelYWorld;
|
|
140
|
+
const waterLevel = typeof waterY === 'number' && !flat && waterY >= min && waterY <= max
|
|
141
|
+
? quantize(waterY)
|
|
142
|
+
: null;
|
|
143
|
+
// World-space XZ to raster pixels. The grid's own origin and cell size are the transform — the
|
|
144
|
+
// level transform has already been applied to both, so no further conversion exists to get wrong.
|
|
145
|
+
const spanX = grid.nx * grid.cellSize;
|
|
146
|
+
const spanZ = grid.nz * grid.cellSize;
|
|
147
|
+
const toPixel = (x, z) => ({
|
|
148
|
+
x: Math.max(0, Math.min(width - 1, Math.round(((x - grid.minX) / spanX) * (width - 1)))),
|
|
149
|
+
z: Math.max(0, Math.min(height - 1, Math.round(((z - grid.minZ) / spanZ) * (height - 1)))),
|
|
150
|
+
});
|
|
151
|
+
const objects = [];
|
|
152
|
+
for (const placement of thin(artifact.placements, FORGE_MAP_MAX_OBJECTS)) {
|
|
153
|
+
const p = toPixel(placement.position.x, placement.position.z);
|
|
154
|
+
objects.push(p.x, p.z);
|
|
155
|
+
}
|
|
156
|
+
const markers = artifact.markers.map((marker) => {
|
|
157
|
+
const p = toPixel(marker.world.x, marker.world.z);
|
|
158
|
+
return { name: marker.name, x: p.x, z: p.z };
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
width,
|
|
162
|
+
height,
|
|
163
|
+
heights: toBase64(bytes),
|
|
164
|
+
worldSizeX: Math.round(spanX),
|
|
165
|
+
worldSizeZ: Math.round(spanZ),
|
|
166
|
+
waterLevel,
|
|
167
|
+
objects,
|
|
168
|
+
markers,
|
|
169
|
+
playerStart: artifact.playerStart
|
|
170
|
+
? toPixel(artifact.playerStart.world.x, artifact.playerStart.world.z)
|
|
171
|
+
: null,
|
|
172
|
+
objectCount: artifact.placements.length,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=layout-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-map.js","sourceRoot":"","sources":["../../src/pipeline/layout-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place-and-persist-level.d.ts","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAgC,iBAAiB,EAAqB,MAAM,gBAAgB,CAAC;AACzG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"place-and-persist-level.d.ts","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAgC,iBAAiB,EAAqB,MAAM,gBAAgB,CAAC;AACzG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAUnE,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAOlE,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;;OAGG;IACH,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAsED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC;IAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAgBlF;AA+BD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG;IAC/D,SAAS,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,cAAc,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;CACjG,CAgBA;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,qBAAqB,CAAC,CA4OhC"}
|
|
@@ -4,6 +4,7 @@ import { isCladdingModule, isSkippedArchetype, moduleOverBudgetNote, skipNote, s
|
|
|
4
4
|
import { buildLevelPersistModifications } from './persist-level.js';
|
|
5
5
|
import { buildSpawnPointEntries } from './spawn-points.js';
|
|
6
6
|
import { planStarterScatterRemoval } from './starter-scatter.js';
|
|
7
|
+
import { emitForgeProgress } from './progress-types.js';
|
|
7
8
|
import { ASSET_LOD0_VOXEL_BUDGET, SPAWN_CLEARANCE_M, WATER_SURFACE_Y } from '../forge-constants.js';
|
|
8
9
|
/** Instance placements per BATCH_PLACE_VOXEL_OBJECTS message. */
|
|
9
10
|
const PLACEMENT_BATCH_SIZE = 200;
|
|
@@ -32,6 +33,14 @@ async function placeInstances(deps, placements) {
|
|
|
32
33
|
const placedInstances = [];
|
|
33
34
|
for (let i = 0; i < placements.length; i += PLACEMENT_BATCH_SIZE) {
|
|
34
35
|
const batch = placements.slice(i, i + PLACEMENT_BATCH_SIZE);
|
|
36
|
+
// One event per 200-placement batch — already coarse enough not to need a throttle.
|
|
37
|
+
emitForgeProgress(deps, {
|
|
38
|
+
step: 'persist',
|
|
39
|
+
phase: 'update',
|
|
40
|
+
message: `Placing objects (${i}/${placements.length})`,
|
|
41
|
+
completed: i,
|
|
42
|
+
total: placements.length,
|
|
43
|
+
});
|
|
35
44
|
const requestId = forgeRequestId('place');
|
|
36
45
|
const result = await deps.transport.sendAndWait({
|
|
37
46
|
type: 'BATCH_PLACE_VOXEL_OBJECTS',
|
|
@@ -158,6 +167,13 @@ export async function placeAndPersistLevel(store, deps) {
|
|
|
158
167
|
if (skippedNames.size > 0) {
|
|
159
168
|
deps.logger.warn({ jobId: store.jobId, skipped: [...skippedNames], droppedPlacements: forge.placements.length - placements.length }, 'Archetypes skipped at bake time — their instances are dropped, the level keeps everything else');
|
|
160
169
|
}
|
|
170
|
+
emitForgeProgress(deps, {
|
|
171
|
+
step: 'persist',
|
|
172
|
+
phase: 'start',
|
|
173
|
+
message: `Placing ${placements.length} object${placements.length === 1 ? '' : 's'} and saving the level`,
|
|
174
|
+
completed: 0,
|
|
175
|
+
total: placements.length,
|
|
176
|
+
});
|
|
161
177
|
// Place the archetype instances from the library (exact world-space transforms).
|
|
162
178
|
const placedInstances = await placeInstances(deps, placements);
|
|
163
179
|
const movement = await store.get('platformer-movement');
|
|
@@ -331,6 +347,15 @@ export async function placeAndPersistLevel(store, deps) {
|
|
|
331
347
|
levelId: persistPlan.levelId, isStartLevel: persistPlan.isStartLevel,
|
|
332
348
|
purgedAssets: persistPlan.purgedAssetIds, persistNotes: persistPlan.notes,
|
|
333
349
|
}, 'Level, library assets, instances and spawn planned for world.json');
|
|
350
|
+
// `done` for the STEP, not for the job: the host still has to apply the modifications this
|
|
351
|
+
// returns (and, in the CLI lane, write the heightfield sidecar) before the level exists.
|
|
352
|
+
emitForgeProgress(deps, {
|
|
353
|
+
step: 'persist',
|
|
354
|
+
phase: 'done',
|
|
355
|
+
message: `Placed ${reconciledInstances.length} object${reconciledInstances.length === 1 ? '' : 's'}`,
|
|
356
|
+
completed: placements.length,
|
|
357
|
+
total: placements.length,
|
|
358
|
+
});
|
|
334
359
|
return {
|
|
335
360
|
summary: buildSummary(forge, bake, input, archetypeAssets),
|
|
336
361
|
modifications: [...starterScatterRemovals, ...persistPlan.modifications],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place-and-persist-level.js","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"place-and-persist-level.js","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The forge's progress vocabulary — what a run says about itself while it runs.
|
|
3
|
+
*
|
|
4
|
+
* A forge is thirty to sixty minutes long and, until this existed, said almost nothing: the CLI
|
|
5
|
+
* API emitted six free-text sentences across steps 1-2 and the web lane emitted eight events for
|
|
6
|
+
* the whole run. Both hosts had somewhere to render more; neither had anything to render. So the
|
|
7
|
+
* PIPELINE emits, in one shape, and each host decides how to draw it — `bitmagic dev` as a live
|
|
8
|
+
* five-step list, the Creator as detail lines under its World Forger branch.
|
|
9
|
+
*
|
|
10
|
+
* Two things make this worth a shared type rather than a string per host:
|
|
11
|
+
*
|
|
12
|
+
* - **Step identity.** The five steps were previously spelled out in four places (the web lane's
|
|
13
|
+
* runner, the Creator's tool labels, the CLI's `[n/5]` banners, api-server's progress strings)
|
|
14
|
+
* with nothing keeping them in step. {@link FORGE_STEPS} is the one list.
|
|
15
|
+
* - **The summary.** The interesting question during a forge is not "which step" but "what world
|
|
16
|
+
* am I getting" — and the answer exists long before the level does. The design step knows the
|
|
17
|
+
* approach and the size; the forge artifact knows every object, its instance count, the
|
|
18
|
+
* placement total, the terrain bands and the water level. All of it is available BEFORE the
|
|
19
|
+
* twenty-plus minute browser half begins. {@link ForgeProgressSummary} is that answer.
|
|
20
|
+
*
|
|
21
|
+
* Best-effort throughout: see {@link emitForgeProgress}.
|
|
22
|
+
*/
|
|
23
|
+
import type { ForgeDeps } from './deps.js';
|
|
24
|
+
import type { ForgeArtifact } from './job-types.js';
|
|
25
|
+
import type { ForgeLayoutMap } from './layout-map.js';
|
|
26
|
+
/** The five pipeline steps, in order. */
|
|
27
|
+
export type ForgeStepKey = 'design' | 'forge' | 'archetypes' | 'voxelize' | 'persist';
|
|
28
|
+
/**
|
|
29
|
+
* The steps with their creator-facing labels — the single source of truth for both.
|
|
30
|
+
*
|
|
31
|
+
* Hosts derive their step numbering (`[3/5]`) from this array's order rather than hardcoding a
|
|
32
|
+
* count, so adding or renaming a step is one edit here.
|
|
33
|
+
*/
|
|
34
|
+
export declare const FORGE_STEPS: ReadonlyArray<{
|
|
35
|
+
readonly key: ForgeStepKey;
|
|
36
|
+
readonly label: string;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* How the designer chose to build this level.
|
|
40
|
+
*
|
|
41
|
+
* The same five words the private half's `DesignApproach` uses — restated rather than imported
|
|
42
|
+
* because the dependency only runs the other way (that package imports this one), and because
|
|
43
|
+
* these strings are now on a public wire and a host renders them. Keep the two in step; the design
|
|
44
|
+
* step assigns one to the other and will not compile if they drift.
|
|
45
|
+
*/
|
|
46
|
+
export type ForgeDesignApproach = 'natural' | 'city' | 'platformer' | 'dungeon' | 'freeform';
|
|
47
|
+
/** Cap on {@link ForgeProgressSummary.objects} — this rides on every host's progress frame, and a
|
|
48
|
+
* city forge can produce hundreds of archetypes. The biggest kinds are the informative ones. */
|
|
49
|
+
export declare const FORGE_SUMMARY_OBJECT_CAP = 20;
|
|
50
|
+
/**
|
|
51
|
+
* What the level being built actually contains. Every field is optional: a summary is assembled
|
|
52
|
+
* from whatever the emitting step happens to know, and a host renders the fields that are present.
|
|
53
|
+
*/
|
|
54
|
+
export interface ForgeProgressSummary {
|
|
55
|
+
approach?: ForgeDesignApproach;
|
|
56
|
+
sizeX?: number;
|
|
57
|
+
sizeZ?: number;
|
|
58
|
+
/** The biggest object kinds first, capped at {@link FORGE_SUMMARY_OBJECT_CAP}. */
|
|
59
|
+
objects?: Array<{
|
|
60
|
+
name: string;
|
|
61
|
+
instances: number;
|
|
62
|
+
reused?: boolean;
|
|
63
|
+
}>;
|
|
64
|
+
/** Total object kinds, including any beyond the cap above. */
|
|
65
|
+
objectKinds?: number;
|
|
66
|
+
placements?: number;
|
|
67
|
+
markers?: number;
|
|
68
|
+
terrainBands?: string[];
|
|
69
|
+
/** World-space sea level, or null for a level with no water. */
|
|
70
|
+
waterLevelY?: number | null;
|
|
71
|
+
}
|
|
72
|
+
export interface ForgeProgressEvent {
|
|
73
|
+
step: ForgeStepKey;
|
|
74
|
+
phase: 'start' | 'update' | 'done';
|
|
75
|
+
/** A human sentence. Every host already has somewhere to put one of these. */
|
|
76
|
+
message: string;
|
|
77
|
+
/** Determinate progress within the step. Only steps 3-5 have a countable unit; steps 1-2 are an
|
|
78
|
+
* LLM call and a synchronous geometry build, and neither can report a fraction of itself. */
|
|
79
|
+
completed?: number;
|
|
80
|
+
total?: number;
|
|
81
|
+
/** What the step is working on right now — an archetype name, a bake phase label. */
|
|
82
|
+
detail?: string;
|
|
83
|
+
summary?: ForgeProgressSummary;
|
|
84
|
+
/**
|
|
85
|
+
* A top-down map of the level, emitted EXACTLY ONCE — on the forge step's `done`, the first
|
|
86
|
+
* moment it can be built.
|
|
87
|
+
*
|
|
88
|
+
* Deliberately not part of {@link ForgeProgressSummary}, even though it is the same kind of
|
|
89
|
+
* answer. A host accumulates the summary and re-reports it on every tick (see the CLI's
|
|
90
|
+
* tracker), which is right for a few hundred bytes of counts and very wrong for ~30KB of
|
|
91
|
+
* raster: it would be rewritten to disk and re-served on every one of a thirty-minute run's
|
|
92
|
+
* progress events. Keeping it on the EVENT makes "once" a property of the shape rather than a
|
|
93
|
+
* rule each host has to remember.
|
|
94
|
+
*/
|
|
95
|
+
layout?: ForgeLayoutMap;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Report progress, never fail because of it.
|
|
99
|
+
*
|
|
100
|
+
* The reporter belongs to the host, which will be writing a file, serializing an SSE frame or
|
|
101
|
+
* pushing onto a stream that may already have closed. None of that is worth failing a paid,
|
|
102
|
+
* thirty-minute forge for, so a throwing reporter is swallowed here rather than at every call
|
|
103
|
+
* site — the same trade `cli/src/project/jobs.ts` makes for its own bookkeeping.
|
|
104
|
+
*/
|
|
105
|
+
export declare function emitForgeProgress(deps: ForgeDeps, event: ForgeProgressEvent): void;
|
|
106
|
+
/**
|
|
107
|
+
* Describe a forged level from the artifact alone — pure, so it is testable without a forge.
|
|
108
|
+
*
|
|
109
|
+
* `approach` is filled only where the artifact proves it: a spec carrying a `dungeon` or `city`
|
|
110
|
+
* view is definitionally that approach, while terrain, platformer and freeform are
|
|
111
|
+
* indistinguishable from here. The design step knows which of the three it chose and says so on
|
|
112
|
+
* its own `done` event, which lands first — so a host that merges summaries has the answer either
|
|
113
|
+
* way, and this function does not guess.
|
|
114
|
+
*/
|
|
115
|
+
export declare function summarizeForgeArtifact(artifact: ForgeArtifact): ForgeProgressSummary;
|
|
116
|
+
//# sourceMappingURL=progress-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-types.d.ts","sourceRoot":"","sources":["../../src/pipeline/progress-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMpF,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAE7F;iGACiG;AACjG,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvE,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB;kGAC8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAOlF;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,oBAAoB,CAwBpF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The steps with their creator-facing labels — the single source of truth for both.
|
|
3
|
+
*
|
|
4
|
+
* Hosts derive their step numbering (`[3/5]`) from this array's order rather than hardcoding a
|
|
5
|
+
* count, so adding or renaming a step is one edit here.
|
|
6
|
+
*/
|
|
7
|
+
export const FORGE_STEPS = [
|
|
8
|
+
{ key: 'design', label: 'Designing scene' },
|
|
9
|
+
{ key: 'forge', label: 'Forging terrain' },
|
|
10
|
+
{ key: 'archetypes', label: 'Creating objects' },
|
|
11
|
+
{ key: 'voxelize', label: 'Baking level' },
|
|
12
|
+
{ key: 'persist', label: 'Placing & saving' },
|
|
13
|
+
];
|
|
14
|
+
/** Cap on {@link ForgeProgressSummary.objects} — this rides on every host's progress frame, and a
|
|
15
|
+
* city forge can produce hundreds of archetypes. The biggest kinds are the informative ones. */
|
|
16
|
+
export const FORGE_SUMMARY_OBJECT_CAP = 20;
|
|
17
|
+
/**
|
|
18
|
+
* Report progress, never fail because of it.
|
|
19
|
+
*
|
|
20
|
+
* The reporter belongs to the host, which will be writing a file, serializing an SSE frame or
|
|
21
|
+
* pushing onto a stream that may already have closed. None of that is worth failing a paid,
|
|
22
|
+
* thirty-minute forge for, so a throwing reporter is swallowed here rather than at every call
|
|
23
|
+
* site — the same trade `cli/src/project/jobs.ts` makes for its own bookkeeping.
|
|
24
|
+
*/
|
|
25
|
+
export function emitForgeProgress(deps, event) {
|
|
26
|
+
if (!deps.onProgress)
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
deps.onProgress(event);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Bookkeeping never fails the thing it is bookkeeping for.
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Describe a forged level from the artifact alone — pure, so it is testable without a forge.
|
|
37
|
+
*
|
|
38
|
+
* `approach` is filled only where the artifact proves it: a spec carrying a `dungeon` or `city`
|
|
39
|
+
* view is definitionally that approach, while terrain, platformer and freeform are
|
|
40
|
+
* indistinguishable from here. The design step knows which of the three it chose and says so on
|
|
41
|
+
* its own `done` event, which lands first — so a host that merges summaries has the answer either
|
|
42
|
+
* way, and this function does not guess.
|
|
43
|
+
*/
|
|
44
|
+
export function summarizeForgeArtifact(artifact) {
|
|
45
|
+
const objects = artifact.archetypes
|
|
46
|
+
.map((archetype) => ({
|
|
47
|
+
name: archetype.name,
|
|
48
|
+
instances: archetype.instanceCount,
|
|
49
|
+
...(archetype.reuse ? { reused: true } : {}),
|
|
50
|
+
}))
|
|
51
|
+
.sort((a, b) => b.instances - a.instances);
|
|
52
|
+
const approach = artifact.spec.dungeon
|
|
53
|
+
? 'dungeon'
|
|
54
|
+
: artifact.spec.city ? 'city' : undefined;
|
|
55
|
+
return {
|
|
56
|
+
...(approach ? { approach } : {}),
|
|
57
|
+
sizeX: artifact.spec.size.x,
|
|
58
|
+
sizeZ: artifact.spec.size.z,
|
|
59
|
+
objects: objects.slice(0, FORGE_SUMMARY_OBJECT_CAP),
|
|
60
|
+
objectKinds: objects.length,
|
|
61
|
+
placements: artifact.placements.length,
|
|
62
|
+
markers: artifact.markers.length,
|
|
63
|
+
terrainBands: artifact.terrainBands.map((band) => band.name),
|
|
64
|
+
...(artifact.waterLevelYWorld === undefined ? {} : { waterLevelY: artifact.waterLevelYWorld }),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=progress-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-types.js","sourceRoot":"","sources":["../../src/pipeline/progress-types.ts"],"names":[],"mappings":"AA6BA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAA0E;IAChG,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC3C,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAC1C,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE;IAChD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE;IAC1C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE;CACrC,CAAC;AAYX;iGACiG;AACjG,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AA+C3C;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe,EAAE,KAAyB;IAC1E,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO;IAC7B,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAuB;IAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU;SAChC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACnB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,SAAS,EAAE,SAAS,CAAC,aAAa;QAClC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAoC,QAAQ,CAAC,IAAI,CAAC,OAAO;QACrE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5C,OAAO;QACL,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC;QACnD,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM;QACtC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;QAChC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5D,GAAG,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;KAC/F,CAAC;AACJ,CAAC"}
|
|
@@ -22,6 +22,19 @@ export interface ForgeTransportOptions {
|
|
|
22
22
|
* mid-flight — only genuine silence for `timeoutMs` fails the attempt.
|
|
23
23
|
*/
|
|
24
24
|
progressType?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Called with each `progressType` message as it arrives.
|
|
27
|
+
*
|
|
28
|
+
* Both transports already SEE these messages — that is how `progressType` re-arms the idle
|
|
29
|
+
* timer above — and both used to drop them afterwards, which meant the level bake's real
|
|
30
|
+
* chunk counts (`VOXELIZE_GLB_AS_LEVEL_PROGRESS` carries `chunkIndex`/`totalChunks`) existed on
|
|
31
|
+
* the wire for twenty minutes and reached no user in either lane. This is the one hook that
|
|
32
|
+
* turns the longest, quietest step in the pipeline into a determinate one.
|
|
33
|
+
*
|
|
34
|
+
* Best-effort: a transport must swallow anything this throws rather than fail the bake it is
|
|
35
|
+
* reporting on.
|
|
36
|
+
*/
|
|
37
|
+
onProgress?: (message: Record<string, unknown>) => void;
|
|
25
38
|
}
|
|
26
39
|
export interface ForgeTransport {
|
|
27
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-types.d.ts","sourceRoot":"","sources":["../../src/pipeline/transport-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACpC;;yCAEqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"transport-types.d.ts","sourceRoot":"","sources":["../../src/pipeline/transport-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,qBAAqB;IACpC;;yCAEqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;CAC5C"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { ForgedWorkStore } from './forged-work-store.js';
|
|
10
10
|
import type { ForgeDeps } from './deps.js';
|
|
11
|
+
import { type ForgeProgressEvent } from './progress-types.js';
|
|
11
12
|
/**
|
|
12
13
|
* Idle timeout for the level bake: it runs chunk-by-chunk in the browser and
|
|
13
14
|
* emits VOXELIZE_GLB_AS_LEVEL_PROGRESS per chunk, each of which re-arms this
|
|
@@ -16,6 +17,26 @@ import type { ForgeDeps } from './deps.js';
|
|
|
16
17
|
* frozen) fails the attempt.
|
|
17
18
|
*/
|
|
18
19
|
export declare const VOXELIZE_TIMEOUT_MS: number;
|
|
20
|
+
/**
|
|
21
|
+
* Minimum gap between bake progress events reaching the host.
|
|
22
|
+
*
|
|
23
|
+
* The engine emits one message per chunk and a large level has thousands. Every host on the
|
|
24
|
+
* receiving end does something with a cost — a temp-file-and-rename job record write, an SSE frame,
|
|
25
|
+
* a node in a log tree — so the throttle belongs HERE, at the one place both lanes pass through,
|
|
26
|
+
* rather than being reinvented (and forgotten) per host.
|
|
27
|
+
*/
|
|
28
|
+
export declare const BAKE_PROGRESS_MIN_INTERVAL_MS = 3000;
|
|
29
|
+
/**
|
|
30
|
+
* Turn one bake payload into a progress event, or null when it should be dropped by the throttle.
|
|
31
|
+
*
|
|
32
|
+
* The final chunk and the label-only phases ALWAYS pass: the last chunk is what tells a watcher the
|
|
33
|
+
* loop finished rather than stalled, and the phase labels are the only thing said during the upload
|
|
34
|
+
* that follows it. Exported for unit testing — this is the whole of the bake's progress logic, and
|
|
35
|
+
* it is worth being able to exercise it without a browser.
|
|
36
|
+
*/
|
|
37
|
+
export declare function bakeProgressEvent(message: Record<string, unknown>, state: {
|
|
38
|
+
lastAt: number;
|
|
39
|
+
}, at: number): ForgeProgressEvent | null;
|
|
19
40
|
/**
|
|
20
41
|
* Bake the level. Tagged instance groups are skipped (objectAssetInstances).
|
|
21
42
|
* Single attempt: a timed-out bake must not be silently re-run.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voxelize-level.d.ts","sourceRoot":"","sources":["../../src/pipeline/voxelize-level.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"voxelize-level.d.ts","sourceRoot":"","sources":["../../src/pipeline/voxelize-level.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAK3C,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEjF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,QAAiB,CAAC;AAIlD;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAsBlD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EACzB,EAAE,EAAE,MAAM,GACT,kBAAkB,GAAG,IAAI,CA2B3B;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF1F"}
|