@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.
Files changed (37) hide show
  1. package/dist/artifact-types.d.ts +27 -0
  2. package/dist/artifact-types.d.ts.map +1 -1
  3. package/dist/generated/game-data-schema.d.ts +152 -1
  4. package/dist/generated/game-data-schema.d.ts.map +1 -1
  5. package/dist/generated/game-data-schema.js +184 -1
  6. package/dist/generated/game-data-schema.js.map +1 -1
  7. package/dist/pipeline/create-level-archetypes.d.ts.map +1 -1
  8. package/dist/pipeline/create-level-archetypes.js +30 -2
  9. package/dist/pipeline/create-level-archetypes.js.map +1 -1
  10. package/dist/pipeline/deps.d.ts +17 -0
  11. package/dist/pipeline/deps.d.ts.map +1 -1
  12. package/dist/pipeline/forge-map-render.d.ts +40 -0
  13. package/dist/pipeline/forge-map-render.d.ts.map +1 -0
  14. package/dist/pipeline/forge-map-render.js +109 -0
  15. package/dist/pipeline/forge-map-render.js.map +1 -0
  16. package/dist/pipeline/index.d.ts +3 -0
  17. package/dist/pipeline/index.d.ts.map +1 -1
  18. package/dist/pipeline/index.js +3 -0
  19. package/dist/pipeline/index.js.map +1 -1
  20. package/dist/pipeline/layout-map.d.ts +109 -0
  21. package/dist/pipeline/layout-map.d.ts.map +1 -0
  22. package/dist/pipeline/layout-map.js +175 -0
  23. package/dist/pipeline/layout-map.js.map +1 -0
  24. package/dist/pipeline/place-and-persist-level.d.ts.map +1 -1
  25. package/dist/pipeline/place-and-persist-level.js +25 -0
  26. package/dist/pipeline/place-and-persist-level.js.map +1 -1
  27. package/dist/pipeline/progress-types.d.ts +116 -0
  28. package/dist/pipeline/progress-types.d.ts.map +1 -0
  29. package/dist/pipeline/progress-types.js +67 -0
  30. package/dist/pipeline/progress-types.js.map +1 -0
  31. package/dist/pipeline/transport-types.d.ts +13 -0
  32. package/dist/pipeline/transport-types.d.ts.map +1 -1
  33. package/dist/pipeline/voxelize-level.d.ts +21 -0
  34. package/dist/pipeline/voxelize-level.d.ts.map +1 -1
  35. package/dist/pipeline/voxelize-level.js +84 -2
  36. package/dist/pipeline/voxelize-level.js.map +1 -1
  37. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import { requireArtifact } from './artifact-store.js';
2
2
  import { ForgeStepError } from './errors.js';
3
3
  import { forgeRequestId } from './request-id.js';
4
+ import { emitForgeProgress } from './progress-types.js';
4
5
  /**
5
6
  * Idle timeout for the level bake: it runs chunk-by-chunk in the browser and
6
7
  * emits VOXELIZE_GLB_AS_LEVEL_PROGRESS per chunk, each of which re-arms this
@@ -11,6 +12,63 @@ import { forgeRequestId } from './request-id.js';
11
12
  export const VOXELIZE_TIMEOUT_MS = 20 * 60 * 1000;
12
13
  /** Progress message the bake emits per chunk; resets the idle timeout above. */
13
14
  const VOXELIZE_PROGRESS_TYPE = 'VOXELIZE_GLB_AS_LEVEL_PROGRESS';
15
+ /**
16
+ * Minimum gap between bake progress events reaching the host.
17
+ *
18
+ * The engine emits one message per chunk and a large level has thousands. Every host on the
19
+ * receiving end does something with a cost — a temp-file-and-rename job record write, an SSE frame,
20
+ * a node in a log tree — so the throttle belongs HERE, at the one place both lanes pass through,
21
+ * rather than being reinvented (and forgotten) per host.
22
+ */
23
+ export const BAKE_PROGRESS_MIN_INTERVAL_MS = 3000;
24
+ function asBakeProgress(message) {
25
+ const { chunkIndex, totalChunks } = message;
26
+ if (typeof chunkIndex !== 'number' || typeof totalChunks !== 'number')
27
+ return null;
28
+ return {
29
+ chunkIndex,
30
+ totalChunks,
31
+ ...(typeof message.nonEmptyChunks === 'number' ? { nonEmptyChunks: message.nonEmptyChunks } : {}),
32
+ ...(typeof message.label === 'string' ? { label: message.label } : {}),
33
+ };
34
+ }
35
+ /**
36
+ * Turn one bake payload into a progress event, or null when it should be dropped by the throttle.
37
+ *
38
+ * The final chunk and the label-only phases ALWAYS pass: the last chunk is what tells a watcher the
39
+ * loop finished rather than stalled, and the phase labels are the only thing said during the upload
40
+ * that follows it. Exported for unit testing — this is the whole of the bake's progress logic, and
41
+ * it is worth being able to exercise it without a browser.
42
+ */
43
+ export function bakeProgressEvent(message, state, at) {
44
+ const progress = asBakeProgress(message);
45
+ if (progress === null)
46
+ return null;
47
+ const isPhaseLabel = progress.totalChunks <= 0;
48
+ const isFinalChunk = !isPhaseLabel && progress.chunkIndex + 1 >= progress.totalChunks;
49
+ if (!isFinalChunk && !isPhaseLabel && at - state.lastAt < BAKE_PROGRESS_MIN_INTERVAL_MS)
50
+ return null;
51
+ state.lastAt = at;
52
+ if (isPhaseLabel) {
53
+ return {
54
+ step: 'voxelize',
55
+ phase: 'update',
56
+ message: `Baking the level — ${progress.label ?? 'working'}`,
57
+ ...(progress.label ? { detail: progress.label } : {}),
58
+ };
59
+ }
60
+ const done = progress.chunkIndex + 1;
61
+ const percent = Math.floor((done / progress.totalChunks) * 100);
62
+ const filled = progress.nonEmptyChunks === undefined ? '' : `, ${progress.nonEmptyChunks} non-empty`;
63
+ return {
64
+ step: 'voxelize',
65
+ phase: 'update',
66
+ message: `Baking the level — chunk ${done}/${progress.totalChunks} (${percent}%${filled})`,
67
+ completed: done,
68
+ total: progress.totalChunks,
69
+ ...(progress.label ? { detail: progress.label } : {}),
70
+ };
71
+ }
14
72
  /**
15
73
  * Bake the level. Tagged instance groups are skipped (objectAssetInstances).
16
74
  * Single attempt: a timed-out bake must not be silently re-run.
@@ -19,6 +77,14 @@ export async function voxelizeLevel(store, deps) {
19
77
  const input = await requireArtifact(store, 'input');
20
78
  const forge = await requireArtifact(store, 'forge');
21
79
  const requestId = forgeRequestId();
80
+ emitForgeProgress(deps, {
81
+ step: 'voxelize',
82
+ phase: 'start',
83
+ message: 'Baking the level (the long step — chunk progress follows)',
84
+ });
85
+ // -Infinity, not 0: the FIRST message must always pass. A zero start throttles it whenever the
86
+ // clock begins near zero, which is exactly the moment a watcher most needs to see the bake begin.
87
+ const throttle = { lastAt: -Infinity };
22
88
  const result = await deps.transport.sendAndWait({
23
89
  type: 'VOXELIZE_GLB_AS_LEVEL',
24
90
  requestId,
@@ -30,8 +96,17 @@ export async function voxelizeLevel(store, deps) {
30
96
  options: forge.voxelizeOptions,
31
97
  }, 'VOXELIZE_GLB_AS_LEVEL_RESULT', VOXELIZE_TIMEOUT_MS,
32
98
  // Single attempt (a timed-out bake must not be silently re-fired), but the
33
- // timeout is now idle-based: per-chunk progress re-arms it.
34
- { maxRetries: 1, progressType: VOXELIZE_PROGRESS_TYPE });
99
+ // timeout is now idle-based: per-chunk progress re-arms it — and the same
100
+ // messages are now also reported on, rather than only counted.
101
+ {
102
+ maxRetries: 1,
103
+ progressType: VOXELIZE_PROGRESS_TYPE,
104
+ onProgress: (message) => {
105
+ const event = bakeProgressEvent(message, throttle, Date.now());
106
+ if (event)
107
+ emitForgeProgress(deps, event);
108
+ },
109
+ });
35
110
  if (!result) {
36
111
  throw new ForgeStepError('Level voxelization timed out. The editor (browser) must be open for baking. The designed GLB was uploaded and can be voxelized manually from the Assets tab.', forge.glbUrl);
37
112
  }
@@ -58,6 +133,13 @@ export async function voxelizeLevel(store, deps) {
58
133
  ...(notes.length > 0 ? { notes } : {}),
59
134
  };
60
135
  await store.put('level-bake', bake);
136
+ emitForgeProgress(deps, {
137
+ step: 'voxelize',
138
+ phase: 'done',
139
+ message: bake.nonEmptyChunkCount === undefined
140
+ ? 'Level baked'
141
+ : `Level baked (${bake.nonEmptyChunkCount} non-empty chunks)`,
142
+ });
61
143
  deps.logger.info({ jobId: store.jobId, vwldUrl: bake.vwldUrl, chunks: bake.nonEmptyChunkCount, navUrl: forge.navUrl, unmatched }, 'Level baked');
62
144
  }
63
145
  //# sourceMappingURL=voxelize-level.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"voxelize-level.js","sourceRoot":"","sources":["../../src/pipeline/voxelize-level.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voxelize-level.js","sourceRoot":"","sources":["../../src/pipeline/voxelize-level.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitmagic/world-forger",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Client half of the Bitmagic world forger: the forged-level artifact schema, the host seams, and the browser pipeline steps that bake archetypes, bake a level and place its instances.",
5
5
  "license": "MIT",
6
6
  "type": "module",