@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.
- package/CHANGELOG.md +18 -0
- package/dist/needle-engine.d.ts +332 -126
- package/dist/needle-engine.js +401 -401
- package/dist/needle-engine.js.map +4 -4
- package/dist/needle-engine.min.js +53 -53
- package/dist/needle-engine.min.js.map +4 -4
- package/lib/engine/engine_element.js +1 -1
- package/lib/engine/engine_element.js.map +1 -1
- package/lib/engine/engine_element_loading.js +6 -1
- package/lib/engine/engine_element_loading.js.map +1 -1
- package/lib/engine/engine_gizmos.d.ts +8 -21
- package/lib/engine/engine_gizmos.js +51 -5
- package/lib/engine/engine_gizmos.js.map +1 -1
- package/lib/engine/engine_math.d.ts +9 -6
- package/lib/engine/engine_math.js +9 -0
- package/lib/engine/engine_math.js.map +1 -1
- package/lib/engine/engine_physics.js +14 -6
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_serialization_core.js +2 -0
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/engine_setup.d.ts +3 -0
- package/lib/engine/engine_setup.js +15 -0
- package/lib/engine/engine_setup.js.map +1 -1
- package/lib/engine/engine_three_utils.d.ts +16 -1
- package/lib/engine/engine_three_utils.js +94 -54
- package/lib/engine/engine_three_utils.js.map +1 -1
- package/lib/engine/engine_types.d.ts +6 -0
- package/lib/engine/engine_types.js.map +1 -1
- package/lib/engine/engine_utils.d.ts +1 -0
- package/lib/engine/engine_utils.js +3 -0
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine-components/AnimationCurve.js +20 -5
- package/lib/engine-components/AnimationCurve.js.map +1 -1
- package/lib/engine-components/BoxHelperComponent.js +9 -10
- package/lib/engine-components/BoxHelperComponent.js.map +1 -1
- package/lib/engine-components/Light.d.ts +2 -0
- package/lib/engine-components/Light.js +33 -9
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/ParticleSystem.d.ts +29 -26
- package/lib/engine-components/ParticleSystem.js +349 -187
- package/lib/engine-components/ParticleSystem.js.map +1 -1
- package/lib/engine-components/ParticleSystemModules.d.ts +243 -64
- package/lib/engine-components/ParticleSystemModules.js +722 -153
- package/lib/engine-components/ParticleSystemModules.js.map +1 -1
- package/lib/engine-components/ReflectionProbe.js +29 -11
- package/lib/engine-components/ReflectionProbe.js.map +1 -1
- package/lib/engine-components/Renderer.d.ts +1 -0
- package/lib/engine-components/Renderer.js +4 -2
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/WebXR.js +8 -3
- package/lib/engine-components/WebXR.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +7 -0
- package/lib/engine-components/codegen/components.js +7 -0
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/package.json +4 -2
- package/src/engine/codegen/register_types.js +28 -0
- package/src/engine/dist/engine_three_utils.js +279 -0
- package/src/engine/engine_element.ts +1 -1
- package/src/engine/engine_element_loading.ts +5 -1
- package/src/engine/engine_gizmos.ts +58 -6
- package/src/engine/engine_math.ts +19 -6
- package/src/engine/engine_physics.ts +17 -7
- package/src/engine/engine_serialization_core.ts +1 -0
- package/src/engine/engine_setup.ts +25 -2
- package/src/engine/engine_three_utils.ts +103 -62
- package/src/engine/engine_types.ts +8 -1
- package/src/engine/engine_utils.ts +5 -0
- package/src/engine-components/AnimationCurve.ts +25 -11
- package/src/engine-components/BoxHelperComponent.ts +12 -15
- package/src/engine-components/Light.ts +39 -8
- package/src/engine-components/ParticleSystem.ts +395 -199
- package/src/engine-components/ParticleSystemModules.ts +638 -152
- package/src/engine-components/ReflectionProbe.ts +37 -13
- package/src/engine-components/Renderer.ts +4 -2
- package/src/engine-components/WebXR.ts +11 -8
- package/src/engine-components/codegen/components.ts +7 -0
- package/src/engine/dist/engine_physics.js +0 -739
- package/src/engine/dist/engine_setup.js +0 -777
- package/src/engine-components/dist/CharacterController.js +0 -123
- 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<{
|
|
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
|
|
113
|
-
if (!
|
|
114
|
-
if (
|
|
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
|
-
|
|
123
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
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";
|