@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,17 +1,19 @@
1
1
  import { createGameSession3D, decodePreparedGameCollider3D, GamePlayerSaves } from "@nodetool-ai/game-runtime";
2
2
  import { z } from "zod";
3
- import { gameDocument3D, resolveGameInputBindings } from "@nodetool-ai/protocol";
3
+ import { gameDocument3D, gameInputFrame3D, resolveGameInputBindings } from "@nodetool-ai/protocol";
4
4
  import { createGameRenderer3D } from "./browser3d.js";
5
5
  import { GameInput3D } from "./input3d.js";
6
6
  import { browserGamepads } from "./input-bindings.js";
7
+ import { attachGameMouseInput } from "./mouse-input.js";
7
8
  import { mountTouchControls, touchLayout } from "./touch-controls.js";
8
9
  import { GameAudioPlayer, gameAudioSpatialView3D } from "./audio.js";
9
10
  import { FixedTickClock } from "./fixed-tick-host.js";
10
11
  import { GameFrameBudgetMonitor, gameAudioVoiceCount } from "./frame-budget.js";
11
12
  import { GameParticles3D } from "./particles/particles3d.js";
12
13
  import { createIndexedDbGameSaveStorage } from "./save-storage.js";
13
- import { attachGameUiPointer, browserGameUiInsets, browserGameUiMeasure, GameUiController } from "./ui/controller.js";
14
+ import { attachGameUiPointer, claimGameUiPointer, browserGameUiInsets, browserGameUiMeasure, GameUiController } from "./ui/controller.js";
14
15
  import { gameUiViewport3D } from "./ui/hud3d.js";
16
+ import { VerifiedStandaloneAssets } from "./standalone-assets.js";
15
17
  function status(message) {
16
18
  const element = document.getElementById("status");
17
19
  if (element) {
@@ -34,27 +36,22 @@ async function start() {
34
36
  if (!(canvas instanceof HTMLCanvasElement)) {
35
37
  throw new Error("Game viewport is missing");
36
38
  }
37
- const localAssets = new Map();
38
- for (const [logicalId, binding] of Object.entries(game.assets)) {
39
- const path = manifest.assets[logicalId];
40
- if (!path || !path.startsWith(`./assets/${binding.digest}.`)) {
41
- throw new Error(`Export asset ${logicalId} has no verified local path`);
42
- }
43
- const asset = await fetch(path, { signal: controller.signal });
44
- if (!asset.ok) {
45
- throw new Error(`Export asset ${logicalId} could not load`);
46
- }
47
- const bytes = new Uint8Array(await asset.arrayBuffer());
48
- const hash = await crypto.subtle.digest("SHA-256", bytes);
49
- const digest = Array.from(new Uint8Array(hash), (byte) => byte.toString(16).padStart(2, "0")).join("");
50
- if (digest !== binding.digest) {
51
- throw new Error(`Export asset ${logicalId} failed its digest check`);
52
- }
53
- localAssets.set(logicalId, bytes);
39
+ const verifiedAssets = new VerifiedStandaloneAssets(game.assets, manifest.assets);
40
+ try {
41
+ await startPlayer(game, canvas, controller, verifiedAssets);
42
+ }
43
+ catch (error) {
44
+ verifiedAssets.dispose();
45
+ throw error;
46
+ }
47
+ }
48
+ async function startPlayer(game, canvas, controller, verifiedAssets) {
49
+ for (const logicalId of Object.keys(game.assets)) {
50
+ await verifiedAssets.verify(logicalId);
54
51
  }
55
52
  const open = () => createGameSession3D(game, 1, undefined, { signal: controller.signal,
56
53
  resolveCollider: async (binding) => {
57
- const bytes = localAssets.get(Object.entries(game.assets).find(([, entry]) => entry.assetId === binding.assetId)?.[0] ?? "");
54
+ const bytes = await verifiedAssets.bytes(Object.entries(game.assets).find(([, entry]) => entry.assetId === binding.assetId)?.[0] ?? "");
58
55
  if (!bytes) {
59
56
  throw new Error("Export collider is missing");
60
57
  }
@@ -65,13 +62,13 @@ async function start() {
65
62
  let contextPaused = false;
66
63
  const renderer = await createGameRenderer3D({ canvas, signal: controller.signal,
67
64
  resolveImage: async (logicalId) => {
68
- const bytes = localAssets.get(logicalId);
65
+ const bytes = await verifiedAssets.bytes(logicalId);
69
66
  const binding = Object.hasOwn(game.assets, logicalId) ? game.assets[logicalId] : undefined;
70
67
  return bytes && binding?.mediaKind === "image" ? { bytes, binding } : null;
71
68
  },
72
- resolveFont: async (logicalId) => { const bytes = localAssets.get(logicalId); return bytes ? { bytes, digest: game.assets[logicalId]?.digest } : null; },
69
+ resolveFont: async (logicalId) => { const bytes = await verifiedAssets.bytes(logicalId); return bytes ? { bytes, digest: game.assets[logicalId]?.digest } : null; },
73
70
  resolveModel: async (logicalId) => {
74
- const bytes = localAssets.get(logicalId);
71
+ const bytes = await verifiedAssets.bytes(logicalId);
75
72
  return bytes ? { bytes, digest: game.assets[logicalId]?.digest } : null;
76
73
  },
77
74
  onContextState: (state) => {
@@ -81,7 +78,7 @@ async function start() {
81
78
  renderer.resize(game.presentation.hudWidth, game.presentation.hudWidth / game.presentation.aspectRatio);
82
79
  let frame = session.frame();
83
80
  const audio = new GameAudioPlayer({ assets: game.assets, scenes: game.scenes, tickRate: game.tickRate,
84
- resolveAsset: async (binding) => manifest.assets[Object.entries(game.assets).find(([, entry]) => entry.assetId === binding.assetId && entry.digest === binding.digest)?.[0] ?? ""] ?? null,
81
+ resolveAsset: (binding) => verifiedAssets.bindingUrl(binding),
85
82
  status, mixer: game.audio?.mixer });
86
83
  audio.preload();
87
84
  audio.sync(session.snapshot());
@@ -109,11 +106,11 @@ async function start() {
109
106
  // A locked pointer has no position, so HUD hits wait until the mouse is released.
110
107
  const hud = new GameUiController(input, browserGameUiMeasure(game.id));
111
108
  const hudViewport = gameUiViewport3D(game);
112
- const detachHud = attachGameUiPointer(canvas, hud, () => hudViewport, () => document.pointerLockElement !== canvas);
109
+ const detachHud = attachGameUiPointer(canvas, hud, () => hudViewport, () => !paused && !contextPaused && document.pointerLockElement !== canvas);
113
110
  let hudInsets = browserGameUiInsets(canvas, hudViewport);
114
111
  window.addEventListener("resize", () => { hudInsets = browserGameUiInsets(canvas, hudViewport); }, { signal: controller.signal });
115
- let dragging = false;
116
- const release = () => { hud.release(); input.release(); dragging = false; };
112
+ let touchControls;
113
+ const release = () => { touchControls?.release(); hud.release(); input.release(); };
117
114
  window.addEventListener("keydown", (event) => {
118
115
  input.keyDown(event.code, event.key);
119
116
  if (input.handlesKey(game, event.code, event.key)) {
@@ -121,7 +118,6 @@ async function start() {
121
118
  }
122
119
  }, { signal: controller.signal });
123
120
  window.addEventListener("keyup", (event) => { input.keyUp(event.code); }, { signal: controller.signal });
124
- const mouseFire = game.inputActions.includes("fire");
125
121
  const bindings = resolveGameInputBindings(game);
126
122
  const mouseLook = bindings.look.some((binding) => binding.kind === "mouse");
127
123
  let unmountTouch;
@@ -133,59 +129,105 @@ async function start() {
133
129
  const layer = document.createElement("div");
134
130
  layer.className = "touch-layer";
135
131
  document.body.append(layer);
136
- const unmount = mountTouchControls(layer, { layout: touchLayout(bindings), onChange: (state) => input.setTouch(state), onLook: (x, y) => input.touchLook(x, y) });
137
- unmountTouch = () => { unmount(); layer.remove(); };
132
+ const controls = mountTouchControls(layer, {
133
+ layout: touchLayout(bindings), onChange: (state) => input.setTouch(state), onLook: (x, y) => input.touchLook(x, y),
134
+ active: () => !paused && !contextPaused && !document.hidden,
135
+ claimPointer: (event) => document.pointerLockElement !== canvas && claimGameUiPointer(canvas, hud, hudViewport, event),
136
+ releasePointer: (id) => hud.pointerUp(id)
137
+ });
138
+ touchControls = controls;
139
+ unmountTouch = () => { controls.dispose(); touchControls = undefined; layer.remove(); };
138
140
  };
139
141
  if (window.matchMedia("(pointer: coarse)").matches) {
140
142
  enableTouch();
141
143
  }
142
144
  window.addEventListener("touchstart", enableTouch, { passive: true, signal: controller.signal });
143
- // A touch that reaches the canvas, outside the touch zones or before they appear, fires on tap and turns the camera on drag.
144
- canvas.addEventListener("pointerdown", (event) => {
145
- // A press on a HUD button stays with the HUD.
146
- if (event.defaultPrevented) {
147
- return;
148
- }
149
- dragging = true;
150
- canvas.setPointerCapture(event.pointerId);
151
- input.mouseDown(event.button);
152
- if (event.pointerType !== "touch" && (mouseFire || mouseLook) && document.pointerLockElement !== canvas) {
153
- void canvas.requestPointerLock().catch(() => { status(mouseFire ? "Mouse capture unavailable. Hold and drag to aim, or press F to fire." : "Mouse capture unavailable. Drag to turn the camera."); });
154
- }
155
- }, { signal: controller.signal });
156
- window.addEventListener("pointerup", (event) => { dragging = false; input.mouseUp(event.button); }, { signal: controller.signal });
157
- canvas.addEventListener("pointercancel", release, { signal: controller.signal });
158
- document.addEventListener("pointerlockchange", () => { if (document.pointerLockElement !== canvas) {
159
- release();
160
- } }, { signal: controller.signal });
161
- canvas.addEventListener("pointermove", (event) => { if (dragging || document.pointerLockElement === canvas) {
162
- input.look(event.movementX, event.movementY);
163
- } }, { signal: controller.signal });
145
+ const detachMouse = attachGameMouseInput(canvas, input, {
146
+ active: () => !paused && !contextPaused && !document.hidden,
147
+ lookEnabled: () => mouseLook,
148
+ onLockFailure: () => status("Mouse capture unavailable. Drag to turn the camera.")
149
+ });
164
150
  window.addEventListener("blur", release, { signal: controller.signal });
165
151
  const clock = new FixedTickClock(game.tickRate);
152
+ function setPaused(next) {
153
+ paused = next;
154
+ release();
155
+ input.setEnabled(!next);
156
+ clock.reset();
157
+ const pause = document.getElementById("pause");
158
+ if (pause) {
159
+ pause.textContent = next ? "Resume" : "Pause";
160
+ }
161
+ if (next) {
162
+ audio.pause();
163
+ }
164
+ else {
165
+ audio.resume();
166
+ }
167
+ }
166
168
  let animationId = 0;
167
- let rendering = false;
169
+ let rendering;
168
170
  let disposed = false;
169
- const render = async (interpolation) => {
170
- if (rendering || disposed) {
171
- return;
171
+ let frameNumber = 0;
172
+ let replacement = new AbortController();
173
+ let commands = Promise.resolve();
174
+ function requireCurrent(signal) {
175
+ if (signal.aborted || disposed) {
176
+ throw new DOMException("Game command was superseded", "AbortError");
172
177
  }
173
- rendering = true;
178
+ }
179
+ function queueCommand(action) {
180
+ const result = commands.then(action);
181
+ commands = result.then(() => undefined, () => undefined);
182
+ return result;
183
+ }
184
+ async function renderExplicit(signal) {
185
+ while (rendering) {
186
+ await rendering;
187
+ }
188
+ requireCurrent(signal);
189
+ audio.updateSpatial(gameAudioSpatialView3D(frame, 1));
190
+ hud.update(frame.ui, hudViewport, hudInsets);
191
+ const renderedFrame = hud.annotate(frame);
192
+ const pending = renderer.render(renderedFrame, 1, particles);
193
+ rendering = pending;
174
194
  try {
175
- audio.updateSpatial(gameAudioSpatialView3D(frame, interpolation));
176
- hud.update(frame.ui, hudViewport, hudInsets);
177
- const stats = await renderer.render(hud.annotate(frame), interpolation, particles);
195
+ const stats = await pending;
196
+ requireCurrent(signal);
197
+ frameNumber += 1;
178
198
  budget.observe({ drawCalls: stats.drawCalls, triangles: stats.triangles, particles: particles.count, voices: gameAudioVoiceCount(audio.mixerState()) });
199
+ return { tick: renderedFrame.tick, frameNumber };
179
200
  }
180
- catch (error) {
181
- if (renderer.capabilities.deviceStatus !== "lost") {
182
- paused = true;
201
+ finally {
202
+ if (rendering === pending) {
203
+ rendering = undefined;
183
204
  }
184
- status(error instanceof Error ? error.message : "Rendering failed");
185
205
  }
186
- finally {
187
- rendering = false;
206
+ }
207
+ const render = (interpolation) => {
208
+ if (rendering || disposed) {
209
+ return;
188
210
  }
211
+ audio.updateSpatial(gameAudioSpatialView3D(frame, interpolation));
212
+ hud.update(frame.ui, hudViewport, hudInsets);
213
+ const pending = renderer.render(hud.annotate(frame), interpolation, particles)
214
+ .then((stats) => {
215
+ if (disposed) {
216
+ return;
217
+ }
218
+ frameNumber += 1;
219
+ budget.observe({ drawCalls: stats.drawCalls, triangles: stats.triangles, particles: particles.count, voices: gameAudioVoiceCount(audio.mixerState()) });
220
+ }).catch((error) => {
221
+ if (!disposed) {
222
+ if (renderer.capabilities.deviceStatus !== "lost") {
223
+ setPaused(true);
224
+ }
225
+ status(error instanceof Error ? error.message : "Rendering failed");
226
+ }
227
+ }).finally(() => { if (rendering === pending) {
228
+ rendering = undefined;
229
+ } });
230
+ rendering = pending;
189
231
  };
190
232
  document.addEventListener("visibilitychange", () => { release(); clock.reset(); }, { signal: controller.signal });
191
233
  const tick = (now) => {
@@ -198,8 +240,7 @@ async function start() {
198
240
  void render(interpolation);
199
241
  }
200
242
  catch (error) {
201
- paused = true;
202
- clock.reset();
243
+ setPaused(true);
203
244
  status(error instanceof Error ? error.message : "Game script failed");
204
245
  }
205
246
  }
@@ -211,67 +252,94 @@ async function start() {
211
252
  }
212
253
  animationId = requestAnimationFrame(tick);
213
254
  };
214
- document.getElementById("pause")?.addEventListener("click", (event) => {
215
- paused = !paused;
216
- // Input pressed while paused is dropped rather than delivered on resume (F23).
217
- input.setEnabled(!paused);
218
- if (event.currentTarget instanceof HTMLButtonElement) {
219
- event.currentTarget.textContent = paused ? "Resume" : "Pause";
220
- }
221
- release();
222
- clock.reset();
223
- if (paused) {
224
- audio.pause();
225
- }
226
- else {
227
- audio.resume();
228
- }
229
- }, { signal: controller.signal });
255
+ document.getElementById("pause")?.addEventListener("click", () => setPaused(!paused), { signal: controller.signal });
230
256
  document.getElementById("reset")?.addEventListener("click", () => {
231
- paused = true;
232
- void open().then((replacement) => {
233
- session.dispose();
234
- session = replacement;
235
- saves.clear();
236
- audio.reset(session.snapshot());
237
- frame = session.frame();
238
- particles.clear();
239
- clock.reset();
240
- release();
241
- // Reset resumes play, so input dropped by an earlier pause is accepted again.
242
- paused = false;
243
- input.setEnabled(true);
244
- const pause = document.getElementById("pause");
245
- if (pause) {
246
- pause.textContent = "Pause";
247
- }
248
- void render(1);
249
- })
257
+ void window.nativeGame3DPlayer.reset().then(() => setPaused(false))
250
258
  .catch((error) => status(error instanceof Error ? error.message : "Reset failed"));
251
259
  }, { signal: controller.signal });
252
260
  window.addEventListener("beforeunload", () => {
253
261
  disposed = true;
262
+ replacement.abort();
254
263
  cancelAnimationFrame(animationId);
255
- controller.abort();
256
264
  unmountTouch?.();
265
+ detachMouse();
257
266
  detachHud();
258
267
  session.dispose();
259
268
  renderer.dispose();
260
269
  audio.dispose();
270
+ verifiedAssets.dispose();
271
+ controller.abort();
261
272
  }, { once: true });
262
273
  window.nativeGame3DPlayer = Object.freeze({
263
- pause: () => { paused = true; release(); clock.reset(); },
264
- step: async (nextInput) => { paused = true; step(nextInput, true); await render(1); },
265
- reset: async () => { paused = true; const replacement = await open(); session.dispose(); session = replacement; saves.clear(); audio.reset(session.snapshot()); frame = session.frame(); particles.clear(); release(); clock.reset(); await render(1); },
274
+ pause: () => setPaused(true),
275
+ step: async (nextInput) => {
276
+ const parsed = gameInputFrame3D.parse(nextInput);
277
+ const signal = replacement.signal;
278
+ requireCurrent(signal);
279
+ setPaused(true);
280
+ return queueCommand(async () => {
281
+ requireCurrent(signal);
282
+ while (rendering) {
283
+ await rendering;
284
+ }
285
+ requireCurrent(signal);
286
+ step(parsed, true);
287
+ return renderExplicit(signal);
288
+ });
289
+ },
290
+ reset: async () => {
291
+ requireCurrent(replacement.signal);
292
+ replacement.abort();
293
+ replacement = new AbortController();
294
+ const signal = replacement.signal;
295
+ setPaused(true);
296
+ return queueCommand(async () => {
297
+ requireCurrent(signal);
298
+ const restored = await open();
299
+ if (signal.aborted || disposed) {
300
+ restored.dispose();
301
+ requireCurrent(signal);
302
+ }
303
+ while (rendering) {
304
+ try {
305
+ await rendering;
306
+ }
307
+ catch { /* Reset can recover from an earlier failed render. */ }
308
+ }
309
+ if (signal.aborted || disposed) {
310
+ restored.dispose();
311
+ requireCurrent(signal);
312
+ }
313
+ session.dispose();
314
+ session = restored;
315
+ saves.clear();
316
+ audio.reset(session.snapshot());
317
+ frame = session.frame();
318
+ particles.clear();
319
+ release();
320
+ clock.reset();
321
+ return renderExplicit(signal);
322
+ });
323
+ },
266
324
  advance: async (inputs) => {
267
325
  if (inputs.length > 10_000) {
268
326
  throw new Error("Recorded route exceeds 10000 ticks");
269
327
  }
270
- paused = true;
271
- for (const nextInput of inputs) {
272
- step(nextInput, true);
273
- }
274
- await render(1);
328
+ const parsed = inputs.map((input) => gameInputFrame3D.parse(input));
329
+ const signal = replacement.signal;
330
+ requireCurrent(signal);
331
+ setPaused(true);
332
+ return queueCommand(async () => {
333
+ requireCurrent(signal);
334
+ while (rendering) {
335
+ await rendering;
336
+ }
337
+ requireCurrent(signal);
338
+ for (const nextInput of parsed) {
339
+ step(nextInput, true);
340
+ }
341
+ return renderExplicit(signal);
342
+ });
275
343
  },
276
344
  snapshot: () => session.snapshot(),
277
345
  inspect: () => session.inspect(),
@@ -280,10 +348,20 @@ async function start() {
280
348
  })
281
349
  });
282
350
  // A static HTTP host is required for browser modules and WASM.
283
- status(mouseFire ? "Ready. Click to capture the mouse and fire. WASD moves, F fires, Space jumps, Escape releases the mouse."
284
- : "Ready. Move with WASD, arrows or a gamepad, jump with Space. Click to capture the mouse for looking, Escape releases it.");
285
- await render(1);
286
- animationId = requestAnimationFrame(tick);
351
+ status(mouseLook ? "Ready. Use the game's controls. Click for mouse look, Escape releases the mouse."
352
+ : "Ready. Use the game's controls. Mouse buttons work without pointer capture.");
353
+ const initialSignal = replacement.signal;
354
+ try {
355
+ await renderExplicit(initialSignal);
356
+ }
357
+ catch (error) {
358
+ if (!initialSignal.aborted) {
359
+ throw error;
360
+ }
361
+ }
362
+ if (!disposed) {
363
+ animationId = requestAnimationFrame(tick);
364
+ }
287
365
  }
288
366
  void start().catch((error) => status(error instanceof Error ? error.message : "Game could not start"));
289
367
  //# sourceMappingURL=standalone-player3d.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standalone-player3d.js","sourceRoot":"","sources":["../src/standalone-player3d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standalone-player3d.js","sourceRoot":"","sources":["../src/standalone-player3d.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,15 @@ export interface TouchControlsOptions {
21
21
  readonly onChange: (state: TouchInputState) => void;
22
22
  /** Called with drag movement in pixels on the look zone. */
23
23
  readonly onLook?: (x: number, y: number) => void;
24
+ readonly active?: () => boolean;
25
+ /** A HUD press owns the whole pointer sequence before a zone or action button captures it. */
26
+ readonly claimPointer?: (event: PointerEvent) => boolean;
27
+ readonly releasePointer?: (pointerId: number) => void;
28
+ }
29
+ export interface GameTouchControls {
30
+ /** Drops held fingers without unmounting the controls. */
31
+ release(): void;
32
+ dispose(): void;
24
33
  }
25
34
  /** Styles for the touch layer, for players whose page does not already define them. */
26
35
  export declare const TOUCH_CONTROLS_CSS: string;
@@ -28,5 +37,5 @@ export declare const TOUCH_CONTROLS_CSS: string;
28
37
  * A floating stick on the left half of the screen and action buttons on the right.
29
38
  * The stick appears where the thumb lands, so it works for any hand position.
30
39
  */
31
- export declare function mountTouchControls(root: HTMLElement, options: TouchControlsOptions): () => void;
40
+ export declare function mountTouchControls(root: HTMLElement, options: TouchControlsOptions): GameTouchControls;
32
41
  //# sourceMappingURL=touch-controls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"touch-controls.d.ts","sourceRoot":"","sources":["../src/touch-controls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAK3D,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAa/E;AAED,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjF,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,yBAAyB,GAAG,WAAW,CAY5E;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACpD,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,QAU4B,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,GAAG,MAAM,IAAI,CA4I/F"}
1
+ {"version":3,"file":"touch-controls.d.ts","sourceRoot":"","sources":["../src/touch-controls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAK3D,mGAAmG;AACnG,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAa/E;AAED,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjF,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,yBAAyB,GAAG,WAAW,CAY5E;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACpD,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;IAChC,8FAA8F;IAC9F,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;IACzD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,QAU4B,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,CAyMtG"}