@needle-tools/engine 2.40.0-pre → 2.42.0-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 (80) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/needle-engine.d.ts +332 -126
  3. package/dist/needle-engine.js +401 -401
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +53 -53
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/lib/engine/engine_element.js +1 -1
  8. package/lib/engine/engine_element.js.map +1 -1
  9. package/lib/engine/engine_element_loading.js +6 -1
  10. package/lib/engine/engine_element_loading.js.map +1 -1
  11. package/lib/engine/engine_gizmos.d.ts +8 -21
  12. package/lib/engine/engine_gizmos.js +51 -5
  13. package/lib/engine/engine_gizmos.js.map +1 -1
  14. package/lib/engine/engine_math.d.ts +9 -6
  15. package/lib/engine/engine_math.js +9 -0
  16. package/lib/engine/engine_math.js.map +1 -1
  17. package/lib/engine/engine_physics.js +14 -6
  18. package/lib/engine/engine_physics.js.map +1 -1
  19. package/lib/engine/engine_serialization_core.js +2 -0
  20. package/lib/engine/engine_serialization_core.js.map +1 -1
  21. package/lib/engine/engine_setup.d.ts +3 -0
  22. package/lib/engine/engine_setup.js +15 -0
  23. package/lib/engine/engine_setup.js.map +1 -1
  24. package/lib/engine/engine_three_utils.d.ts +16 -1
  25. package/lib/engine/engine_three_utils.js +94 -54
  26. package/lib/engine/engine_three_utils.js.map +1 -1
  27. package/lib/engine/engine_types.d.ts +6 -0
  28. package/lib/engine/engine_types.js.map +1 -1
  29. package/lib/engine/engine_utils.d.ts +1 -0
  30. package/lib/engine/engine_utils.js +3 -0
  31. package/lib/engine/engine_utils.js.map +1 -1
  32. package/lib/engine-components/AnimationCurve.js +20 -5
  33. package/lib/engine-components/AnimationCurve.js.map +1 -1
  34. package/lib/engine-components/BoxHelperComponent.js +9 -10
  35. package/lib/engine-components/BoxHelperComponent.js.map +1 -1
  36. package/lib/engine-components/Light.d.ts +2 -0
  37. package/lib/engine-components/Light.js +33 -9
  38. package/lib/engine-components/Light.js.map +1 -1
  39. package/lib/engine-components/ParticleSystem.d.ts +29 -26
  40. package/lib/engine-components/ParticleSystem.js +349 -187
  41. package/lib/engine-components/ParticleSystem.js.map +1 -1
  42. package/lib/engine-components/ParticleSystemModules.d.ts +243 -64
  43. package/lib/engine-components/ParticleSystemModules.js +722 -153
  44. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  45. package/lib/engine-components/ReflectionProbe.js +29 -11
  46. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  47. package/lib/engine-components/Renderer.d.ts +1 -0
  48. package/lib/engine-components/Renderer.js +4 -2
  49. package/lib/engine-components/Renderer.js.map +1 -1
  50. package/lib/engine-components/WebXR.js +8 -3
  51. package/lib/engine-components/WebXR.js.map +1 -1
  52. package/lib/engine-components/codegen/components.d.ts +7 -0
  53. package/lib/engine-components/codegen/components.js +7 -0
  54. package/lib/engine-components/codegen/components.js.map +1 -1
  55. package/package.json +4 -2
  56. package/src/engine/codegen/register_types.js +28 -0
  57. package/src/engine/dist/engine_three_utils.js +279 -0
  58. package/src/engine/engine_element.ts +1 -1
  59. package/src/engine/engine_element_loading.ts +5 -1
  60. package/src/engine/engine_gizmos.ts +58 -6
  61. package/src/engine/engine_math.ts +19 -6
  62. package/src/engine/engine_physics.ts +17 -7
  63. package/src/engine/engine_serialization_core.ts +1 -0
  64. package/src/engine/engine_setup.ts +25 -2
  65. package/src/engine/engine_three_utils.ts +103 -62
  66. package/src/engine/engine_types.ts +8 -1
  67. package/src/engine/engine_utils.ts +5 -0
  68. package/src/engine-components/AnimationCurve.ts +25 -11
  69. package/src/engine-components/BoxHelperComponent.ts +12 -15
  70. package/src/engine-components/Light.ts +39 -8
  71. package/src/engine-components/ParticleSystem.ts +395 -199
  72. package/src/engine-components/ParticleSystemModules.ts +638 -152
  73. package/src/engine-components/ReflectionProbe.ts +37 -13
  74. package/src/engine-components/Renderer.ts +4 -2
  75. package/src/engine-components/WebXR.ts +11 -8
  76. package/src/engine-components/codegen/components.ts +7 -0
  77. package/src/engine/dist/engine_physics.js +0 -739
  78. package/src/engine/dist/engine_setup.js +0 -777
  79. package/src/engine-components/dist/CharacterController.js +0 -123
  80. package/src/engine-components/dist/RigidBody.js +0 -458
@@ -10,11 +10,14 @@ import { getParam } from "../engine/engine_utils";
10
10
  export const debug = getParam("debugreflectionprobe");
11
11
  const disable = getParam("noreflectionprobe");
12
12
 
13
+ const $reflectionProbeKey = Symbol("reflectionProbeKey");
14
+ const $originalMaterial = Symbol("original material");
15
+
13
16
  export class ReflectionProbe extends Behaviour {
14
17
 
15
18
  private static _probes: Map<Context, ReflectionProbe[]> = new Map();
16
19
 
17
- public static get(object: Object3D | null | undefined, context: Context, isAnchor:boolean): ReflectionProbe | null {
20
+ public static get(object: Object3D | null | undefined, context: Context, isAnchor: boolean): ReflectionProbe | null {
18
21
  if (!object || object.isObject3D !== true) return null;
19
22
  if (disable) return null;
20
23
  const probes = ReflectionProbe._probes.get(context);
@@ -91,7 +94,7 @@ export class ReflectionProbe extends Behaviour {
91
94
  // and some need reflection probe and some don't
92
95
  // we need to make sure we don't override the material but use a copy
93
96
 
94
- private static _rendererMaterialsCache: Map<IRenderer, Array<{ orig: Material, copy: Material }>> = new Map();
97
+ private static _rendererMaterialsCache: Map<IRenderer, Array<{ material: Material, copy: Material }>> = new Map();
95
98
 
96
99
  onSet(_rend: IRenderer) {
97
100
  if (disable) return;
@@ -109,22 +112,43 @@ export class ReflectionProbe extends Behaviour {
109
112
  // need to make sure materials are not shared when using reflection probes
110
113
  // otherwise some renderers outside of the probe will be affected or vice versa
111
114
  for (let i = 0; i < _rend.sharedMaterials.length; i++) {
112
- const orig = _rend.sharedMaterials[i];
113
- if (!orig) continue;
114
- if (orig["envMap"] === undefined) continue;
115
+ const material = _rend.sharedMaterials[i];
116
+ if (!material) continue;
117
+ if (material["envMap"] === undefined) continue;
118
+ if (material["envMap"] === this.texture) {
119
+ continue;
120
+ }
115
121
  let cached = rendererCache[i];
116
- let copy = cached?.copy;
117
- if (!cached) {
118
- const clone = orig.clone();
119
- copy = clone;
120
- rendererCache.push({ orig, copy });
121
122
 
122
- copy["__reflection_probe"] = this;
123
- copy["envMap"] = this.texture;
123
+ // make sure we have the currently assigned material cached (and an up to date clone of that)
124
+ if (!cached || cached.material !== material || cached.material.version !== material.version) {
125
+ const clone = material.clone();
126
+
127
+ if (cached) {
128
+ cached.copy = clone;
129
+ cached.material = material;
130
+ }
131
+ else {
132
+ cached = {
133
+ material: material,
134
+ copy: clone
135
+ };
136
+ rendererCache.push(cached);
137
+ }
138
+
139
+ clone[$reflectionProbeKey] = this;
140
+ clone[$originalMaterial] = material;
141
+
142
+ // make sure the reflection probe is assigned
143
+ clone["envMap"] = this.texture;
124
144
 
125
145
  if (debug)
126
146
  console.log("Set reflection", _rend.name, _rend.guid);
127
147
  }
148
+
149
+ /** this is the material that we copied and that has the reflection probe */
150
+ const copy = cached?.copy;
151
+
128
152
  _rend.sharedMaterials[i] = copy;
129
153
  }
130
154
  }
@@ -134,7 +158,7 @@ export class ReflectionProbe extends Behaviour {
134
158
  if (rendererCache) {
135
159
  for (let i = 0; i < rendererCache.length; i++) {
136
160
  const cached = rendererCache[i];
137
- _rend.sharedMaterials[i] = cached.orig;
161
+ _rend.sharedMaterials[i] = cached.material;
138
162
  }
139
163
  }
140
164
  }
@@ -219,6 +219,8 @@ export class Renderer extends Behaviour implements IRenderer {
219
219
  return lm !== null && lm !== undefined;
220
220
  }
221
221
 
222
+ allowProgressiveLoading : boolean = true;
223
+
222
224
  awake() {
223
225
  this.clearInstancingState();
224
226
 
@@ -457,7 +459,7 @@ export class Renderer extends Behaviour implements IRenderer {
457
459
  onBeforeRenderThree(_renderer, _scene, _camera, _geometry, material, _group) {
458
460
 
459
461
  // progressive load before rendering so we only load textures for visible materials
460
- if (!suppressProgressiveLoading && material._didRequestTextureLOD === undefined) {
462
+ if (!suppressProgressiveLoading && material._didRequestTextureLOD === undefined && this.allowProgressiveLoading) {
461
463
  material._didRequestTextureLOD = 0;
462
464
  if (debugProgressiveLoading) {
463
465
  console.log("Load material LOD (with delay)", material.name);
@@ -542,7 +544,7 @@ export class Renderer extends Behaviour implements IRenderer {
542
544
  // handle reflection probe
543
545
  this._reflectionProbe = null;
544
546
  if (this.reflectionProbeUsage !== ReflectionProbeUsage.Off) {
545
- // if(this.gameObject.name.includes("Tank_Case_Jewlery") === false) return;
547
+ if(!this.probeAnchor) return;
546
548
  const obj = this.probeAnchor || this.gameObject;
547
549
  const isAnchor = this.probeAnchor ? true : false;
548
550
  this._reflectionProbe = ReflectionProbe.get(obj, this.context, isAnchor);
@@ -87,6 +87,8 @@ export class WebXR extends Behaviour {
87
87
  if (!WebXR.XRSupported) {
88
88
  console.warn("WebXR is not supported on this device");
89
89
  }
90
+ else
91
+ webXR.__internalAwake();
90
92
  const vrButton = VRButton.createButton(webXR.context.renderer);
91
93
  vrButton.classList.add('webxr-ar-button');
92
94
  vrButton.classList.add('webxr-button');
@@ -98,12 +100,14 @@ export class WebXR extends Behaviour {
98
100
  }
99
101
 
100
102
  public static createARButton(webXR: WebXR, opts?: CreateButtonOptions): HTMLButtonElement {
103
+ webXR.__internalAwake();
101
104
  const domOverlayRoot = webXR.webAR?.getAROverlayContainer();
102
105
  const features: any = {};
103
106
  if (domOverlayRoot) {
104
107
  features.domOverlay = { root: domOverlayRoot };
105
108
  features.optionalFeatures = ['hit-test', 'dom-overlay'];
106
109
  }
110
+ else console.warn("No dom overlay root found, AR will not work");
107
111
  const arButton = ARButton.createButton(webXR.context.renderer, features);
108
112
  arButton.classList.add('webxr-ar-button');
109
113
  arButton.classList.add('webxr-button');
@@ -126,7 +130,7 @@ export class WebXR extends Behaviour {
126
130
  }
127
131
 
128
132
  public get Rig(): Object3D {
129
- if(!this.rig) this.ensureRig();
133
+ if (!this.rig) this.ensureRig();
130
134
  return this.rig;
131
135
  }
132
136
 
@@ -184,6 +188,7 @@ export class WebXR extends Behaviour {
184
188
  const sync = GameObject.addNewComponent(this.gameObject, WebXRSync, false) as WebXRSync;
185
189
  sync.webXR = this;
186
190
  }
191
+ this.webAR = new WebAR(this);
187
192
  }
188
193
 
189
194
  onEnable() {
@@ -192,7 +197,6 @@ export class WebXR extends Behaviour {
192
197
  this.isInit = true;
193
198
 
194
199
  this.context.renderer.xr.enabled = true;
195
- this.webAR = new WebAR(this);
196
200
 
197
201
  // general WebXR support?
198
202
  const browserSupportsXR = WebXR.XRSupported;
@@ -490,7 +494,7 @@ export class WebAR {
490
494
  getAROverlayContainer(): HTMLElement | null {
491
495
  this.arDomOverlay = this.webxr.context.domElement as HTMLElement;
492
496
  // for react cases we dont have an Engine Element
493
- const element : any = this.arDomOverlay;
497
+ const element: any = this.arDomOverlay;
494
498
  if (element.getAROverlayContainer)
495
499
  this.arOverlayElement = element.getAROverlayContainer();
496
500
  else this.arOverlayElement = this.arDomOverlay;
@@ -523,9 +527,9 @@ export class WebAR {
523
527
  session.requestReferenceSpace('viewer').then((referenceSpace) => {
524
528
  session.requestHitTestSource({ space: referenceSpace }).then((source) => {
525
529
  this.hitTestSource = source;
526
- }).catch((_) => {
530
+ }).catch((err) => {
527
531
  this.noHitTestAvailable = true;
528
- console.warn("WebXR: Hit test not supported");
532
+ console.warn("WebXR: Hit test not supported", err);
529
533
  });
530
534
  });
531
535
 
@@ -544,7 +548,7 @@ export class WebAR {
544
548
  this.reticleParent.matrixAutoUpdate = false;
545
549
  this.reticleParent.add(this.reticle);
546
550
  this.reticleParent.matrix.copy(this.sessionRoot.gameObject.matrixWorld);
547
-
551
+
548
552
  if (this.webxr.scene) {
549
553
  this.context.scene.add(this.reticleParent);
550
554
  // this.context.scene.add(this.reticle);
@@ -583,8 +587,7 @@ export class WebAR {
583
587
  if (this.sessionRoot) {
584
588
  this.sessionRoot.onEnd(this.webxr.Rig, session);
585
589
  }
586
- if (this.arDomOverlay)
587
- {
590
+ if (this.arDomOverlay) {
588
591
  const el = this.arOverlayElement as INeedleEngineComponent;
589
592
  el.onExitAR?.call(el, session);
590
593
  }
@@ -50,9 +50,16 @@ export { OffsetConstraint } from "../OffsetConstraint";
50
50
  export { OrbitControls } from "../OrbitControls";
51
51
  export { ParticleSystemRenderer } from "../ParticleSystem";
52
52
  export { ParticleSystem } from "../ParticleSystem";
53
+ export { Gradient } from "../ParticleSystemModules";
54
+ export { MinMaxCurve } from "../ParticleSystemModules";
55
+ export { MinMaxGradient } from "../ParticleSystemModules";
53
56
  export { MainModule } from "../ParticleSystemModules";
57
+ export { ParticleBurst } from "../ParticleSystemModules";
54
58
  export { EmissionModule } from "../ParticleSystemModules";
59
+ export { ColorOverLifetimeModule } from "../ParticleSystemModules";
60
+ export { SizeOverLifetimeModule } from "../ParticleSystemModules";
55
61
  export { ShapeModule } from "../ParticleSystemModules";
62
+ export { NoiseModule } from "../ParticleSystemModules";
56
63
  export { PlayerColor } from "../PlayerColor";
57
64
  export { ReflectionProbe } from "../ReflectionProbe";
58
65
  export { FieldWithDefault } from "../Renderer";