@needle-tools/engine 3.7.3-alpha.2 → 3.7.5-alpha

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "3.7.3-alpha.2",
3
+ "version": "3.7.5-alpha",
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.umd.cjs",
6
6
  "type": "module",
@@ -783,16 +783,19 @@ export class Context implements IContext {
783
783
  }
784
784
  }
785
785
 
786
- private internalRender(_, frame: XRFrame | null) {
786
+ private _lastTimestamp = 0;
787
+ private internalRender(timestamp : DOMHighResTimeStamp, frame: XRFrame | null) {
787
788
  this._xrFrame = frame;
788
789
 
789
790
  this._currentFrameEvent = FrameEvent.Undefined;
790
-
791
+
791
792
  if (this.isInXR === false && this.targetFrameRate !== undefined) {
792
- this._accumulatedTime += this._framerateClock.getDelta();
793
- let targetFrameRate = this.targetFrameRate as any;
794
- if (typeof targetFrameRate === "object") targetFrameRate = targetFrameRate.value;
795
- // if(debug) console.log(targetFrameRate)
793
+ if(this._lastTimestamp === 0) this._lastTimestamp = timestamp;
794
+ this._accumulatedTime += (timestamp - this._lastTimestamp) /1000;
795
+ this._lastTimestamp = timestamp;
796
+ let targetFrameRate = this.targetFrameRate;
797
+ if (typeof targetFrameRate === "object") targetFrameRate = targetFrameRate.value!;
798
+ // if(debug) console.log(this._accumulatedTime, (1 / (targetFrameRate)))
796
799
  if (this._accumulatedTime < (1 / (targetFrameRate + 1))) {
797
800
  return;
798
801
  }
@@ -309,6 +309,9 @@ export class AudioSource extends Behaviour {
309
309
  }
310
310
 
311
311
  play(clip: string | undefined = undefined) {
312
+ // Make sure this is always just a string
313
+ if (typeof clip !== "string") clip = undefined;
314
+
312
315
  if (!this.audioLoader || !this.sound || (clip && clip !== this.clip)) {
313
316
  this.loadAndPlay(clip);
314
317
  return;
@@ -328,8 +328,10 @@ export class Component implements IComponent, EventTarget {
328
328
  return this.gameObject?.userData.tag;
329
329
  }
330
330
  set tag(str: string) {
331
- if (this.gameObject)
331
+ if (this.gameObject) {
332
+ if (!this.gameObject.userData) this.gameObject.userData = {}
332
333
  this.gameObject.userData.tag = str;
334
+ }
333
335
  }
334
336
  get static() {
335
337
  return this.gameObject?.userData.static;
@@ -63,17 +63,17 @@ export class SpatialTriggerReceiver extends Behaviour {
63
63
  onEnterTrigger(trigger: SpatialTrigger): void {
64
64
  if(debug) console.log("ENTER TRIGGER", this.name, trigger.name, this, trigger);
65
65
  trigger.raiseOnEnterEvent(this);
66
- this.onEnter?.invoke(this, trigger);
66
+ this.onEnter?.invoke();
67
67
  }
68
68
  onExitTrigger(trigger: SpatialTrigger): void {
69
69
  if(debug) console.log("EXIT TRIGGER", this.name, trigger.name, this, trigger);
70
70
  trigger.raiseOnExitEvent(this);
71
- this.onExit?.invoke(this, trigger);
71
+ this.onExit?.invoke();
72
72
  }
73
73
 
74
74
  onStayTrigger(trigger: SpatialTrigger): void {
75
75
  trigger.raiseOnStayEvent(this);
76
- this.onStay?.invoke(this, trigger);
76
+ this.onStay?.invoke();
77
77
  }
78
78
  }
79
79
 
@@ -1,9 +1,9 @@
1
1
  import { EventList } from "../EventList";
2
2
  import { Behaviour } from "../Component";
3
- import { ISerializable, SerializationContext, TypeSerializer } from "../../engine/engine_serialization_core";
4
- import { eventListSerializer } from "../../engine/engine_serialization_builtin_serializer";
5
3
  import { serializable } from "../../engine/engine_serialization_decorator";
4
+ import { getParam } from "../../engine/engine_utils";
6
5
 
6
+ const debug = getParam("debugsignals")
7
7
 
8
8
 
9
9
  export class SignalAsset {
@@ -36,6 +36,10 @@ export class SignalReceiver extends Behaviour {
36
36
  @serializable(SignalReceiverEvent)
37
37
  events?: SignalReceiverEvent[];
38
38
 
39
+ awake(): void {
40
+ if(debug) console.log("SignalReceiver awake", this);
41
+ }
42
+
39
43
  onEnable(): void {
40
44
  if (this.events) {
41
45
  for (const evt of this.events) {
@@ -723,6 +723,8 @@ export class SignalTrackHandler extends TrackHandler {
723
723
  // if (lastTime === -1) lastTime = time;
724
724
  // this._lastTime = time;
725
725
 
726
+ const estimatedFrameLengthWithPadding = this.director.context.time.deltaTime * 1.5;
727
+
726
728
  for (let i = 0; i < this.models.length; i++) {
727
729
  const model = this.models[i];
728
730
  const wasTriggered = this.didTrigger[i];
@@ -738,7 +740,7 @@ export class SignalTrackHandler extends TrackHandler {
738
740
  // }
739
741
  else {
740
742
  const abs = Math.abs(td);
741
- if (abs >= .00001 && abs < .1) {
743
+ if (abs >= .00001 && abs < estimatedFrameLengthWithPadding) {
742
744
  isActive = true;
743
745
  }
744
746
  }