@needle-tools/engine 2.65.2-pre → 2.66.1-pre

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 (93) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/needle-engine.js +7866 -7756
  3. package/dist/needle-engine.umd.cjs +223 -223
  4. package/lib/engine/debug/debug_overlay.js +4 -1
  5. package/lib/engine/debug/debug_overlay.js.map +1 -1
  6. package/lib/engine/engine_addressables.js +2 -2
  7. package/lib/engine/engine_addressables.js.map +1 -1
  8. package/lib/engine/engine_element.d.ts +1 -0
  9. package/lib/engine/engine_element.js +4 -1
  10. package/lib/engine/engine_element.js.map +1 -1
  11. package/lib/engine/engine_element_loading.d.ts +3 -2
  12. package/lib/engine/engine_element_loading.js +18 -14
  13. package/lib/engine/engine_element_loading.js.map +1 -1
  14. package/lib/engine/engine_gameobject.js +6 -3
  15. package/lib/engine/engine_gameobject.js.map +1 -1
  16. package/lib/engine/engine_gizmos.js +3 -1
  17. package/lib/engine/engine_gizmos.js.map +1 -1
  18. package/lib/engine/engine_networking.d.ts +3 -1
  19. package/lib/engine/engine_networking.js +10 -8
  20. package/lib/engine/engine_networking.js.map +1 -1
  21. package/lib/engine/engine_physics.d.ts +29 -1
  22. package/lib/engine/engine_physics.js +99 -10
  23. package/lib/engine/engine_physics.js.map +1 -1
  24. package/lib/engine/engine_setup.js +3 -0
  25. package/lib/engine/engine_setup.js.map +1 -1
  26. package/lib/engine/extensions/NEEDLE_render_objects.js +9 -0
  27. package/lib/engine/extensions/NEEDLE_render_objects.js.map +1 -1
  28. package/lib/engine-components/Animator.js +0 -1
  29. package/lib/engine-components/Animator.js.map +1 -1
  30. package/lib/engine-components/CharacterController.d.ts +1 -0
  31. package/lib/engine-components/CharacterController.js +14 -9
  32. package/lib/engine-components/CharacterController.js.map +1 -1
  33. package/lib/engine-components/Collider.js +14 -1
  34. package/lib/engine-components/Collider.js.map +1 -1
  35. package/lib/engine-components/ParticleSystem.d.ts +5 -1
  36. package/lib/engine-components/ParticleSystem.js +41 -6
  37. package/lib/engine-components/ParticleSystem.js.map +1 -1
  38. package/lib/engine-components/ParticleSystemModules.d.ts +2 -0
  39. package/lib/engine-components/ParticleSystemModules.js +26 -0
  40. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  41. package/lib/engine-components/ParticleSystemSubEmitter.js +5 -2
  42. package/lib/engine-components/ParticleSystemSubEmitter.js.map +1 -1
  43. package/lib/engine-components/Renderer.js +9 -5
  44. package/lib/engine-components/Renderer.js.map +1 -1
  45. package/lib/engine-components/ScreenCapture.js +3 -3
  46. package/lib/engine-components/ScreenCapture.js.map +1 -1
  47. package/lib/engine-components/SpectatorCamera.js +3 -3
  48. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  49. package/lib/engine-components/SyncedCamera.js +1 -1
  50. package/lib/engine-components/SyncedCamera.js.map +1 -1
  51. package/lib/engine-components/SyncedTransform.js +2 -2
  52. package/lib/engine-components/SyncedTransform.js.map +1 -1
  53. package/lib/engine-components/TestRunner.js +1 -1
  54. package/lib/engine-components/TestRunner.js.map +1 -1
  55. package/lib/engine-components/WebARSessionRoot.js +3 -2
  56. package/lib/engine-components/WebARSessionRoot.js.map +1 -1
  57. package/lib/engine-components/WebXRAvatar.js.map +1 -1
  58. package/lib/engine-components/WebXRGrabRendering.js +2 -2
  59. package/lib/engine-components/WebXRGrabRendering.js.map +1 -1
  60. package/lib/engine-components/WebXRSync.js +2 -2
  61. package/lib/engine-components/WebXRSync.js.map +1 -1
  62. package/lib/engine-components-experimental/networking/PlayerSync.js +1 -1
  63. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
  64. package/package.json +1 -1
  65. package/plugins/vite/meta.js +3 -0
  66. package/plugins/vite/poster-client.js +6 -4
  67. package/src/engine/debug/debug_overlay.ts +4 -1
  68. package/src/engine/engine_addressables.ts +2 -2
  69. package/src/engine/engine_element.ts +8 -1
  70. package/src/engine/engine_element_loading.ts +18 -14
  71. package/src/engine/engine_gameobject.ts +584 -583
  72. package/src/engine/engine_gizmos.ts +3 -2
  73. package/src/engine/engine_networking.ts +10 -8
  74. package/src/engine/engine_physics.ts +113 -10
  75. package/src/engine/engine_setup.ts +4 -0
  76. package/src/engine/extensions/NEEDLE_render_objects.ts +10 -1
  77. package/src/engine-components/Animator.ts +0 -1
  78. package/src/engine-components/CharacterController.ts +12 -9
  79. package/src/engine-components/Collider.ts +16 -2
  80. package/src/engine-components/ParticleSystem.ts +45 -9
  81. package/src/engine-components/ParticleSystemModules.ts +28 -1
  82. package/src/engine-components/ParticleSystemSubEmitter.ts +5 -3
  83. package/src/engine-components/Renderer.ts +14 -11
  84. package/src/engine-components/ScreenCapture.ts +3 -3
  85. package/src/engine-components/SpectatorCamera.ts +3 -3
  86. package/src/engine-components/SyncedCamera.ts +1 -1
  87. package/src/engine-components/SyncedTransform.ts +2 -2
  88. package/src/engine-components/TestRunner.ts +1 -1
  89. package/src/engine-components/WebARSessionRoot.ts +3 -2
  90. package/src/engine-components/WebXRAvatar.ts +0 -1
  91. package/src/engine-components/WebXRGrabRendering.ts +2 -2
  92. package/src/engine-components/WebXRSync.ts +2 -2
  93. package/src/engine-components-experimental/networking/PlayerSync.ts +1 -1
@@ -22,7 +22,7 @@ export class PlayerSync extends Behaviour {
22
22
  this.context.connection.beginListen(RoomEvents.JoinedRoom, this.joinedRoomFunction);
23
23
  }
24
24
  onDisable() {
25
- this.context.connection.stopListening(RoomEvents.JoinedRoom, this.joinedRoomFunction);
25
+ this.context.connection.stopListen(RoomEvents.JoinedRoom, this.joinedRoomFunction);
26
26
  }
27
27
  async onUserJoined(_model) {
28
28
  const instance = await this.asset?.instantiateSynced({ parent: this.gameObject }, true);
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerSync.js","sourceRoot":"","sources":["../../../../src/engine-components-experimental/networking/PlayerSync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlayerSync.js","sourceRoot":"","sources":["../../../../src/engine-components-experimental/networking/PlayerSync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "2.65.2-pre",
3
+ "version": "2.66.1-pre",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development, and can be deployed anywhere. It is flexible, extensible, and collaboration and XR come naturally.",
5
5
  "main": "dist/needle-engine.umd.cjs",
6
6
  "module": "lib/needle-engine.js",
@@ -58,6 +58,9 @@ export const needleMeta = (command, config, userSettings) => {
58
58
  tags.push({ tag: 'meta', attrs: { name: 'twitter:card', content: 'summary_large_image' } });
59
59
  tags.push({ tag: 'meta', attrs: { name: 'twitter:image', content: url } });
60
60
  tags.push({ tag: 'meta', attrs: { name: 'og:image', content: url } });
61
+ // Keep in sync with poster
62
+ tags.push({ tag: 'meta', attrs: { name: 'og:image:width', content: 1080 } });
63
+ tags.push({ tag: 'meta', attrs: { name: 'og:image:height', content: 1080 } });
61
64
  }
62
65
  }
63
66
 
@@ -1,5 +1,4 @@
1
1
 
2
-
3
2
  async function generatePoster() {
4
3
  const { screenshot } = await import("@needle-tools/engine/src/engine/engine_utils_screenshot");
5
4
 
@@ -7,12 +6,15 @@ async function generatePoster() {
7
6
  const needleEngine = document.querySelector("needle-engine");
8
7
  if (!needleEngine) return null;
9
8
 
10
- const width = 1920;
11
- const height = 1920;
9
+ // Keep in sync with og:image:width meta tags
10
+ // https://developers.facebook.com/docs/sharing/best-practices/
11
+ const width = 1080;
12
+ const height = 1080;
12
13
  const context = await needleEngine.getContext();
13
14
 
14
15
  // wait a fixed time for e.g. fonts to load
15
- await new Promise((resolve) => setTimeout(resolve, 200));
16
+ while(context.time.frameCount < 2)
17
+ await new Promise((resolve) => setTimeout(resolve, 200));
16
18
 
17
19
  const mimeType = "image/webp";
18
20
  console.log("Generating poster...");
@@ -41,7 +41,10 @@ export function makeErrorsVisibleForDevelopment() {
41
41
  }, true);
42
42
  window.addEventListener("unhandledrejection", (event) => {
43
43
  if (!event) return;
44
- addLog(LogType.Error, event.reason.message, event.reason.stack);
44
+ if (event.reason)
45
+ addLog(LogType.Error, event.reason.message, event.reason.stack);
46
+ else
47
+ addLog(LogType.Error, "unhandled rejection");
45
48
  onReceivedError();
46
49
  });
47
50
  }
@@ -237,8 +237,8 @@ export class AssetReference {
237
237
  }
238
238
 
239
239
  let count = AssetReference.currentlyInstantiating.get(this.uri);
240
- // allow up to 100 instantiations of the same prefab in the same frame
241
- if (count !== undefined && count >= 100) {
240
+ // allow up to 10000 instantiations of the same prefab in the same frame
241
+ if (count !== undefined && count >= 10000) {
242
242
  console.error("Recursive or too many instantiations of " + this.uri + " in the same frame (" + count + ")");
243
243
  return null;
244
244
  }
@@ -69,6 +69,8 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
69
69
  super();
70
70
  this._overlay_ar = new AROverlayHandler();
71
71
  this._context = new Context({ domElement: this });
72
+ // TODO: do we want to rename this event?
73
+ this.addEventListener("ready", this.onReady);
72
74
  }
73
75
 
74
76
  async connectedCallback() {
@@ -252,6 +254,7 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
252
254
  console.error("Needle Engine: No files to load", src);
253
255
  return;
254
256
  }
257
+
255
258
  const currentHash = this.getAttribute("hash");
256
259
  if (currentHash !== null && currentHash !== undefined)
257
260
  this._context.hash = currentHash;
@@ -267,7 +270,7 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
267
270
 
268
271
  this._loadingProgress01 = 1;
269
272
  if (useDefaultLoading)
270
- this._loadingView?.onLoadingFinished("creating scene");
273
+ this._loadingView?.onLoadingUpdate(1, "creating scene");
271
274
  this.classList.remove("loading");
272
275
  this.classList.add("loading-finished");
273
276
  if (debug)
@@ -278,8 +281,12 @@ export class EngineElement extends HTMLElement implements INeedleEngineComponent
278
281
  src: alias ?? src
279
282
  }
280
283
  }));
284
+
281
285
  }
282
286
 
287
+ private onReady = () => this._loadingView?.onLoadingFinished();
288
+
289
+
283
290
  private registerEventFromAttribute(eventName: string, code: string) {
284
291
  if (typeof code === "string" && code.length > 0) {
285
292
  // indirect eval https://esbuild.github.io/content-types/#direct-eval
@@ -14,7 +14,7 @@ export class LoadingElementOptions {
14
14
 
15
15
  export interface ILoadingViewHandler {
16
16
  onLoadingBegin(message?: string);
17
- onLoadingUpdate(progress: LoadingProgressArgs, message?: string);
17
+ onLoadingUpdate(progress: LoadingProgressArgs | number, message?: string);
18
18
  onLoadingFinished(message?: string);
19
19
  }
20
20
 
@@ -110,9 +110,11 @@ export class EngineLoadingView implements ILoadingViewHandler {
110
110
  this.updateDisplay();
111
111
  }
112
112
 
113
- onLoadingFinished(message?: string) {
113
+ onLoadingFinished() {
114
+ if (debug)
115
+ console.warn("Finished Loading");
114
116
  this.loadingProgress = 1;
115
- this.setMessage(message ?? "");
117
+ this.onDoneLoading();
116
118
  }
117
119
 
118
120
  setMessage(message: string) {
@@ -125,27 +127,29 @@ export class EngineLoadingView implements ILoadingViewHandler {
125
127
  private smoothProgressLoop() {
126
128
  if (this._progressLoop) return;
127
129
  let dt = 1 / 12;
128
- const max = 1 - .05;
129
130
  if (debugRendering) {
130
131
  dt = 1 / 500;
131
132
  if (typeof debugRendering === "number") dt *= debugRendering;
132
133
  }
133
134
  this._progressLoop = setInterval(() => {
134
- if (this.loadingProgress >= 1 && this._progress >= max) {
135
- if (this._loadingElement) {
136
- if (debug) console.log("Hiding loading element");
137
- this._loadingElement.style.display = "none";
138
- this._loadingElement.remove();
139
- }
140
- clearInterval(this._progressLoop);
141
- this._progressLoop = null;
142
- return;
143
- }
135
+ // increate loading speed when almost done
136
+ if (this.loadingProgress >= .95) dt = .9;
144
137
  this._progress = Mathf.lerp(this._progress, this.loadingProgress, dt * this.loadingProgress);
145
138
  this.updateDisplay();
146
139
  }, dt);
147
140
  }
148
141
 
142
+ private onDoneLoading() {
143
+ if (this._loadingElement) {
144
+ if (debug) console.log("Hiding loading element");
145
+ this._loadingElement.style.display = "none";
146
+ this._loadingElement.remove();
147
+ }
148
+ if (this._progressLoop)
149
+ clearInterval(this._progressLoop);
150
+ this._progressLoop = null;
151
+ }
152
+
149
153
  private updateDisplay() {
150
154
  const t = this._progress;
151
155
  const percent = (t * 100).toFixed(0) + "%";