@needle-tools/engine 5.0.2 → 5.1.0-canary.87c4c44

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 (165) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +6 -7
  3. package/SKILL.md +39 -21
  4. package/components.needle.json +1 -1
  5. package/dist/needle-engine.bundle-BlVD1I5a.min.js +1656 -0
  6. package/dist/{needle-engine.bundle-BoTyA-Le.js → needle-engine.bundle-CFOipCo_.js} +8519 -7920
  7. package/dist/needle-engine.bundle-DX2Y-SQF.umd.cjs +1656 -0
  8. package/dist/needle-engine.d.ts +628 -61
  9. package/dist/needle-engine.js +575 -565
  10. package/dist/needle-engine.min.js +1 -1
  11. package/dist/needle-engine.umd.cjs +1 -1
  12. package/dist/{vendor-vHLk8sXu.js → vendor-CAcsI0eU.js} +116 -115
  13. package/dist/{vendor-CntUvmJu.umd.cjs → vendor-CEM38hLE.umd.cjs} +2 -2
  14. package/dist/{vendor-DPbfJJ4d.min.js → vendor-HRlxIBga.min.js} +2 -2
  15. package/lib/engine/api.d.ts +2 -0
  16. package/lib/engine/api.js +2 -0
  17. package/lib/engine/api.js.map +1 -1
  18. package/lib/engine/engine_addressables.js +5 -1
  19. package/lib/engine/engine_addressables.js.map +1 -1
  20. package/lib/engine/engine_animation.d.ts +14 -7
  21. package/lib/engine/engine_animation.js +49 -9
  22. package/lib/engine/engine_animation.js.map +1 -1
  23. package/lib/engine/engine_components.js +33 -4
  24. package/lib/engine/engine_components.js.map +1 -1
  25. package/lib/engine/engine_context.d.ts +7 -2
  26. package/lib/engine/engine_context.js +10 -2
  27. package/lib/engine/engine_context.js.map +1 -1
  28. package/lib/engine/engine_gameobject.d.ts +4 -0
  29. package/lib/engine/engine_gameobject.js.map +1 -1
  30. package/lib/engine/engine_init.js +2 -0
  31. package/lib/engine/engine_init.js.map +1 -1
  32. package/lib/engine/engine_input.js +4 -1
  33. package/lib/engine/engine_input.js.map +1 -1
  34. package/lib/engine/engine_materialpropertyblock.js +1 -20
  35. package/lib/engine/engine_materialpropertyblock.js.map +1 -1
  36. package/lib/engine/engine_networking.d.ts +11 -8
  37. package/lib/engine/engine_networking.js +43 -26
  38. package/lib/engine/engine_networking.js.map +1 -1
  39. package/lib/engine/engine_networking_instantiate.d.ts +100 -5
  40. package/lib/engine/engine_networking_instantiate.js +150 -16
  41. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  42. package/lib/engine/engine_networking_prefabs.d.ts +59 -0
  43. package/lib/engine/engine_networking_prefabs.js +67 -0
  44. package/lib/engine/engine_networking_prefabs.js.map +1 -0
  45. package/lib/engine/postprocessing/api.d.ts +2 -0
  46. package/lib/engine/postprocessing/api.js +2 -0
  47. package/lib/engine/postprocessing/api.js.map +1 -0
  48. package/lib/engine/postprocessing/index.d.ts +2 -0
  49. package/lib/engine/postprocessing/index.js +2 -0
  50. package/lib/engine/postprocessing/index.js.map +1 -0
  51. package/lib/engine/postprocessing/postprocessing.d.ts +83 -0
  52. package/lib/engine/postprocessing/postprocessing.js +280 -0
  53. package/lib/engine/postprocessing/postprocessing.js.map +1 -0
  54. package/lib/engine/postprocessing/types.d.ts +39 -0
  55. package/lib/engine/postprocessing/types.js +2 -0
  56. package/lib/engine/postprocessing/types.js.map +1 -0
  57. package/lib/engine/webcomponents/WebXRButtons.js +17 -3
  58. package/lib/engine/webcomponents/WebXRButtons.js.map +1 -1
  59. package/lib/engine/webcomponents/icons.js +3 -1
  60. package/lib/engine/webcomponents/icons.js.map +1 -1
  61. package/lib/engine/xr/NeedleXRSession.d.ts +1 -0
  62. package/lib/engine/xr/NeedleXRSession.js +43 -10
  63. package/lib/engine/xr/NeedleXRSession.js.map +1 -1
  64. package/lib/engine/xr/init.d.ts +4 -0
  65. package/lib/engine/xr/init.js +49 -0
  66. package/lib/engine/xr/init.js.map +1 -0
  67. package/lib/engine-components/AnimationUtils.d.ts +4 -1
  68. package/lib/engine-components/AnimationUtils.js +7 -19
  69. package/lib/engine-components/AnimationUtils.js.map +1 -1
  70. package/lib/engine-components/AnimatorController.d.ts +135 -2
  71. package/lib/engine-components/AnimatorController.js +216 -13
  72. package/lib/engine-components/AnimatorController.js.map +1 -1
  73. package/lib/engine-components/OrbitControls.d.ts +4 -0
  74. package/lib/engine-components/OrbitControls.js +5 -1
  75. package/lib/engine-components/OrbitControls.js.map +1 -1
  76. package/lib/engine-components/SeeThrough.d.ts +0 -2
  77. package/lib/engine-components/SeeThrough.js +0 -89
  78. package/lib/engine-components/SeeThrough.js.map +1 -1
  79. package/lib/engine-components/SyncedRoom.d.ts +4 -0
  80. package/lib/engine-components/SyncedRoom.js +23 -8
  81. package/lib/engine-components/SyncedRoom.js.map +1 -1
  82. package/lib/engine-components/SyncedTransform.js +5 -5
  83. package/lib/engine-components/SyncedTransform.js.map +1 -1
  84. package/lib/engine-components/Voip.d.ts +46 -0
  85. package/lib/engine-components/Voip.js +126 -2
  86. package/lib/engine-components/Voip.js.map +1 -1
  87. package/lib/engine-components/api.d.ts +1 -0
  88. package/lib/engine-components/api.js +1 -0
  89. package/lib/engine-components/api.js.map +1 -1
  90. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +5 -2
  91. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +11 -18
  92. package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -1
  93. package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +3 -4
  94. package/lib/engine-components/postprocessing/PostProcessingEffect.js +6 -15
  95. package/lib/engine-components/postprocessing/PostProcessingEffect.js.map +1 -1
  96. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +2 -1
  97. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
  98. package/lib/engine-components/postprocessing/Volume.d.ts +18 -11
  99. package/lib/engine-components/postprocessing/Volume.js +61 -140
  100. package/lib/engine-components/postprocessing/Volume.js.map +1 -1
  101. package/lib/engine-components/postprocessing/index.d.ts +1 -0
  102. package/lib/engine-components/postprocessing/index.js +1 -0
  103. package/lib/engine-components/postprocessing/index.js.map +1 -1
  104. package/lib/engine-components/postprocessing/utils.d.ts +2 -0
  105. package/lib/engine-components/postprocessing/utils.js +2 -0
  106. package/lib/engine-components/postprocessing/utils.js.map +1 -1
  107. package/lib/engine-components/ui/Canvas.js +2 -2
  108. package/lib/engine-components/ui/Canvas.js.map +1 -1
  109. package/lib/engine-components/ui/Graphic.d.ts +3 -3
  110. package/lib/engine-components/ui/Graphic.js +6 -2
  111. package/lib/engine-components/ui/Graphic.js.map +1 -1
  112. package/lib/engine-components/ui/Text.d.ts +64 -11
  113. package/lib/engine-components/ui/Text.js +154 -45
  114. package/lib/engine-components/ui/Text.js.map +1 -1
  115. package/lib/engine-components/ui/index.d.ts +1 -0
  116. package/lib/engine-components/ui/index.js +1 -0
  117. package/lib/engine-components/ui/index.js.map +1 -1
  118. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +25 -3
  119. package/lib/engine-components-experimental/networking/PlayerSync.js +60 -11
  120. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
  121. package/package.json +6 -5
  122. package/plugins/vite/ai.d.ts +11 -10
  123. package/plugins/vite/ai.js +305 -31
  124. package/plugins/vite/dependencies.js +5 -0
  125. package/src/engine/api.ts +3 -0
  126. package/src/engine/engine_addressables.ts +4 -1
  127. package/src/engine/engine_animation.ts +47 -9
  128. package/src/engine/engine_components.ts +36 -7
  129. package/src/engine/engine_context.ts +11 -2
  130. package/src/engine/engine_gameobject.ts +5 -0
  131. package/src/engine/engine_init.ts +2 -0
  132. package/src/engine/engine_input.ts +2 -1
  133. package/src/engine/engine_materialpropertyblock.ts +1 -20
  134. package/src/engine/engine_networking.ts +46 -23
  135. package/src/engine/engine_networking_instantiate.ts +160 -18
  136. package/src/engine/engine_networking_prefabs.ts +80 -0
  137. package/src/engine/postprocessing/api.ts +2 -0
  138. package/src/engine/postprocessing/index.ts +2 -0
  139. package/src/engine/postprocessing/postprocessing.ts +322 -0
  140. package/src/engine/postprocessing/types.ts +43 -0
  141. package/src/engine/webcomponents/WebXRButtons.ts +21 -4
  142. package/src/engine/webcomponents/icons.ts +5 -3
  143. package/src/engine/xr/NeedleXRSession.ts +50 -15
  144. package/src/engine/xr/init.ts +56 -0
  145. package/src/engine-components/AnimationUtils.ts +7 -17
  146. package/src/engine-components/AnimatorController.ts +288 -18
  147. package/src/engine-components/OrbitControls.ts +5 -1
  148. package/src/engine-components/SeeThrough.ts +0 -116
  149. package/src/engine-components/SyncedRoom.ts +28 -9
  150. package/src/engine-components/SyncedTransform.ts +5 -5
  151. package/src/engine-components/Voip.ts +129 -2
  152. package/src/engine-components/api.ts +1 -0
  153. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +16 -24
  154. package/src/engine-components/postprocessing/PostProcessingEffect.ts +9 -16
  155. package/src/engine-components/postprocessing/PostProcessingHandler.ts +2 -1
  156. package/src/engine-components/postprocessing/Volume.ts +72 -163
  157. package/src/engine-components/postprocessing/index.ts +1 -0
  158. package/src/engine-components/postprocessing/utils.ts +2 -0
  159. package/src/engine-components/ui/Canvas.ts +2 -2
  160. package/src/engine-components/ui/Graphic.ts +7 -3
  161. package/src/engine-components/ui/Text.ts +170 -52
  162. package/src/engine-components/ui/index.ts +2 -1
  163. package/src/engine-components-experimental/networking/PlayerSync.ts +64 -11
  164. package/dist/needle-engine.bundle-B3ywqx5o.min.js +0 -1654
  165. package/dist/needle-engine.bundle-CzOPcOui.umd.cjs +0 -1654
@@ -0,0 +1,280 @@
1
+ import { isDevEnvironment } from "../debug/index.js";
2
+ import { DeviceUtilities, getParam } from "../engine_utils.js";
3
+ const debug = getParam("debugpost");
4
+ /**
5
+ * Core postprocessing stack accessible via `context.postprocessing`.
6
+ * Manages the effect pipeline independently of any specific component.
7
+ *
8
+ * Volumes and individual PostProcessingEffect components add/remove effects
9
+ * to this stack. The stack builds the EffectComposer pipeline when dirty.
10
+ *
11
+ * @example Add an effect directly
12
+ * ```ts
13
+ * const bloom = new BloomEffect({ intensity: 3 });
14
+ * this.context.postprocessing.addEffect(bloom);
15
+ * ```
16
+ *
17
+ * @example Remove an effect
18
+ * ```ts
19
+ * this.context.postprocessing.removeEffect(bloom);
20
+ * ```
21
+ */
22
+ export class PostProcessing {
23
+ _context;
24
+ _handler = null;
25
+ _effects = [];
26
+ _isDirty = false;
27
+ /** Currently active postprocessing effects in the stack */
28
+ get effects() {
29
+ return this._effects;
30
+ }
31
+ get dirty() { return this._isDirty; }
32
+ set dirty(value) { this._isDirty = value; }
33
+ /** The internal PostProcessingHandler that manages the EffectComposer pipeline */
34
+ get handler() { return this._handler; }
35
+ /**
36
+ * The effect composer used to render postprocessing effects.
37
+ * This is set internally by the PostProcessingHandler when effects are applied.
38
+ */
39
+ get composer() { return this._composer; }
40
+ set composer(value) { this._composer = value; }
41
+ _composer = null;
42
+ /**
43
+ * Set multisampling to "auto" to automatically adjust the multisampling level based on performance.
44
+ * Set to a number to manually set the multisampling level.
45
+ * @default "auto"
46
+ */
47
+ multisampling = "auto";
48
+ /** When enabled, the device pixel ratio will be gradually reduced when FPS is low
49
+ * and restored when performance recovers.
50
+ * @default true
51
+ */
52
+ adaptiveResolution = true;
53
+ constructor(context) {
54
+ this._context = context;
55
+ }
56
+ /**
57
+ * Add a post processing effect to the stack.
58
+ * The effect stack will be rebuilt on the next update.
59
+ */
60
+ addEffect(effect) {
61
+ if (this._effects.includes(effect))
62
+ return;
63
+ this._effects.push(effect);
64
+ this._isDirty = true;
65
+ }
66
+ /**
67
+ * Remove a post processing effect from the stack.
68
+ * The effect stack will be rebuilt on the next update.
69
+ */
70
+ removeEffect(effect) {
71
+ const index = this._effects.indexOf(effect);
72
+ if (index !== -1) {
73
+ this._effects.splice(index, 1);
74
+ this._isDirty = true;
75
+ }
76
+ }
77
+ /** Mark the stack as dirty so the effects are rebuilt on the next update */
78
+ markDirty() {
79
+ this._isDirty = true;
80
+ }
81
+ // --- Adaptive multisampling state ---
82
+ _enabledTime = -1;
83
+ _multisampleAutoChangeTime = 0;
84
+ _multisampleAutoDecreaseTime = 0;
85
+ /** @internal Called from the context render loop to update the postprocessing pipeline */
86
+ update() {
87
+ const context = this._context;
88
+ if (context.isInXR)
89
+ return;
90
+ // Wait for a camera before applying
91
+ if (this._isDirty && context.mainCamera) {
92
+ this.apply();
93
+ }
94
+ // In tonemapping-only mode, keep renderer values in sync with the active effect
95
+ if (this._tonemappingOnlyActive) {
96
+ const activeEffects = this._effects.filter(e => e.active && e.enabled && e.isToneMapping === true);
97
+ if (activeEffects.length > 0) {
98
+ const effect = activeEffects[activeEffects.length - 1];
99
+ context.renderer.toneMapping = effect.threeToneMapping;
100
+ context.renderer.toneMappingExposure = effect.toneMappingExposure;
101
+ }
102
+ return;
103
+ }
104
+ if (!this._handler || !this._composer || this._handler.composer !== this._composer)
105
+ return;
106
+ // The composer is always a pmndrs EffectComposer (created by PostProcessingHandler)
107
+ const composer = this._composer;
108
+ // Handle context lost
109
+ if (context.renderer.getContext().isContextLost()) {
110
+ context.renderer.forceContextRestore();
111
+ }
112
+ if (composer.getRenderer() !== context.renderer)
113
+ composer.setRenderer(context.renderer);
114
+ composer.setMainScene(context.scene);
115
+ // --- Adaptive multisampling ---
116
+ if (this.multisampling === "auto") {
117
+ if (this._handler.hasSmaaEffect) {
118
+ if (this._handler.multisampling !== 0) {
119
+ this._handler.multisampling = 0;
120
+ if (debug || isDevEnvironment()) {
121
+ console.log(`[PostProcessing] multisampling is disabled because it's set to 'auto' and there is an SMAA effect.\n\nIf you need multisampling consider changing 'auto' to a fixed value (e.g. 4).`);
122
+ }
123
+ }
124
+ }
125
+ else {
126
+ const timeSinceLastChange = context.time.realtimeSinceStartup - this._multisampleAutoChangeTime;
127
+ if (context.time.realtimeSinceStartup - this._enabledTime > 2
128
+ && timeSinceLastChange > .5) {
129
+ const prev = this._handler.multisampling;
130
+ if (this._handler.multisampling > 0 && context.time.smoothedFps <= 50) {
131
+ this._multisampleAutoChangeTime = context.time.realtimeSinceStartup;
132
+ this._multisampleAutoDecreaseTime = context.time.realtimeSinceStartup;
133
+ let newMultiSample = this._handler.multisampling * .5;
134
+ newMultiSample = Math.floor(newMultiSample);
135
+ if (newMultiSample != this._handler.multisampling) {
136
+ this._handler.multisampling = newMultiSample;
137
+ }
138
+ if (debug)
139
+ console.debug(`[PostProcessing] Reduced multisampling from ${prev} to ${this._handler.multisampling}`);
140
+ }
141
+ else if (timeSinceLastChange > 1
142
+ && context.time.smoothedFps >= 59
143
+ && this._handler.multisampling < context.renderer.capabilities.maxSamples
144
+ && context.time.realtimeSinceStartup - this._multisampleAutoDecreaseTime > 10) {
145
+ this._multisampleAutoChangeTime = context.time.realtimeSinceStartup;
146
+ let newMultiSample = this._handler.multisampling <= 0 ? 1 : this._handler.multisampling * 2;
147
+ newMultiSample = Math.floor(newMultiSample);
148
+ if (newMultiSample !== this._handler.multisampling) {
149
+ this._handler.multisampling = newMultiSample;
150
+ }
151
+ if (debug)
152
+ console.debug(`[PostProcessing] Increased multisampling from ${prev} to ${this._handler.multisampling}`);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ else {
158
+ const newMultiSample = Math.max(0, Math.min(this.multisampling, context.renderer.capabilities.maxSamples));
159
+ if (newMultiSample !== this._handler.multisampling)
160
+ this._handler.multisampling = newMultiSample;
161
+ }
162
+ // --- Adaptive pixel ratio ---
163
+ this._handler.adaptivePixelRatio = this.adaptiveResolution;
164
+ this._handler.updateAdaptivePixelRatio();
165
+ // Update camera on passes if needed
166
+ if (context.mainCamera) {
167
+ const passes = composer.passes;
168
+ for (const pass of passes) {
169
+ if (pass.mainCamera && pass.mainCamera !== context.mainCamera) {
170
+ composer.setMainCamera(context.mainCamera);
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ }
176
+ _lastApplyTime;
177
+ _rapidApplyCount = 0;
178
+ // --- Tonemapping-only state ---
179
+ /** When true, tonemapping is applied directly to the renderer (no full pipeline) */
180
+ _tonemappingOnlyActive = false;
181
+ _previousToneMapping;
182
+ _previousToneMappingExposure;
183
+ apply() {
184
+ if (debug)
185
+ console.log(`[PostProcessing] Apply stack (${this._effects.length} effects)`);
186
+ if (isDevEnvironment()) {
187
+ if (this._lastApplyTime !== undefined && Date.now() - this._lastApplyTime < 100) {
188
+ this._rapidApplyCount++;
189
+ if (this._rapidApplyCount === 5)
190
+ console.warn("[PostProcessing] Detected rapid post processing modifications - this might be a bug");
191
+ }
192
+ this._lastApplyTime = Date.now();
193
+ }
194
+ this._isDirty = false;
195
+ // Collect active effects
196
+ const activeEffects = this._effects.filter(e => e.active && e.enabled);
197
+ if (activeEffects.length <= 0) {
198
+ this.restoreTonemapping();
199
+ this._handler?.unapply(false);
200
+ return;
201
+ }
202
+ // Check if ALL active effects are tonemapping-only
203
+ const allToneMapping = activeEffects.every(e => e.isToneMapping === true);
204
+ if (allToneMapping) {
205
+ // Use the last tonemapping effect added (last in the array)
206
+ const tonemappingEffect = activeEffects[activeEffects.length - 1];
207
+ if (debug)
208
+ console.log(`[PostProcessing] Only tonemapping effects in stack — applying directly to renderer`);
209
+ // Store previous values on first activation
210
+ if (!this._tonemappingOnlyActive) {
211
+ this._previousToneMapping = this._context.renderer.toneMapping;
212
+ this._previousToneMappingExposure = this._context.renderer.toneMappingExposure;
213
+ this._tonemappingOnlyActive = true;
214
+ }
215
+ // Apply tonemapping directly to renderer
216
+ this._context.renderer.toneMapping = tonemappingEffect.threeToneMapping;
217
+ this._context.renderer.toneMappingExposure = tonemappingEffect.toneMappingExposure;
218
+ // Tear down any existing postprocessing pipeline
219
+ this._handler?.unapply(false);
220
+ return;
221
+ }
222
+ // We have non-tonemapping effects — restore renderer tonemapping if we were in tonemapping-only mode
223
+ this.restoreTonemapping();
224
+ // Build full postprocessing pipeline
225
+ this.ensureHandler()
226
+ .then(handler => {
227
+ if (!handler)
228
+ return;
229
+ return handler.apply(activeEffects);
230
+ })
231
+ .then(() => {
232
+ if (this._handler) {
233
+ if (this.multisampling === "auto") {
234
+ this._handler.multisampling = DeviceUtilities.isMobileDevice()
235
+ ? 2
236
+ : 4;
237
+ }
238
+ else {
239
+ this._handler.multisampling = Math.max(0, Math.min(this.multisampling, this._context.renderer.capabilities.maxSamples));
240
+ }
241
+ if (debug)
242
+ console.debug(`[PostProcessing] Set multisampling to ${this._handler.multisampling} (Is Mobile: ${DeviceUtilities.isMobileDevice()})`);
243
+ }
244
+ });
245
+ this._enabledTime = this._context.time.realtimeSinceStartup;
246
+ }
247
+ /** Restore renderer tonemapping to previous values when leaving tonemapping-only mode */
248
+ restoreTonemapping() {
249
+ if (this._tonemappingOnlyActive) {
250
+ if (this._previousToneMapping !== undefined)
251
+ this._context.renderer.toneMapping = this._previousToneMapping;
252
+ if (this._previousToneMappingExposure !== undefined)
253
+ this._context.renderer.toneMappingExposure = this._previousToneMappingExposure;
254
+ this._tonemappingOnlyActive = false;
255
+ this._previousToneMapping = undefined;
256
+ this._previousToneMappingExposure = undefined;
257
+ if (debug)
258
+ console.log(`[PostProcessing] Restored renderer tonemapping`);
259
+ }
260
+ }
261
+ /** Lazily creates the PostProcessingHandler to avoid loading the postprocessing library until actually needed */
262
+ async ensureHandler() {
263
+ if (!this._handler) {
264
+ const { PostProcessingHandler } = await import("../../engine-components/postprocessing/PostProcessingHandler.js");
265
+ if (!this._handler) {
266
+ this._handler = new PostProcessingHandler(this._context);
267
+ }
268
+ }
269
+ return this._handler;
270
+ }
271
+ /** @internal */
272
+ dispose() {
273
+ this.restoreTonemapping();
274
+ this._handler?.dispose();
275
+ this._handler = null;
276
+ this._composer = null;
277
+ this._effects.length = 0;
278
+ }
279
+ }
280
+ //# sourceMappingURL=postprocessing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postprocessing.js","sourceRoot":"","sources":["../../../src/engine/postprocessing/postprocessing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { EffectComposer } from "postprocessing";
2
+ import type { ToneMapping } from "three";
3
+ import type { EffectComposer as ThreeEffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js";
4
+ /**
5
+ * Minimal interface for a postprocessing effect as seen by the core stack.
6
+ * Implemented by `PostProcessingEffect` in engine-components.
7
+ */
8
+ export interface IPostProcessingEffect {
9
+ readonly active: boolean;
10
+ readonly enabled: boolean;
11
+ /** When true, this effect is a tonemapping effect. The core stack uses this to detect tonemapping-only scenarios. */
12
+ readonly isToneMapping?: boolean;
13
+ }
14
+ /**
15
+ * Extended interface for tonemapping effects.
16
+ * When ONLY tonemapping effects are in the stack, the core applies tonemapping
17
+ * directly to the renderer instead of creating a full postprocessing pipeline.
18
+ */
19
+ export interface ITonemappingEffect extends IPostProcessingEffect {
20
+ readonly isToneMapping: true;
21
+ /** The three.js ToneMapping enum value to apply to the renderer */
22
+ readonly threeToneMapping: ToneMapping;
23
+ /** The exposure value to apply to the renderer */
24
+ readonly toneMappingExposure: number;
25
+ }
26
+ /**
27
+ * Interface for the pipeline builder that manages the EffectComposer.
28
+ * Implemented by `PostProcessingHandler` in engine-components.
29
+ */
30
+ export interface IPostProcessingHandler {
31
+ readonly composer: EffectComposer | ThreeEffectComposer | null;
32
+ readonly hasSmaaEffect: boolean;
33
+ multisampling: number;
34
+ adaptivePixelRatio: boolean;
35
+ apply(effects: IPostProcessingEffect[]): Promise<void>;
36
+ unapply(dispose?: boolean): void;
37
+ updateAdaptivePixelRatio(): void;
38
+ dispose(): void;
39
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engine/postprocessing/types.ts"],"names":[],"mappings":""}
@@ -101,10 +101,24 @@ export class WebXRButtonFactory {
101
101
  this._arButton = button;
102
102
  button.classList.add("webxr-button");
103
103
  button.dataset["needle"] = "webxr-ar-button";
104
- button.innerText = "Enter AR";
105
- button.prepend(getIconElement("view_in_ar"));
106
104
  button.title = "Click to start an AR session";
107
- button.addEventListener("click", () => NeedleXRSession.start(mode, init));
105
+ const setDefaultText = () => {
106
+ button.innerText = "Enter AR";
107
+ button.prepend(getIconElement("view_in_ar"));
108
+ };
109
+ setDefaultText();
110
+ let tapAgainTimeout;
111
+ button.addEventListener("click", () => {
112
+ NeedleXRSession.start(mode, init);
113
+ if (DeviceUtilities.isiOS() && !DeviceUtilities.isVisionOS()) {
114
+ setTimeout(() => {
115
+ button.innerHTML = "Tap again";
116
+ button.prepend(getIconElement("view_in_ar"));
117
+ clearTimeout(tapAgainTimeout);
118
+ tapAgainTimeout = setTimeout(setDefaultText, 4000);
119
+ }, 500);
120
+ }
121
+ });
108
122
  NeedleMenu.setElementPriority(button, arButtonPriority);
109
123
  this.updateSessionSupported(button, mode);
110
124
  this.listenToXRSessionState(button, mode);
@@ -1 +1 @@
1
- {"version":3,"file":"WebXRButtons.js","sourceRoot":"","sources":["../../../src/engine/webcomponents/WebXRButtons.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebXRButtons.js","sourceRoot":"","sources":["../../../src/engine/webcomponents/WebXRButtons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAA0B,MAAM,wBAAwB,CAAC;AAE7F,gJAAgJ;AAEhJ,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAEnB,MAAM,CAAC,SAAS,CAAqB;IACrC,MAAM,CAAC,MAAM;QACjB,OAAO,IAAI,kBAAkB,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,WAAW;QACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAY,kBAAkB,KAAK,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;IAGlF,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAA,CAAC,CAAC;IAC9C,gBAAgB,CAAqB;IAE7C,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACjC,SAAS,CAAqB;IAEtC,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;IAChC,SAAS,CAAqB;IAEtC,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnD,kBAAkB,CAAqB;IAE/C,IAAI,QAAQ,KAAK,OAAO,cAAc,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAEtE;;;MAGE;IACF,qBAAqB;QACjB,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAExD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,kBAAkB,CAAC;QAC9C,MAAM,iBAAiB,GAAG,eAAe,CAAC,mBAAmB,EAAE,CAAC;QAChE,IAAI,UAAU,GAAG,YAAY,CAAC;QAC9B,oFAAoF;QACpF,IAAI,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC;YAC/B,UAAU,GAAG,YAAY,CAAC;QAC9B,CAAC;aACI,IAAI,iBAAiB,IAAI,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC;YACpD,UAAU,GAAG,mBAAmB,CAAC;QACrC,CAAC;QAED,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7C,UAAU,CAAC,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;QAE/D,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,gBAAgB,GAA6B,IAAI,CAAC;QACtD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAClC,MAAM,MAAM,GAAG,2BAA2B,EAAE,CAAC;YAE7C,IAAI,MAAM,EAAE,CAAC;gBACT,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC;gBAClC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;YACrC,CAAC;YAED,+BAA+B;YAC/B,IAAI,eAAe,IAAI,gBAAgB;gBACnC,gBAAgB,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;YAE5D,IAAI,gBAAgB,EAAE,CAAC;gBACnB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;gBAC/C,gBAAgB,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBACvC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACX,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;oBAClD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACP,CAAC;iBACI,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YACjE,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAClB,CAAC;IACD;;;;;;OAMG;IACH,cAAc,CAAC,IAAoB;QAC/B,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAE1C,MAAM,IAAI,GAAkB,cAAc,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QAExB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC;QAC7C,MAAM,CAAC,KAAK,GAAG,8BAA8B,CAAC;QAC9C,MAAM,cAAc,GAAG,GAAG,EAAE;YACxB,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,cAAc,EAAE,CAAC;QAEjB,IAAI,eAA8C,CAAC;QACnD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAElC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAElC,IAAI,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC3D,UAAU,CAAC,GAAG,EAAE;oBACZ,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;oBAC/B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;oBAC7C,YAAY,CAAC,eAAe,CAAC,CAAC;oBAC9B,eAAe,GAAG,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACvD,CAAC,EAAE,GAAG,CAAC,CAAC;YACZ,CAAC;QACL,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACxD,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,MAAM,CAAC,KAAK,GAAG,4CAA4C,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,wDAAwD;YACxF,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAEpG,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;MAME;IACF,cAAc,CAAC,IAAoB;QAC/B,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAE1C,MAAM,IAAI,GAAkB,cAAc,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QACxB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,GAAG,6BAA6B,CAAC;QAC7C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1E,UAAU,CAAC,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACxD,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,MAAM,CAAC,KAAK,GAAG,4CAA4C,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,wDAAwD;YACxF,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAEpG,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;MAGE;IACF,uBAAuB;QACnB,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC;QAC5D,MAAM,OAAO,GAAG,mCAAmC,CAAA;QACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;QACjC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,0BAA0B,CAAC;QACtD,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,GAAG,6DAA6D,CAAC;QAC7E,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAClC,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,OAAO,GAAG,YAAY,CAAC;YACnC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC3B,kBAAkB,CAAC,+CAA+C,GAAG,GAAG,GAAG,qBAAqB,CAAC,CAAC;YACtG,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACxC,8EAA8E;QAC9E,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,wDAAwD;YAC1F,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE;gBAChD,IAAI,SAAS,CAAC,EAAE,EAAE,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC;oBACnD,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAClC,CAAC;qBACI,CAAC;oBACF,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC9B,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,YAAY;QACR,OAAO,cAAc,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC;IACvD,CAAC;IAEO,sBAAsB,CAAC,MAAyB,EAAE,IAAmB;QACzE,IAAI,IAAI,KAAK,cAAc,IAAI,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC;YACtF,yEAAyE;YACzE,2EAA2E;YAC3E,+CAA+C;YAC/C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC9B,OAAO;QACX,CAAC;QACD,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACtD,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,gBAAgB,EAAE,IAAI,CAAC,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,GAAG,2HAA2H,GAAG,IAAI,CAAC,CAAC;QAChN,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,0BAA0B,CAAC,OAAoB;QACnD,gBAAgB,CAAC,CAAC,CAAC,EAAE;YACjB,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,cAAc,CAAC,CAAC,CAAC,EAAE;YACf,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,SAAS;gBACxC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,sBAAsB,CAAC,MAAyB,EAAE,IAAoB;QAE1E,IAAI,IAAI,EAAE,CAAC;YACP,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;gBACzC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;oBAC/C,8CAA8C;oBAC9C,wDAAwD;oBACxD,qDAAqD;gBACzD,CAAC;qBACI,CAAC;oBACF,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACzC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACvB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACpD,CAAC;YACL,CAAC,CAAC,CAAC;YACH,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;gBACpC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBAClD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;gBACnD,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;gBACzC,8CAA8C;YAClD,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;CACJ"}
@@ -18,8 +18,10 @@ export function getIconElement(str) {
18
18
  span.setAttribute("aria-label", str + " icon");
19
19
  span.setAttribute("aria-hidden", "true");
20
20
  fontReady(fontname).then(res => {
21
- if (res)
21
+ if (res) {
22
22
  span.style.visibility = "";
23
+ span.innerText = str; // re-assign, otherise more_vert doesnt show up. Maybe because of layout restructuring on mobile
24
+ }
23
25
  else {
24
26
  if (str === "more_vert") {
25
27
  span.style.visibility = "";
@@ -1 +1 @@
1
- {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/engine/webcomponents/icons.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/engine/webcomponents/icons.ts"],"names":[],"mappings":"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"}
@@ -122,6 +122,7 @@ export declare class NeedleXRSession implements INeedleXRSession {
122
122
  * @returns true if the browser supports the given XRSessionMode
123
123
  */
124
124
  static isSessionSupported(mode: XRSessionMode): Promise<boolean>;
125
+ private static _sessionSupportedCache;
125
126
  private static _currentSessionRequest?;
126
127
  private static _activeSession;
127
128
  /** Register to listen to XRSession start events. Unsubscribe with `offXRSessionStart` */
@@ -33,7 +33,6 @@ function getDOMOverlayElement(domElement) {
33
33
  }
34
34
  handleSessionGranted();
35
35
  async function handleSessionGranted() {
36
- // await delay(400);
37
36
  let defaultMode = "immersive-vr";
38
37
  try {
39
38
  // In app clips we default to AR
@@ -56,7 +55,6 @@ async function handleSessionGranted() {
56
55
  // showBalloonWarning("NeedleXRSession: Error while checking XR support: " + (e as Error).message);
57
56
  return;
58
57
  }
59
- // showBalloonMessage("sessiongranted: " + defaultMode);
60
58
  // TODO: asap session granted doesnt handle the pre-room yet
61
59
  if (getParam("debugasap")) {
62
60
  let asapSession = globalThis["needle:XRSession"];
@@ -262,8 +260,18 @@ export class NeedleXRSession {
262
260
  * @param mode The XRSessionMode to check if it is supported
263
261
  * @returns true if the browser supports the given XRSessionMode
264
262
  */
265
- static isSessionSupported(mode) { return this.xrSystem?.isSessionSupported(mode).catch(err => { if (debug)
266
- console.error(err); return false; }) ?? Promise.resolve(false); }
263
+ static isSessionSupported(mode) {
264
+ // We cache the result of the session support check to avoid unnecessary calls to isSessionSupported. This is especially important for user input events that internally run session support checks during onclick where the event must be resolved as fast as possible.
265
+ if (this._sessionSupportedCache[mode] !== undefined) {
266
+ return Promise.resolve(this._sessionSupportedCache[mode]);
267
+ }
268
+ return this.xrSystem?.isSessionSupported(mode).then(supported => {
269
+ this._sessionSupportedCache[mode] = supported;
270
+ return supported;
271
+ }).catch(err => { if (debug)
272
+ console.error(err); return false; }) ?? Promise.resolve(false);
273
+ }
274
+ static _sessionSupportedCache = {};
267
275
  static _currentSessionRequest;
268
276
  static _activeSession;
269
277
  /** Register to listen to XRSession start events. Unsubscribe with `offXRSessionStart` */
@@ -395,9 +403,10 @@ export class NeedleXRSession {
395
403
  // handle iOS platform where "immersive-ar" is special:
396
404
  // - we either launch QuickLook
397
405
  // - or forward to the Needle App Clip experience for WebXR AR
398
- // TODO: should we add a separate mode (e.g. "AR")? https://linear.app/needle/issue/NE-5303
399
406
  if (DeviceUtilities.isiOS()) {
400
- const arSupported = await this.isARSupported().catch(() => false);
407
+ // IMPORTANT: on iOS we should have prefetched immersive-ar support already on app start (this is done in xrInit()) - if not then clicking the Enter AR button for the very first time does not immediately open the AppClip overlay.
408
+ // Without an async await here the overlay *does* however open even when clicking for the very first time. (To test this you need to clear the local experience cache on device)
409
+ const arSupported = this._sessionSupportedCache["immersive-ar"] ?? await this.isARSupported();
401
410
  // On VisionOS, we use QuickLook for AR experiences; no AppClip support for now.
402
411
  if (DeviceUtilities.isVisionOS() && !arSupported && (mode === "ar" || mode === "immersive-ar")) {
403
412
  mode = "quicklook";
@@ -412,6 +421,9 @@ export class NeedleXRSession {
412
421
  }
413
422
  if (!arSupported && (mode === "immersive-ar" || mode === "ar")) {
414
423
  this.invokeSessionRequestStart("immersive-ar", init);
424
+ // if we are in an iframe, we need to navigate the top window
425
+ const topWindow = window.top || window;
426
+ const originalUrl = topWindow.location.href;
415
427
  // Forward to the AppClip experience (Using the apple.com url the appclip overlay shows immediately)
416
428
  // const url =`https://appclip.needle.tools/ar?url=${(location.href)}`;
417
429
  const url = new URL("https://appclip.apple.com/id?p=tools.needle.launch-app.Clip");
@@ -422,16 +434,37 @@ export class NeedleXRSession {
422
434
  source: "NeedleXRSession.start",
423
435
  url: urlStr,
424
436
  });
425
- // if we are in an iframe, we need to navigate the top window
426
- const topWindow = window.top || window;
427
437
  try {
428
438
  console.debug("iOS device detected - opening Needle App Clip for AR experience", { mode, init, url });
439
+ // Prewarm the appclip by opening the URL
440
+ // BUT on safari triggering this with multiple URLs causes the
441
+ // Browser to show the dialogue AGAIN in the background
442
+ // SO: we don't do it here...
443
+ const key = "appclip-prewarm:" + new URL(url).origin;
444
+ const allowMultipleNavigations = sessionStorage.getItem(key) === null;
445
+ if (allowMultipleNavigations) {
446
+ const secondUrl = new URL(url);
447
+ secondUrl.searchParams.set("prewarm", "1");
448
+ // eslint-disable-next-line xss/no-location-href-assign
449
+ topWindow.location.href = secondUrl.toString();
450
+ // wait a bit to give the device time to fetch the app clip metadata - this seems to fix the double tap issue (500 ms seem to work)
451
+ await new Promise(res => setTimeout(res, 300));
452
+ }
429
453
  // navigate to app clip url but keep the current url in history, open in same tab
430
454
  // eslint-disable-next-line xss/no-location-href-assign
431
455
  topWindow.location.href = urlStr;
456
+ if (allowMultipleNavigations && !DeviceUtilities.isSafari()) {
457
+ setTimeout(() => {
458
+ const url2 = new URL(url);
459
+ url2.searchParams.set("prewarm", "1");
460
+ // eslint-disable-next-line xss/no-location-href-assign
461
+ topWindow.location.href = url2.toString();
462
+ }, 500);
463
+ }
464
+ sessionStorage.setItem(key, "1");
432
465
  }
433
466
  catch (e) {
434
- console.warn("Error navigating to AppClip " + urlStr + "\n", e);
467
+ console.warn(`Error navigating to AppClip ${urlStr}\n`, e);
435
468
  // if top window navigation fails and we are in an iframe, we try to navigate the top window directly
436
469
  const weAreInIframe = window !== window.top;
437
470
  if (weAreInIframe) {
@@ -449,7 +482,7 @@ export class NeedleXRSession {
449
482
  }
450
483
  }
451
484
  if (mode === "quicklook") {
452
- console.warn("QuickLook mode is only supported on iOS devices");
485
+ console.error("QuickLook mode is only supported on iOS devices.");
453
486
  return null;
454
487
  }
455
488
  // Since we now know we are not on iOS, ar mode becomes "immersive-ar"