@nodetool-ai/game-renderer 0.8.4-a24.2 → 0.8.4

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 (175) hide show
  1. package/README.md +13 -0
  2. package/dist/.nodetool-build-stamp +1 -1
  3. package/dist/audio/player.d.ts +1 -0
  4. package/dist/audio/player.d.ts.map +1 -1
  5. package/dist/audio/player.js +13 -2
  6. package/dist/audio/player.js.map +1 -1
  7. package/dist/build-fingerprint.d.ts +3 -0
  8. package/dist/build-fingerprint.d.ts.map +1 -0
  9. package/dist/build-fingerprint.js +9 -0
  10. package/dist/build-fingerprint.js.map +1 -0
  11. package/dist/build-tauri.d.ts +3 -1
  12. package/dist/build-tauri.d.ts.map +1 -1
  13. package/dist/build-tauri.js +54 -8
  14. package/dist/build-tauri.js.map +1 -1
  15. package/dist/build.d.ts +4 -1
  16. package/dist/build.d.ts.map +1 -1
  17. package/dist/build.js +24 -11
  18. package/dist/build.js.map +1 -1
  19. package/dist/build3d.d.ts +2 -0
  20. package/dist/build3d.d.ts.map +1 -1
  21. package/dist/build3d.js +21 -6
  22. package/dist/build3d.js.map +1 -1
  23. package/dist/canvas2d.d.ts +1 -0
  24. package/dist/canvas2d.d.ts.map +1 -1
  25. package/dist/canvas2d.js +15 -10
  26. package/dist/canvas2d.js.map +1 -1
  27. package/dist/export-media.d.ts +7 -0
  28. package/dist/export-media.d.ts.map +1 -0
  29. package/dist/export-media.js +73 -0
  30. package/dist/export-media.js.map +1 -0
  31. package/dist/frame.d.ts +5 -0
  32. package/dist/frame.d.ts.map +1 -1
  33. package/dist/frame.js +7 -1
  34. package/dist/frame.js.map +1 -1
  35. package/dist/game3d-capture-page.js +306 -276
  36. package/dist/game3d-player.js +399 -350
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/lighting.d.ts.map +1 -1
  42. package/dist/lighting.js +4 -3
  43. package/dist/lighting.js.map +1 -1
  44. package/dist/mouse-input.d.ts +18 -0
  45. package/dist/mouse-input.d.ts.map +1 -0
  46. package/dist/mouse-input.js +135 -0
  47. package/dist/mouse-input.js.map +1 -0
  48. package/dist/node.d.ts.map +1 -1
  49. package/dist/node.js +2 -2
  50. package/dist/node.js.map +1 -1
  51. package/dist/node3d.d.ts.map +1 -1
  52. package/dist/node3d.js +5 -3
  53. package/dist/node3d.js.map +1 -1
  54. package/dist/particles/particles3d.d.ts +12 -10
  55. package/dist/particles/particles3d.d.ts.map +1 -1
  56. package/dist/particles/particles3d.js +81 -60
  57. package/dist/particles/particles3d.js.map +1 -1
  58. package/dist/particles/pass3d.d.ts +6 -4
  59. package/dist/particles/pass3d.d.ts.map +1 -1
  60. package/dist/particles/pass3d.js +28 -15
  61. package/dist/particles/pass3d.js.map +1 -1
  62. package/dist/particles/render2d.d.ts +3 -2
  63. package/dist/particles/render2d.d.ts.map +1 -1
  64. package/dist/particles/render2d.js +9 -2
  65. package/dist/particles/render2d.js.map +1 -1
  66. package/dist/particles/simulator.d.ts +13 -1
  67. package/dist/particles/simulator.d.ts.map +1 -1
  68. package/dist/particles/simulator.js +173 -44
  69. package/dist/particles/simulator.js.map +1 -1
  70. package/dist/particles/transparency3d.d.ts +17 -0
  71. package/dist/particles/transparency3d.d.ts.map +1 -0
  72. package/dist/particles/transparency3d.js +117 -0
  73. package/dist/particles/transparency3d.js.map +1 -0
  74. package/dist/player-v1.js +275 -256
  75. package/dist/renderer3d/animation/index.d.ts +2 -0
  76. package/dist/renderer3d/animation/index.d.ts.map +1 -1
  77. package/dist/renderer3d/animation/index.js +24 -10
  78. package/dist/renderer3d/animation/index.js.map +1 -1
  79. package/dist/renderer3d/assets/image-preparation.d.ts +9 -0
  80. package/dist/renderer3d/assets/image-preparation.d.ts.map +1 -1
  81. package/dist/renderer3d/assets/image-preparation.js +14 -4
  82. package/dist/renderer3d/assets/image-preparation.js.map +1 -1
  83. package/dist/renderer3d/assets/instances.d.ts.map +1 -1
  84. package/dist/renderer3d/assets/instances.js +38 -1
  85. package/dist/renderer3d/assets/instances.js.map +1 -1
  86. package/dist/renderer3d/decals/geometry.d.ts +27 -0
  87. package/dist/renderer3d/decals/geometry.d.ts.map +1 -0
  88. package/dist/renderer3d/decals/geometry.js +142 -0
  89. package/dist/renderer3d/decals/geometry.js.map +1 -0
  90. package/dist/renderer3d/decals/index.d.ts +29 -0
  91. package/dist/renderer3d/decals/index.d.ts.map +1 -0
  92. package/dist/renderer3d/decals/index.js +284 -0
  93. package/dist/renderer3d/decals/index.js.map +1 -0
  94. package/dist/renderer3d/environment/height-fog.d.ts +14 -0
  95. package/dist/renderer3d/environment/height-fog.d.ts.map +1 -0
  96. package/dist/renderer3d/environment/height-fog.js +114 -0
  97. package/dist/renderer3d/environment/height-fog.js.map +1 -0
  98. package/dist/renderer3d/environment/index.d.ts.map +1 -1
  99. package/dist/renderer3d/environment/index.js +4 -1
  100. package/dist/renderer3d/environment/index.js.map +1 -1
  101. package/dist/renderer3d/environment/sky.d.ts +1 -0
  102. package/dist/renderer3d/environment/sky.d.ts.map +1 -1
  103. package/dist/renderer3d/environment/sky.js +33 -16
  104. package/dist/renderer3d/environment/sky.js.map +1 -1
  105. package/dist/renderer3d/import.d.ts.map +1 -1
  106. package/dist/renderer3d/import.js +19 -3
  107. package/dist/renderer3d/import.js.map +1 -1
  108. package/dist/renderer3d/index.d.ts.map +1 -1
  109. package/dist/renderer3d/index.js +27 -4
  110. package/dist/renderer3d/index.js.map +1 -1
  111. package/dist/renderer3d/material-hooks.d.ts +8 -0
  112. package/dist/renderer3d/material-hooks.d.ts.map +1 -0
  113. package/dist/renderer3d/material-hooks.js +53 -0
  114. package/dist/renderer3d/material-hooks.js.map +1 -0
  115. package/dist/renderer3d/pipeline.d.ts +1 -0
  116. package/dist/renderer3d/pipeline.d.ts.map +1 -1
  117. package/dist/renderer3d/pipeline.js.map +1 -1
  118. package/dist/renderer3d/preparation.d.ts +1 -0
  119. package/dist/renderer3d/preparation.d.ts.map +1 -1
  120. package/dist/renderer3d/preparation.js +37 -4
  121. package/dist/renderer3d/preparation.js.map +1 -1
  122. package/dist/renderer3d/scene-sync.d.ts.map +1 -1
  123. package/dist/renderer3d/scene-sync.js +16 -1
  124. package/dist/renderer3d/scene-sync.js.map +1 -1
  125. package/dist/renderer3d/shadows/cascades.d.ts +2 -1
  126. package/dist/renderer3d/shadows/cascades.d.ts.map +1 -1
  127. package/dist/renderer3d/shadows/cascades.js +19 -37
  128. package/dist/renderer3d/shadows/cascades.js.map +1 -1
  129. package/dist/renderer3d/shadows/index.d.ts +1 -0
  130. package/dist/renderer3d/shadows/index.d.ts.map +1 -1
  131. package/dist/renderer3d/shadows/index.js +3 -2
  132. package/dist/renderer3d/shadows/index.js.map +1 -1
  133. package/dist/renderer3d/types.d.ts +1 -0
  134. package/dist/renderer3d/types.d.ts.map +1 -1
  135. package/dist/save-storage.d.ts.map +1 -1
  136. package/dist/save-storage.js +23 -7
  137. package/dist/save-storage.js.map +1 -1
  138. package/dist/smoke.d.ts.map +1 -1
  139. package/dist/smoke.js +27 -12
  140. package/dist/smoke.js.map +1 -1
  141. package/dist/standalone-assets.d.ts +25 -0
  142. package/dist/standalone-assets.d.ts.map +1 -0
  143. package/dist/standalone-assets.js +111 -0
  144. package/dist/standalone-assets.js.map +1 -0
  145. package/dist/standalone-frame.d.ts +7 -0
  146. package/dist/standalone-frame.d.ts.map +1 -0
  147. package/dist/standalone-frame.js +2 -0
  148. package/dist/standalone-frame.js.map +1 -0
  149. package/dist/standalone-player.d.ts +3 -2
  150. package/dist/standalone-player.d.ts.map +1 -1
  151. package/dist/standalone-player.js +246 -76
  152. package/dist/standalone-player.js.map +1 -1
  153. package/dist/standalone-player3d.d.ts +4 -3
  154. package/dist/standalone-player3d.d.ts.map +1 -1
  155. package/dist/standalone-player3d.js +193 -115
  156. package/dist/standalone-player3d.js.map +1 -1
  157. package/dist/touch-controls.d.ts +10 -1
  158. package/dist/touch-controls.d.ts.map +1 -1
  159. package/dist/touch-controls.js +98 -10
  160. package/dist/touch-controls.js.map +1 -1
  161. package/dist/touch-input.d.ts +13 -0
  162. package/dist/touch-input.d.ts.map +1 -0
  163. package/dist/touch-input.js +71 -0
  164. package/dist/touch-input.js.map +1 -0
  165. package/dist/ui/controller.d.ts +7 -0
  166. package/dist/ui/controller.d.ts.map +1 -1
  167. package/dist/ui/controller.js +40 -9
  168. package/dist/ui/controller.js.map +1 -1
  169. package/dist/webgpu/lighting.d.ts +1 -1
  170. package/dist/webgpu/lighting.d.ts.map +1 -1
  171. package/dist/webgpu/lighting.js +4 -3
  172. package/dist/webgpu/lighting.js.map +1 -1
  173. package/dist/webgpu.js +1 -1
  174. package/dist/webgpu.js.map +1 -1
  175. package/package.json +5 -5
@@ -1,15 +1,17 @@
1
1
  import { createScriptedGameSession, GamePlayerSaves, validateGame } from "@nodetool-ai/game-runtime";
2
- import { gameSnapshot } from "@nodetool-ai/protocol";
2
+ import { gameInputFrame, gameSnapshot } from "@nodetool-ai/protocol";
3
3
  import { createGameRenderer, loadBrowserGameFonts } from "./browser.js";
4
4
  import { GameAudioPlayer, gameAudioSpatialView2D } from "./audio.js";
5
5
  import { mountTouchControls, touchLayout } from "./touch-controls.js";
6
6
  import { browserGamepads, GameInput } from "./input-bindings.js";
7
- import { attachGameUiPointer, browserGameUiInsets, browserGameUiMeasure, GameUiController } from "./ui/controller.js";
7
+ import { attachGameMouseInput } from "./mouse-input.js";
8
+ import { attachGameUiPointer, claimGameUiPointer, browserGameUiInsets, browserGameUiMeasure, GameUiController } from "./ui/controller.js";
8
9
  import { gameUiViewport2D } from "./ui/hud2d.js";
9
10
  import { resolveGameInputBindings } from "@nodetool-ai/protocol";
10
11
  import { GameFrameBudgetMonitor, gameAudioVoiceCount } from "./frame-budget.js";
11
12
  import { GameParticles2D } from "./particles/render2d.js";
12
13
  import { createIndexedDbGameSaveStorage, loadQuickSave } from "./save-storage.js";
14
+ import { VerifiedStandaloneAssets } from "./standalone-assets.js";
13
15
  const PLAYER_VERSIONS = ["1", "3"];
14
16
  function element(id) {
15
17
  const found = document.getElementById(id);
@@ -43,7 +45,24 @@ async function start() {
43
45
  if (!PLAYER_VERSIONS.includes(game.engineVersion)) {
44
46
  throw new Error(`This player supports engine versions ${PLAYER_VERSIONS.join(" and ")}`);
45
47
  }
46
- const fonts = await loadBrowserGameFonts(game, async (assetId) => assetId.startsWith("./assets/") ? assetId : null);
48
+ const verifiedAssets = new VerifiedStandaloneAssets(game.assets, Object.fromEntries(Object.entries(game.assets).map(([id, binding]) => [id, binding.assetId])));
49
+ try {
50
+ await startPlayer(game, verifiedAssets);
51
+ }
52
+ catch (error) {
53
+ verifiedAssets.dispose();
54
+ throw error;
55
+ }
56
+ }
57
+ async function startPlayer(game, verifiedAssets) {
58
+ const playbackControls = ["pause", "step", "reset", "save", "load"].map(element);
59
+ for (const control of playbackControls) {
60
+ control.setAttribute("disabled", "");
61
+ }
62
+ const fonts = await loadBrowserGameFonts(game, async (assetId) => {
63
+ const logicalId = Object.keys(game.assets).find((id) => game.assets[id]?.assetId === assetId);
64
+ return logicalId === undefined ? null : verifiedAssets.url(logicalId);
65
+ });
47
66
  const canvas = element("game");
48
67
  if (!(canvas instanceof HTMLCanvasElement)) {
49
68
  throw new Error("Game viewport is not a canvas");
@@ -52,7 +71,7 @@ async function start() {
52
71
  assets: game.assets,
53
72
  scenes: game.scenes,
54
73
  tickRate: game.tickRate,
55
- resolveAsset: async (binding) => binding.assetId.startsWith("./assets/") ? binding.assetId : null,
74
+ resolveAsset: (binding) => verifiedAssets.bindingUrl(binding),
56
75
  status: showStatus,
57
76
  mixer: game.audio?.mixer
58
77
  });
@@ -63,15 +82,8 @@ async function start() {
63
82
  const renderer = await createGameRenderer({
64
83
  canvas,
65
84
  assets: async (logicalId) => {
66
- const ref = game.assets[logicalId]?.assetId;
67
- if (!ref || !ref.startsWith("./assets/")) {
68
- return null;
69
- }
70
- const assetResponse = await fetch(ref, { cache: "force-cache" });
71
- if (!assetResponse.ok) {
72
- return null;
73
- }
74
- return createImageBitmap(await assetResponse.blob(), { premultiplyAlpha: "none" });
85
+ const bytes = await verifiedAssets.bytes(logicalId);
86
+ return bytes ? createImageBitmap(new Blob([bytes]), { premultiplyAlpha: "none" }) : null;
75
87
  },
76
88
  });
77
89
  const effects = game.renderEffects ?? [];
@@ -98,10 +110,13 @@ async function start() {
98
110
  const input = new GameInput();
99
111
  // HUD buttons press their input actions on the same input, by pointer, touch or gamepad focus.
100
112
  const hud = new GameUiController(input, browserGameUiMeasure(game.id));
101
- attachGameUiPointer(canvas, hud, () => gameUiViewport2D(latest));
113
+ const detachHud = attachGameUiPointer(canvas, hud, () => gameUiViewport2D(latest), () => !paused);
114
+ const detachMouse = attachGameMouseInput(canvas, input, { active: () => !paused && !document.hidden });
102
115
  let hudInsets = browserGameUiInsets(canvas, gameUiViewport2D(latest));
103
116
  window.addEventListener("resize", () => { hudInsets = browserGameUiInsets(canvas, gameUiViewport2D(latest)); });
117
+ let touchControls;
104
118
  function releaseAll() {
119
+ touchControls?.release();
105
120
  hud.release();
106
121
  input.release();
107
122
  }
@@ -118,7 +133,12 @@ async function start() {
118
133
  }
119
134
  element("pause").setAttribute("aria-label", "Pause");
120
135
  element("pause").textContent = pauseLabel(paused);
121
- mountTouchControls(touchRoot, { layout: touchLayout(resolveGameInputBindings(game)), onChange: (state) => input.setTouch(state) });
136
+ touchControls = mountTouchControls(touchRoot, {
137
+ layout: touchLayout(resolveGameInputBindings(game)), onChange: (state) => input.setTouch(state),
138
+ active: () => !paused && !document.hidden,
139
+ claimPointer: (event) => claimGameUiPointer(canvas, hud, gameUiViewport2D(latest), event),
140
+ releasePointer: (id) => hud.pointerUp(id)
141
+ });
122
142
  }
123
143
  if (window.matchMedia("(pointer: coarse)").matches)
124
144
  enableTouch();
@@ -136,16 +156,118 @@ async function start() {
136
156
  void orientation.lock?.("landscape").catch(() => undefined);
137
157
  }).catch(() => showStatus("Fullscreen is unavailable"));
138
158
  });
159
+ let disposed = false;
160
+ let replacement = new AbortController();
161
+ let replacing;
162
+ function beginReplacement() {
163
+ if (disposed) {
164
+ throw new DOMException("Game player is disposed", "AbortError");
165
+ }
166
+ replacement.abort();
167
+ replacement = new AbortController();
168
+ replacing = replacement.signal;
169
+ return replacement.signal;
170
+ }
171
+ function finishReplacement(signal) {
172
+ if (replacing === signal) {
173
+ replacing = undefined;
174
+ }
175
+ }
176
+ async function replaceSession(signal, snapshot) {
177
+ const restored = await createScriptedGameSession(game, 1, snapshot);
178
+ if (signal.aborted || disposed) {
179
+ restored.dispose();
180
+ return false;
181
+ }
182
+ while (rendering) {
183
+ try {
184
+ await rendering;
185
+ }
186
+ catch { /* A reset can recover from an earlier failed render. */ }
187
+ }
188
+ if (signal.aborted || disposed) {
189
+ restored.dispose();
190
+ return false;
191
+ }
192
+ session.dispose();
193
+ session = restored;
194
+ saves.clear();
195
+ audio.reset(session.snapshot());
196
+ latest = session.frame();
197
+ particles.clear();
198
+ releaseAll();
199
+ accumulator = 0;
200
+ return true;
201
+ }
139
202
  let rendering;
203
+ let frameNumber = 0;
204
+ let commands = Promise.resolve();
205
+ function queueCommand(action) {
206
+ const result = commands.then(action);
207
+ commands = result.then(() => undefined, () => undefined);
208
+ return result;
209
+ }
210
+ function requireCurrent(signal) {
211
+ if (signal.aborted || disposed) {
212
+ throw new DOMException("Game command was superseded", "AbortError");
213
+ }
214
+ }
215
+ async function renderExplicit(signal) {
216
+ while (rendering) {
217
+ await rendering;
218
+ }
219
+ requireCurrent(signal);
220
+ audio.updateSpatial(gameAudioSpatialView2D(latest, 1));
221
+ hud.update(latest.ui, gameUiViewport2D(latest), hudInsets);
222
+ const frame = hud.annotate(latest);
223
+ const pending = renderer.render(frame, 1, particles);
224
+ rendering = pending;
225
+ try {
226
+ const stats = await pending;
227
+ requireCurrent(signal);
228
+ frameNumber += 1;
229
+ budget.observe({ drawCalls: stats.drawCalls, particles: particles.count, voices: gameAudioVoiceCount(audio.mixerState()) });
230
+ return { tick: frame.tick, frameNumber };
231
+ }
232
+ finally {
233
+ if (rendering === pending) {
234
+ rendering = undefined;
235
+ }
236
+ }
237
+ }
140
238
  let accumulator = 0;
141
239
  let lastTime = performance.now();
142
240
  let animationFrame = 0;
143
241
  const tickMs = 1000 / game.tickRate;
242
+ function setPaused(next) {
243
+ paused = next;
244
+ releaseAll();
245
+ input.setEnabled(!next);
246
+ accumulator = 0;
247
+ lastTime = performance.now();
248
+ if (next) {
249
+ audio.pause();
250
+ }
251
+ else {
252
+ audio.resume();
253
+ }
254
+ element("pause").textContent = pauseLabel(next);
255
+ }
144
256
  // Script saves and the Save button share per-game IndexedDB storage. Loaded data reaches scripts on the next frame.
145
257
  const saves = new GamePlayerSaves(createIndexedDbGameSaveStorage(game.id), { onError: (error) => showStatus(error.message) });
146
258
  const QUICK_SAVE = "quicksave";
147
259
  // Quick saves from before IndexedDB storage, moved into the quicksave slot on the first load.
148
- const legacyQuickSave = { storage: localStorage, key: `nodetool-game:${game.id}:${game.revision}:save` };
260
+ const legacyQuickSave = {
261
+ get storage() {
262
+ try {
263
+ return localStorage;
264
+ }
265
+ catch (cause) {
266
+ throw new Error("Legacy game save storage is unavailable", { cause });
267
+ }
268
+ },
269
+ key: `nodetool-game:${game.id}:${game.revision}:save`
270
+ };
149
271
  function stepSession(frame, replay = false) {
150
272
  const result = session.step(replay ? frame : saves.withLoaded(frame));
151
273
  if (!replay) {
@@ -161,12 +283,21 @@ async function start() {
161
283
  hud.update(latest.ui, gameUiViewport2D(latest), hudInsets);
162
284
  rendering = renderer.render(hud.annotate(latest), interpolation, particles)
163
285
  .then((stats) => {
286
+ if (disposed) {
287
+ return;
288
+ }
289
+ frameNumber += 1;
164
290
  budget.observe({ drawCalls: stats.drawCalls, particles: particles.count, voices: gameAudioVoiceCount(audio.mixerState()) });
165
291
  if (effects.some((effect) => !effect.required) && renderer.capabilities.fallbackReason) {
166
292
  showStatus("GPU effect omitted after WebGPU failure");
167
293
  }
168
294
  })
169
- .catch((error) => showStatus(error instanceof Error ? error.message : "Rendering failed"))
295
+ .catch((error) => {
296
+ if (!disposed) {
297
+ setPaused(true);
298
+ showStatus(error instanceof Error ? error.message : "Rendering failed");
299
+ }
300
+ })
170
301
  .finally(() => { rendering = undefined; });
171
302
  }
172
303
  function step() {
@@ -180,14 +311,13 @@ async function start() {
180
311
  return true;
181
312
  }
182
313
  catch (error) {
183
- paused = true;
184
- element("pause").textContent = pauseLabel(true);
314
+ setPaused(true);
185
315
  showStatus(error instanceof Error ? error.message : "Game script failed");
186
316
  return false;
187
317
  }
188
318
  }
189
319
  function tick(now) {
190
- if (!paused && !document.hidden) {
320
+ if (!paused && !replacing && !document.hidden) {
191
321
  accumulator += Math.min(250, now - lastTime);
192
322
  let steps = 0;
193
323
  while (accumulator >= tickMs && steps < 5) {
@@ -221,35 +351,34 @@ async function start() {
221
351
  lastTime = performance.now();
222
352
  });
223
353
  element("pause").addEventListener("click", () => {
224
- paused = !paused;
225
- // Input pressed while paused is dropped rather than delivered on resume.
226
- input.setEnabled(!paused);
227
- if (paused)
228
- audio.pause();
229
- else
230
- audio.resume();
231
- element("pause").textContent = pauseLabel(paused);
232
- lastTime = performance.now();
354
+ setPaused(!paused);
233
355
  });
234
356
  element("step").addEventListener("click", () => {
235
357
  if (paused) {
236
- step();
237
- render(1);
358
+ void window.nativeGamePlayer.step(input.sample2D(game)).catch((error) => {
359
+ showStatus(error instanceof Error ? error.message : "Game could not step");
360
+ });
238
361
  }
239
362
  });
240
363
  element("reset").addEventListener("click", () => {
241
- void createScriptedGameSession(game, 1).then((restored) => {
242
- session.dispose();
243
- session = restored;
244
- saves.clear();
245
- audio.reset(session.snapshot());
246
- latest = session.frame();
247
- particles.clear();
248
- releaseAll();
249
- accumulator = 0;
364
+ if (disposed) {
365
+ return;
366
+ }
367
+ const wasPaused = paused;
368
+ const signal = beginReplacement();
369
+ setPaused(true);
370
+ void replaceSession(signal).then(async (replaced) => {
371
+ if (!replaced) {
372
+ return;
373
+ }
374
+ await renderExplicit(signal);
375
+ setPaused(wasPaused);
250
376
  showStatus("Game reset");
251
- render(1);
252
- }).catch((error) => showStatus(error instanceof Error ? error.message : "Game could not reset"));
377
+ }).catch((error) => {
378
+ if (!signal.aborted && !disposed) {
379
+ showStatus(error instanceof Error ? error.message : "Game could not reset");
380
+ }
381
+ }).finally(() => finishReplacement(signal));
253
382
  });
254
383
  element("save").addEventListener("click", () => {
255
384
  void saves.save("progress", QUICK_SAVE, {}, session.snapshot())
@@ -257,55 +386,97 @@ async function start() {
257
386
  .catch((error) => showStatus(error instanceof Error ? error.message : "Game could not be saved"));
258
387
  });
259
388
  element("load").addEventListener("click", () => {
389
+ if (disposed) {
390
+ return;
391
+ }
392
+ const wasPaused = paused;
393
+ const signal = beginReplacement();
394
+ setPaused(true);
260
395
  void loadQuickSave(saves, QUICK_SAVE, legacyQuickSave).then(async (record) => {
396
+ if (signal.aborted || disposed) {
397
+ return;
398
+ }
261
399
  if (record?.snapshot === undefined) {
400
+ setPaused(wasPaused);
262
401
  showStatus("No saved game");
263
402
  return;
264
403
  }
265
- const restored = await createScriptedGameSession(game, 1, gameSnapshot.parse(record.snapshot));
266
- session.dispose();
267
- session = restored;
268
- saves.clear();
269
- audio.reset(session.snapshot());
270
- latest = session.frame();
271
- particles.clear();
272
- accumulator = 0;
404
+ if (!await replaceSession(signal, gameSnapshot.parse(record.snapshot))) {
405
+ return;
406
+ }
407
+ await renderExplicit(signal);
408
+ setPaused(wasPaused);
273
409
  showStatus("Game loaded");
274
- render(1);
275
- }).catch((error) => showStatus(error instanceof Error ? error.message : "Save could not be loaded"));
410
+ }).catch((error) => {
411
+ if (!signal.aborted && !disposed) {
412
+ setPaused(wasPaused);
413
+ showStatus(error instanceof Error ? error.message : "Save could not be loaded");
414
+ }
415
+ }).finally(() => finishReplacement(signal));
276
416
  });
277
- window.addEventListener("beforeunload", () => {
417
+ function disposePlayer() {
418
+ if (disposed) {
419
+ return;
420
+ }
421
+ disposed = true;
422
+ replacement.abort();
423
+ touchControls?.dispose();
424
+ detachMouse();
425
+ detachHud();
278
426
  cancelAnimationFrame(animationFrame);
279
427
  session.dispose();
280
428
  renderer.dispose();
281
429
  fonts.dispose();
282
430
  audio.dispose();
283
- });
431
+ verifiedAssets.dispose();
432
+ }
433
+ window.addEventListener("beforeunload", disposePlayer);
434
+ try {
435
+ await renderExplicit(replacement.signal);
436
+ }
437
+ catch (error) {
438
+ setPaused(true);
439
+ disposePlayer();
440
+ throw error;
441
+ }
442
+ lastTime = performance.now();
443
+ for (const control of playbackControls) {
444
+ control.removeAttribute("disabled");
445
+ }
284
446
  window.nativeGamePlayer = Object.freeze({
285
- pause: () => { paused = true; releaseAll(); accumulator = 0; },
447
+ pause: () => setPaused(true),
286
448
  reset: async () => {
287
- paused = true;
288
- const replacement = await createScriptedGameSession(game, 1);
289
- session.dispose();
290
- session = replacement;
291
- saves.clear();
292
- audio.reset(session.snapshot());
293
- latest = session.frame();
294
- particles.clear();
295
- releaseAll();
296
- accumulator = 0;
297
- await rendering;
298
- await renderer.render(latest, 1, particles);
449
+ const signal = beginReplacement();
450
+ setPaused(true);
451
+ return queueCommand(async () => {
452
+ requireCurrent(signal);
453
+ if (!await replaceSession(signal)) {
454
+ throw new DOMException("Game reset was superseded", "AbortError");
455
+ }
456
+ return renderExplicit(signal);
457
+ }).finally(() => finishReplacement(signal));
299
458
  },
300
459
  step: async (input) => {
301
- paused = true;
302
- const result = stepSession(input, true);
303
- latest = result.frame;
304
- particles.tick(result.frame, session.takePresentationEvents());
305
- result.events.forEach(event => audio.handle(event));
306
- audio.sync(session.snapshot());
307
- await rendering;
308
- await renderer.render(latest, 1, particles);
460
+ const frame = gameInputFrame.parse(input);
461
+ if (replacing) {
462
+ throw new Error("Game session replacement is still loading");
463
+ }
464
+ const signal = replacement.signal;
465
+ requireCurrent(signal);
466
+ setPaused(true);
467
+ return queueCommand(async () => {
468
+ requireCurrent(signal);
469
+ while (rendering) {
470
+ await rendering;
471
+ }
472
+ requireCurrent(signal);
473
+ const result = stepSession(frame, true);
474
+ latest = result.frame;
475
+ particles.tick(result.frame, session.takePresentationEvents());
476
+ result.events.forEach(event => audio.handle(event));
477
+ audio.sync(session.snapshot());
478
+ return renderExplicit(signal);
479
+ });
309
480
  },
310
481
  snapshot: () => session.snapshot(),
311
482
  saves: Object.freeze({
@@ -313,7 +484,6 @@ async function start() {
313
484
  })
314
485
  });
315
486
  showStatus(`Ready (${renderer.backend})${effectNotice ? ` · ${effectNotice}` : ""}${fonts.diagnostics.length ? ` · ${fonts.diagnostics.join("; ")}` : ""}`);
316
- render(1);
317
487
  animationFrame = requestAnimationFrame(tick);
318
488
  }
319
489
  void start().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"standalone-player.js","sourceRoot":"","sources":["../src/standalone-player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standalone-player.js","sourceRoot":"","sources":["../src/standalone-player.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { GamePlayerSaves } from "@nodetool-ai/game-runtime";
2
2
  import { type GameInputFrame3D, type GameSnapshot3D, type GameInspection3D } from "@nodetool-ai/protocol";
3
+ import type { GamePlayerRenderedFrame } from "./standalone-frame.js";
3
4
  declare global {
4
5
  interface Window {
5
6
  nativeGame3DPlayer: {
6
7
  readonly pause: () => void;
7
- readonly step: (input: GameInputFrame3D) => Promise<void>;
8
- readonly reset: () => Promise<void>;
9
- readonly advance: (inputs: readonly GameInputFrame3D[]) => Promise<void>;
8
+ readonly step: (input: GameInputFrame3D) => Promise<GamePlayerRenderedFrame>;
9
+ readonly reset: () => Promise<GamePlayerRenderedFrame>;
10
+ readonly advance: (inputs: readonly GameInputFrame3D[]) => Promise<GamePlayerRenderedFrame>;
10
11
  readonly snapshot: () => GameSnapshot3D;
11
12
  readonly inspect: () => GameInspection3D;
12
13
  /** Progress and settings saves of this game in IndexedDB. */
@@ -1 +1 @@
1
- {"version":3,"file":"standalone-player3d.d.ts","sourceRoot":"","sources":["../src/standalone-player3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE/G,OAAO,EAA4C,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAapJ,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,kBAAkB,EAAE;YAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;YAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;YACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC;YACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,gBAAgB,CAAC;YACzC,6DAA6D;YAC7D,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC;SAC7E,CAAC;KACH;CACF"}
1
+ {"version":3,"file":"standalone-player3d.d.ts","sourceRoot":"","sources":["../src/standalone-player3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE/G,OAAO,EAAmF,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAe3L,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,kBAAkB,EAAE;YAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;YAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACvD,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC;YACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,gBAAgB,CAAC;YACzC,6DAA6D;YAC7D,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC;SAC7E,CAAC;KACH;CACF"}