@needle-tools/engine 5.0.0-canary.046b5ee → 5.0.0-canary.663b7ae

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 (30) hide show
  1. package/SKILL.md +10 -51
  2. package/components.needle.json +1 -1
  3. package/dist/{needle-engine.bundle-ftBf8i-Y.umd.cjs → needle-engine.bundle-B2scYiA2.umd.cjs} +130 -130
  4. package/dist/{needle-engine.bundle-DG7qmP91.min.js → needle-engine.bundle-BFEYJdZs.min.js} +127 -127
  5. package/dist/{needle-engine.bundle-m_XBpL11.js → needle-engine.bundle-CYxZeAfg.js} +5671 -5575
  6. package/dist/needle-engine.d.ts +76 -10
  7. package/dist/needle-engine.js +84 -83
  8. package/dist/needle-engine.min.js +1 -1
  9. package/dist/needle-engine.umd.cjs +1 -1
  10. package/lib/engine/engine_addressables.js +3 -0
  11. package/lib/engine/engine_addressables.js.map +1 -1
  12. package/lib/engine/engine_gameobject.js.map +1 -1
  13. package/lib/engine/engine_networking.d.ts +11 -8
  14. package/lib/engine/engine_networking.js +43 -26
  15. package/lib/engine/engine_networking.js.map +1 -1
  16. package/lib/engine/engine_networking_instantiate.d.ts +21 -4
  17. package/lib/engine/engine_networking_instantiate.js +37 -3
  18. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  19. package/lib/engine-components/OrbitControls.js +1 -1
  20. package/lib/engine-components/OrbitControls.js.map +1 -1
  21. package/lib/engine-components/Voip.d.ts +46 -0
  22. package/lib/engine-components/Voip.js +126 -2
  23. package/lib/engine-components/Voip.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/engine/engine_addressables.ts +3 -0
  26. package/src/engine/engine_gameobject.ts +1 -1
  27. package/src/engine/engine_networking.ts +46 -23
  28. package/src/engine/engine_networking_instantiate.ts +38 -5
  29. package/src/engine-components/OrbitControls.ts +1 -1
  30. package/src/engine-components/Voip.ts +129 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Voip.js","sourceRoot":"","sources":["../../src/engine-components/Voip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Voip.js","sourceRoot":"","sources":["../../src/engine-components/Voip.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": "5.0.0-canary.046b5ee",
3
+ "version": "5.0.0-canary.663b7ae",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.",
5
5
  "main": "dist/needle-engine.min.js",
6
6
  "exports": {
@@ -463,6 +463,9 @@ export class AssetReference {
463
463
  if (networked) {
464
464
  options.context = context;
465
465
  const prefab = this.asset;
466
+ // Only set guid from URL if we have one — runtime Object3D prefabs
467
+ // (via new AssetReference({ asset: obj })) have no URL and may already
468
+ // have a user-assigned guid. Don't overwrite with empty string.
466
469
  if (this.url) prefab.guid = this.url;
467
470
  const instance = syncInstantiate(prefab, options, undefined, saveOnServer);
468
471
  if (instance) {
@@ -8,6 +8,7 @@ import { activeInHierarchyFieldName } from "./engine_constants.js";
8
8
  import { editorGuidKeyName } from "./engine_constants.js";
9
9
  import { $isUsingInstancing, InstancingUtil } from "./engine_instancing.js";
10
10
  import { processNewScripts } from "./engine_mainloop_utils.js";
11
+ import type { syncInstantiate } from "./engine_networking_instantiate.js";
11
12
  import { InstantiateIdProvider } from "./engine_networking_instantiate.js";
12
13
  import { assign, ISerializable } from "./engine_serialization_core.js";
13
14
  import { Context, registerComponent } from "./engine_setup.js";
@@ -15,7 +16,6 @@ import { getTempQuaternion, logHierarchy, setWorldPosition, setWorldQuaternion }
15
16
  import { type Constructor, type GuidsMap, type IComponent as Component, type IComponent, IEventList, type IGameObject as GameObject, type UIDProvider } from "./engine_types.js";
16
17
  import { deepClone, getParam, tryFindObject } from "./engine_utils.js";
17
18
  import { apply } from "./js-extensions/index.js";
18
- import type { syncInstantiate } from "./engine_networking_instantiate.js";
19
19
 
20
20
  const debug = getParam("debuggetcomponent");
21
21
  const debugInstantiate = getParam("debuginstantiate");
@@ -248,6 +248,7 @@ export class OwnershipModel {
248
248
  private _gainSubscription: (response: GainedOwnershipBroadcastResponse) => void;
249
249
  private _lostSubscription: (guid: string) => void;
250
250
  private _hasOwnerResponse: (response: OwnershipResponse) => void;
251
+ private _pendingOwnershipResolve: ((value: boolean) => void) | null = null;
251
252
 
252
253
  constructor(connection: NetworkConnection, guid: string) {
253
254
  this.connection = connection;
@@ -291,7 +292,6 @@ export class OwnershipModel {
291
292
  }
292
293
 
293
294
  private waitForHasOwnershipRequestResponse(res: OwnershipResponse) {
294
- // console.log(res);
295
295
  if (res.guid === this.guid) {
296
296
  if (this._isWaitingForOwnershipResponseCallback) {
297
297
  this.connection.stopListen(OwnershipEvent.ResponseHasOwner, this._isWaitingForOwnershipResponseCallback);
@@ -301,47 +301,58 @@ export class OwnershipModel {
301
301
  if (!res.value) {
302
302
  if (debugOwner)
303
303
  console.log("request ownership", this.guid)
304
- this.requestOwnership();
304
+ this.connection.send(OwnershipEvent.RequestOwnership, { guid: this.guid });
305
305
  }
306
306
  }
307
307
  }
308
308
 
309
309
 
310
+
310
311
  /**
311
312
  * Requests ownership and waits asynchronously until ownership is granted or timeout occurs.
312
313
  * @returns Promise that resolves with this OwnershipModel when ownership is gained
313
314
  * @throws Rejects with "Timeout" if ownership is not gained within ~1 second
314
315
  * @example
315
316
  * ```ts
316
- * try {
317
- * await ownership.requestOwnershipAsync();
317
+ * const owned = await ownership.requestOwnership();
318
+ * if (owned) {
318
319
  * // Ownership granted, safe to modify object
319
- * } catch(e) {
320
- * console.warn("Could not gain ownership:", e);
321
320
  * }
322
321
  * ```
323
322
  */
324
- public requestOwnershipAsync(): Promise<OwnershipModel> {
325
- return new Promise((resolve, reject) => {
326
- this.requestOwnership();
327
- let updates = 0;
328
- const waitForOwnership = () => {
329
- if (updates++ > 10) return reject("Timeout");
330
- setTimeout(() => {
331
- if (this.hasOwnership) resolve(this);
332
- else waitForOwnership();
333
- }, 100);
334
- };
335
- waitForOwnership();
323
+ /**
324
+ * Requests ownership of this object from the networking server.
325
+ * Returns a Promise that resolves with `true` when ownership is granted, or `false` on timeout/failure.
326
+ * If ownership is already held, resolves immediately with `true`.
327
+ * @returns Promise that resolves with `true` if ownership was gained, `false` otherwise
328
+ */
329
+ public requestOwnership(): Promise<boolean> {
330
+ if (this._hasOwnership) return Promise.resolve(true);
331
+
332
+ // Cancel any previous pending request
333
+ this._pendingOwnershipResolve?.(false);
334
+ this._pendingOwnershipResolve = null;
335
+
336
+ if (debugOwner) console.log("Request ownership", this.guid);
337
+ this.connection.send(OwnershipEvent.RequestOwnership, { guid: this.guid });
338
+
339
+ return new Promise((resolve) => {
340
+ this._pendingOwnershipResolve = resolve;
341
+
342
+ // Timeout after ~2 seconds
343
+ setTimeout(() => {
344
+ if (this._pendingOwnershipResolve === resolve) {
345
+ this._pendingOwnershipResolve = null;
346
+ resolve(false);
347
+ }
348
+ }, 2000);
336
349
  });
337
350
  }
338
351
 
339
352
  /**
340
- * Requests ownership of this object from the networking server.
341
- * Ownership may not be granted immediately - check `hasOwnership` property or use `requestOwnershipAsync()`.
342
- * @returns this OwnershipModel instance for method chaining
353
+ * @deprecated Use `requestOwnership()` instead for a more reliable way to gain ownership
343
354
  */
344
- public requestOwnership(): OwnershipModel {
355
+ public async requestOwnershipAsync(): Promise<OwnershipModel> {
345
356
  if (debugOwner) console.log("Request ownership", this.guid);
346
357
  this.connection.send(OwnershipEvent.RequestOwnership, { guid: this.guid });
347
358
  return this;
@@ -374,16 +385,23 @@ export class OwnershipModel {
374
385
  this.connection.stopListen(OwnershipEvent.ResponseHasOwner, this._isWaitingForOwnershipResponseCallback);
375
386
  this._isWaitingForOwnershipResponseCallback = null;
376
387
  }
388
+ // Clean up pending ownership request
389
+ this._pendingOwnershipResolve?.(false);
390
+ this._pendingOwnershipResolve = null;
377
391
  }
378
392
 
379
393
  private onGainedOwnership(res: GainedOwnershipBroadcastResponse) {
380
394
  if (res.guid === this.guid) {
381
395
  this._isOwned = true;
382
- // console.log(res.owner, connection.connectionId)
383
396
  if (this.connection.connectionId === res.owner) {
384
397
  if (debugOwner)
385
398
  console.log("GAINED OWNERSHIP", this.guid)
386
399
  this._hasOwnership = true;
400
+ // Resolve pending ownership request
401
+ if (this._pendingOwnershipResolve) {
402
+ this._pendingOwnershipResolve(true);
403
+ this._pendingOwnershipResolve = null;
404
+ }
387
405
  }
388
406
  else this._hasOwnership = false;
389
407
  }
@@ -394,6 +412,11 @@ export class OwnershipModel {
394
412
  console.log("LOST OWNERSHIP", this.guid)
395
413
  this._hasOwnership = false;
396
414
  this._isOwned = false;
415
+ // Resolve pending ownership request as failed
416
+ if (this._pendingOwnershipResolve) {
417
+ this._pendingOwnershipResolve(false);
418
+ this._pendingOwnershipResolve = null;
419
+ }
397
420
  }
398
421
  }
399
422
  }
@@ -11,7 +11,7 @@ import type { INetworkConnection } from "./engine_networking_types.js";
11
11
  import type { IModel } from "./engine_networking_types.js";
12
12
  import { SendQueue } from "./engine_networking_types.js";
13
13
  import { Context } from "./engine_setup.js"
14
- import type { IComponent as Component, IGameObject as GameObject, IContext } from "./engine_types.js"
14
+ import type { IComponent as Component, IContext,IGameObject as GameObject } from "./engine_types.js"
15
15
  import type { UIDProvider } from "./engine_types.js";
16
16
  import * as utils from "./engine_utils.js"
17
17
 
@@ -154,13 +154,46 @@ export function sendDestroyed(guid: string, con: INetworkConnection, opts?: Sync
154
154
  con.send(InstantiateEvent.InstanceDestroyed, model, SendQueue.Queued);
155
155
  }
156
156
 
157
+ declare type SyncDestroyCallback = (guid: string, object: Object3D) => void;
158
+ const _onSyncDestroyCallbacks: SyncDestroyCallback[] = [];
159
+
160
+ /**
161
+ * Register a callback that fires when a remote `syncDestroy` event is received.
162
+ * The callback receives the guid and the resolved Object3D (or null if not found in the scene).
163
+ * The callback fires **before** the object is destroyed, so you can still access its state.
164
+ * @param callback Called with the guid and the Object3D about to be destroyed
165
+ * @returns An unsubscribe function
166
+ * @category Networking
167
+ * @example
168
+ * ```ts
169
+ * const unsub = onSyncDestroy((guid, obj) => {
170
+ * console.log("Remote object destroyed:", guid, obj?.name);
171
+ * });
172
+ * // later: unsub();
173
+ * ```
174
+ */
175
+ export function onSyncDestroy(callback: SyncDestroyCallback): () => void {
176
+ _onSyncDestroyCallbacks.push(callback);
177
+ return () => {
178
+ const idx = _onSyncDestroyCallbacks.indexOf(callback);
179
+ if (idx >= 0) _onSyncDestroyCallbacks.splice(idx, 1);
180
+ };
181
+ }
182
+
157
183
  export function beginListenDestroy(context: Context) {
158
184
  context.connection.beginListen(InstantiateEvent.InstanceDestroyed, (data: DestroyInstanceModel) => {
159
185
  if (debug)
160
186
  console.log("[Remote] Destroyed", context.scene, data);
161
187
  // TODO: create global lookup table for guids
162
188
  const obj = findByGuid(data.guid, context.scene);
163
- if (obj) destroy(obj);
189
+ if (obj) {
190
+ // Notify listeners before destroying
191
+ for (const cb of _onSyncDestroyCallbacks) {
192
+ try { cb(data.guid, obj as Object3D); }
193
+ catch (err) { console.error("Error in onSyncDestroy callback", err); }
194
+ }
195
+ destroy(obj);
196
+ }
164
197
  });
165
198
  }
166
199
 
@@ -479,11 +512,11 @@ function instantiateSeeded(obj: GameObject, opts: IInstantiateOptions | null): {
479
512
  return { seed: seed, instance: instance };
480
513
  }
481
514
 
482
- export { Prefabs, type PrefabProviderCallback } from "./engine_networking_prefabs.js";
515
+ export { type PrefabProviderCallback,Prefabs } from "./engine_networking_prefabs.js";
483
516
  import { Prefabs } from "./engine_networking_prefabs.js";
484
517
 
485
518
  /**
486
- * @deprecated Use `Prefabs.register()` instead.
519
+ * Register a prefab provider. Forwards to {@link Prefabs.register}.
487
520
  * @category Networking
488
521
  */
489
522
  export function registerPrefabProvider(key: string, fn: (guid: string) => Promise<Object3D | null>) {
@@ -491,7 +524,7 @@ export function registerPrefabProvider(key: string, fn: (guid: string) => Promis
491
524
  }
492
525
 
493
526
  /**
494
- * @deprecated Use `Prefabs.unregister()` instead.
527
+ * Unregister a prefab provider. Forwards to {@link Prefabs.unregister}.
495
528
  * @category Networking
496
529
  */
497
530
  export function unregisterPrefabProvider(key: string) {
@@ -15,10 +15,10 @@ import { DeviceUtilities, getParam } from "../engine/engine_utils.js";
15
15
  import { NeedleEngineWebComponent } from "../engine/webcomponents/needle-engine.js";
16
16
  import { Camera } from "./Camera.js";
17
17
  import { Behaviour, GameObject } from "./Component.js";
18
+ import { LookAtConstraint } from "./LookAtConstraint.js";
18
19
  import { SyncedTransform } from "./SyncedTransform.js";
19
20
  import { type AfterHandleInputEvent, EventSystem, EventSystemEvents } from "./ui/EventSystem.js";
20
21
  import { tryGetUIComponent } from "./ui/Utils.js";
21
- import { LookAtConstraint } from "./LookAtConstraint.js";
22
22
 
23
23
 
24
24
  const debug = getParam("debugorbit");
@@ -3,10 +3,10 @@ import { Application } from "../engine/engine_application.js";
3
3
  import { RoomEvents } from "../engine/engine_networking.js";
4
4
  import { disposeStream, NetworkedStreamEvents, NetworkedStreams, StreamEndedEvent, StreamReceivedEvent } from "../engine/engine_networking_streams.js"
5
5
  import { serializable } from "../engine/engine_serialization_decorator.js";
6
- import { DeviceUtilities, getParam } from "../engine/engine_utils.js";
7
- import { delay } from "../engine/engine_utils.js";
6
+ import { delay, DeviceUtilities, getParam } from "../engine/engine_utils.js";
8
7
  import { getIconElement } from "../engine/webcomponents/icons.js";
9
8
  import { Behaviour } from "./Component.js";
9
+ import { EventList } from "./EventList.js";
10
10
 
11
11
  export const noVoip = "noVoip";
12
12
  const debugParam = getParam("debugvoip");
@@ -75,6 +75,66 @@ export class Voip extends Behaviour {
75
75
  */
76
76
  debug: boolean = false;
77
77
 
78
+ private _volume: number = 1;
79
+
80
+ /**
81
+ * Volume for incoming audio streams (0 = silent, 1 = full volume).
82
+ * Changes apply immediately to all active incoming streams.
83
+ */
84
+ @serializable()
85
+ get volume(): number { return this._volume; }
86
+ set volume(val: number) {
87
+ this._volume = val;
88
+ for (const audio of this._incomingStreams.values()) {
89
+ audio.volume = val;
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Get the incoming audio element for a specific user.
95
+ * Use this to route audio through the Web Audio API for spatial audio, effects, or analysis.
96
+ * @param userId The connection ID of the remote user
97
+ * @returns The HTMLAudioElement for this user's stream, or undefined if not connected
98
+ * @example
99
+ * ```ts
100
+ * const audioEl = voip.getAudioElement(userId);
101
+ * if (audioEl) {
102
+ * const audioCtx = new AudioContext();
103
+ * const source = audioCtx.createMediaElementSource(audioEl);
104
+ * const panner = audioCtx.createPanner();
105
+ * source.connect(panner).connect(audioCtx.destination);
106
+ * }
107
+ * ```
108
+ */
109
+ getAudioElement(userId: string): HTMLAudioElement | undefined {
110
+ return this._incomingStreams.get(userId);
111
+ }
112
+
113
+ /**
114
+ * Get all active incoming audio streams as a Map of userId → HTMLAudioElement.
115
+ * Useful for iterating over all connected voice users.
116
+ */
117
+ get incomingStreams(): ReadonlyMap<string, HTMLAudioElement> {
118
+ return this._incomingStreams;
119
+ }
120
+
121
+ /**
122
+ * Threshold for speaking detection (0–255). When a user's audio amplitude exceeds this,
123
+ * they are considered "speaking". Default is 30.
124
+ */
125
+ @serializable()
126
+ speakingThreshold: number = 30;
127
+
128
+ /**
129
+ * Event fired when a user's speaking state changes.
130
+ * Passes `{ userId: string, isSpeaking: boolean, volume: number }`.
131
+ */
132
+ @serializable(EventList)
133
+ onSpeakingChanged: EventList = new EventList();
134
+
135
+ private _speakingStates = new Map<string, boolean>();
136
+ private _analysers = new Map<string, { analyser: AnalyserNode, data: Uint8Array, context: AudioContext }>();
137
+
78
138
  private _net?: NetworkedStreams;
79
139
  private _menubutton?: HTMLElement;
80
140
 
@@ -141,12 +201,25 @@ export class Voip extends Behaviour {
141
201
  this.onEnabledChanged();
142
202
  this.updateButton();
143
203
  window.removeEventListener("visibilitychange", this.onVisibilityChanged);
204
+ // Clean up analysers
205
+ for (const userId of [...this._analysers.keys()]) {
206
+ this.cleanupAnalyser(userId);
207
+ }
144
208
  }
145
209
 
146
210
  /** @internal */
147
211
  onDestroy(): void {
148
212
  this._menubutton?.remove();
149
213
  this._menubutton = undefined;
214
+ // Clean up all streams and analysers
215
+ for (const userId of [...this._analysers.keys()]) {
216
+ this.cleanupAnalyser(userId);
217
+ }
218
+ for (const incoming of this._incomingStreams.values()) {
219
+ disposeStream(incoming.srcObject as MediaStream);
220
+ }
221
+ this._incomingStreams.clear();
222
+ this._speakingStates.clear();
150
223
  }
151
224
 
152
225
  /** Set via the mic button (e.g. when the websocket connection closes and rejoins but the user was muted before we don't want to enable VOIP again automatically) */
@@ -347,10 +420,61 @@ export class Voip extends Behaviour {
347
420
  disposeStream(incoming.srcObject as MediaStream);
348
421
  }
349
422
  this._incomingStreams.clear();
423
+ for (const userId of this._analysers.keys()) {
424
+ this.cleanupAnalyser(userId);
425
+ }
350
426
  }
351
427
 
352
428
  private _incomingStreams: Map<string, HTMLAudioElement> = new Map();
353
429
 
430
+ /** @internal */
431
+ update() {
432
+ // Only run speaking detection if someone is listening
433
+ if (!this.onSpeakingChanged || this.onSpeakingChanged.listenerCount <= 0) return;
434
+
435
+ for (const [userId, info] of this._analysers) {
436
+ info.analyser.getByteFrequencyData(info.data as Uint8Array<ArrayBuffer>);
437
+ // Average amplitude
438
+ let sum = 0;
439
+ for (let i = 0; i < info.data.length; i++) sum += info.data[i];
440
+ const avg = sum / info.data.length;
441
+
442
+ const wasSpeaking = this._speakingStates.get(userId) ?? false;
443
+ const isSpeaking = avg > this.speakingThreshold;
444
+
445
+ if (isSpeaking !== wasSpeaking) {
446
+ this._speakingStates.set(userId, isSpeaking);
447
+ this.onSpeakingChanged.invoke({ userId, isSpeaking, volume: avg / 255 });
448
+ }
449
+ }
450
+ }
451
+
452
+ private setupAnalyser(userId: string, _audioElement: HTMLAudioElement, stream: MediaStream) {
453
+ // Only set up if someone is listening or might listen
454
+ if (this._analysers.has(userId)) return;
455
+ try {
456
+ const audioCtx = new AudioContext();
457
+ const source = audioCtx.createMediaStreamSource(stream);
458
+ const analyser = audioCtx.createAnalyser();
459
+ analyser.fftSize = 256;
460
+ source.connect(analyser);
461
+ const data = new Uint8Array(analyser.frequencyBinCount);
462
+ this._analysers.set(userId, { analyser, data, context: audioCtx });
463
+ }
464
+ catch (err) {
465
+ if (this.debug) console.warn("VOIP: Failed to create analyser for", userId, err);
466
+ }
467
+ }
468
+
469
+ private cleanupAnalyser(userId: string) {
470
+ const info = this._analysers.get(userId);
471
+ if (info) {
472
+ info.context.close();
473
+ this._analysers.delete(userId);
474
+ }
475
+ this._speakingStates.delete(userId);
476
+ }
477
+
354
478
  private onReceiveStream = (evt: StreamReceivedEvent) => {
355
479
  const userId = evt.target.userId;
356
480
  const stream = evt.stream;
@@ -361,7 +485,9 @@ export class Voip extends Behaviour {
361
485
  this._incomingStreams.set(userId, audioElement);
362
486
  }
363
487
  audioElement.srcObject = stream;
488
+ audioElement.volume = this._volume;
364
489
  audioElement.setAttribute("autoplay", "true");
490
+ this.setupAnalyser(userId, audioElement, stream);
365
491
  // for mobile we need to wait for user interaction to play audio. Auto play doesnt work on android when the page is refreshed
366
492
  Application.registerWaitForInteraction(() => {
367
493
  audioElement?.play().catch((err) => {
@@ -374,6 +500,7 @@ export class Voip extends Behaviour {
374
500
  const existing = this._incomingStreams.get(evt.userId);
375
501
  disposeStream(existing?.srcObject as MediaStream);
376
502
  this._incomingStreams.delete(evt.userId);
503
+ this.cleanupAnalyser(evt.userId);
377
504
  }
378
505
 
379
506
  private onEnabledChanged = () => {