@needle-tools/engine 3.2.5-alpha.1 → 3.2.7-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/CHANGELOG.md +13 -0
- package/dist/needle-engine.js +6145 -6019
- package/dist/needle-engine.min.js +275 -275
- package/dist/needle-engine.umd.cjs +273 -273
- package/lib/engine/api.d.ts +3 -1
- package/lib/engine/api.js +2 -1
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/engine_context.d.ts +4 -2
- package/lib/engine/engine_context.js +5 -3
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_element_loading.js +0 -1
- package/lib/engine/engine_element_loading.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.js +4 -2
- package/lib/engine/engine_mainloop_utils.js.map +1 -1
- package/lib/engine/engine_physics.js +24 -1
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_scenelighting.d.ts +68 -0
- package/lib/engine/{engine_rendererdata.js → engine_scenelighting.js} +94 -24
- package/lib/engine/engine_scenelighting.js.map +1 -0
- package/lib/engine/engine_serialization_core.d.ts +5 -8
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +4 -1
- package/lib/engine/extensions/NEEDLE_lighting_settings.js +45 -21
- package/lib/engine/extensions/NEEDLE_lighting_settings.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +3 -3
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js.map +1 -1
- package/lib/engine/extensions/index.d.ts +5 -0
- package/lib/engine/extensions/index.js +6 -0
- package/lib/engine/extensions/index.js.map +1 -0
- package/lib/engine-components/Component.js +28 -3
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/Renderer.js +1 -1
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/SceneSwitcher.d.ts +2 -0
- package/lib/engine-components/SceneSwitcher.js +16 -4
- package/lib/engine-components/SceneSwitcher.js.map +1 -1
- package/lib/engine-components/api.d.ts +1 -0
- package/lib/engine-components/api.js +1 -0
- package/lib/engine-components/api.js.map +1 -1
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +1 -1
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +1 -1
- package/lib/engine-components/postprocessing/VolumeParameter.js +7 -6
- package/lib/engine-components/postprocessing/VolumeParameter.js.map +1 -1
- package/lib/engine-components/webxr/index.d.ts +1 -0
- package/lib/engine-components/webxr/index.js +1 -0
- package/lib/engine-components/webxr/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/engine/api.ts +3 -1
- package/src/engine/codegen/register_types.js +2 -2
- package/src/engine/engine_context.ts +5 -3
- package/src/engine/engine_element_loading.ts +0 -1
- package/src/engine/engine_mainloop_utils.ts +4 -2
- package/src/engine/engine_physics.ts +20 -1
- package/src/engine/{engine_rendererdata.ts → engine_scenelighting.ts} +95 -24
- package/src/engine/engine_serialization_core.ts +7 -8
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +53 -26
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +3 -3
- package/src/engine/extensions/index.ts +5 -0
- package/src/engine-components/Component.ts +28 -3
- package/src/engine-components/Renderer.ts +1 -1
- package/src/engine-components/SceneSwitcher.ts +14 -4
- package/src/engine-components/api.ts +1 -0
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +1 -1
- package/src/engine-components/postprocessing/VolumeParameter.ts +7 -6
- package/src/engine-components/webxr/index.ts +1 -0
- package/lib/engine/engine_rendererdata.d.ts +0 -49
- package/lib/engine/engine_rendererdata.js.map +0 -1
|
@@ -9,6 +9,7 @@ import { addNewComponent, destroyComponentInstance, findObjectOfType, findObject
|
|
|
9
9
|
import { findByGuid, destroy, InstantiateOptions, instantiate, HideFlags, foreachComponent, markAsInstancedRendered, isActiveInHierarchy, isActiveSelf, isUsingInstancing, setActive, isDestroyed } from "../engine/engine_gameobject";
|
|
10
10
|
|
|
11
11
|
import { Euler, Object3D, Quaternion, Scene, Vector3 } from "three";
|
|
12
|
+
import { showBalloonWarning, isDevEnvironment } from "../engine/debug";
|
|
12
13
|
|
|
13
14
|
// export interface ISerializationCallbackReceiver {
|
|
14
15
|
// onBeforeSerialize?(): object | void;
|
|
@@ -470,7 +471,19 @@ export class Component implements IComponent, EventTarget {
|
|
|
470
471
|
|
|
471
472
|
/** @internal */
|
|
472
473
|
__internalEnable(): boolean {
|
|
473
|
-
if (this.
|
|
474
|
+
if (this.__destroyed) {
|
|
475
|
+
if (isDevEnvironment()) {
|
|
476
|
+
console.warn("[Needle Engine Dev] Trying to enable destroyed component");
|
|
477
|
+
}
|
|
478
|
+
return false;
|
|
479
|
+
}
|
|
480
|
+
// Don't change enable before awake
|
|
481
|
+
// But a user can change enable during awake
|
|
482
|
+
if (!this.__didAwake) return false;
|
|
483
|
+
if (this.__didEnable) {
|
|
484
|
+
this.__isEnabled = true;
|
|
485
|
+
return false;
|
|
486
|
+
}
|
|
474
487
|
// console.trace("INTERNAL ENABLE");
|
|
475
488
|
this.__didEnable = true;
|
|
476
489
|
this.onEnable();
|
|
@@ -480,7 +493,13 @@ export class Component implements IComponent, EventTarget {
|
|
|
480
493
|
|
|
481
494
|
/** @internal */
|
|
482
495
|
__internalDisable() {
|
|
483
|
-
|
|
496
|
+
// Don't change enable before awake
|
|
497
|
+
// But a user can change enable during awake
|
|
498
|
+
if (!this.__didAwake) return;
|
|
499
|
+
if (!this.__didEnable) {
|
|
500
|
+
this.__isEnabled = false;
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
484
503
|
this.__didEnable = false;
|
|
485
504
|
this.onDisable();
|
|
486
505
|
this.__isEnabled = false;
|
|
@@ -496,9 +515,15 @@ export class Component implements IComponent, EventTarget {
|
|
|
496
515
|
|
|
497
516
|
|
|
498
517
|
get enabled(): boolean {
|
|
499
|
-
return this.__isEnabled
|
|
518
|
+
return typeof this.__isEnabled === "boolean" ? this.__isEnabled : true; // if it has no enabled field it is always enabled
|
|
500
519
|
}
|
|
501
520
|
set enabled(val: boolean) {
|
|
521
|
+
if (this.__destroyed) {
|
|
522
|
+
if (isDevEnvironment()) {
|
|
523
|
+
console.warn(`[Needle Engine Dev] Trying to ${val ? "enable" : "disable"} destroyed component`);
|
|
524
|
+
}
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
502
527
|
// when called from animationclip we receive numbers
|
|
503
528
|
// due to interpolation they can be anything between 0 and 1
|
|
504
529
|
if (typeof val === "number") {
|
|
@@ -617,7 +617,7 @@ export class Renderer extends Behaviour implements IRenderer {
|
|
|
617
617
|
|
|
618
618
|
if (material.envMapIntensity !== undefined) {
|
|
619
619
|
const factor = this.hasLightmap ? Math.PI : 1;
|
|
620
|
-
material.envMapIntensity = Math.max(0, this.context.
|
|
620
|
+
material.envMapIntensity = Math.max(0, this.context.sceneLighting.environmentIntensity / factor);
|
|
621
621
|
}
|
|
622
622
|
// if (this._reflectionProbe?.texture) {
|
|
623
623
|
// material.envMap = this._reflectionProbe.texture;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { AssetReference } from "../engine/engine_addressables";
|
|
2
|
-
import { NeedleEngineHTMLElement } from "../engine/engine_element";
|
|
3
2
|
import { InputEvents } from "../engine/engine_input";
|
|
4
3
|
import { isLocalNetwork } from "../engine/engine_networking_utils";
|
|
5
4
|
import { ContextEvent, ContextRegistry } from "../engine/engine_context_registry";
|
|
@@ -11,9 +10,14 @@ const debug = getParam("debugsceneswitcher");
|
|
|
11
10
|
|
|
12
11
|
const ENGINE_ELEMENT_SCENE_ATTRIBUTE_NAME = "scene";
|
|
13
12
|
|
|
14
|
-
ContextRegistry.registerCallback(ContextEvent.ContextRegistered, _ => {
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
ContextRegistry.registerCallback(ContextEvent.ContextRegistered, async _ => {
|
|
14
|
+
// We need to defer import to not get issues with circular dependencies
|
|
15
|
+
import("../engine/engine_element").then(res => {
|
|
16
|
+
const webcomponent = res.NeedleEngineHTMLElement;
|
|
17
|
+
if(debug) console.log("SceneSwitcher: registering scene attribute", webcomponent.observedAttributes);
|
|
18
|
+
if (!webcomponent.observedAttributes.includes(ENGINE_ELEMENT_SCENE_ATTRIBUTE_NAME))
|
|
19
|
+
webcomponent.observedAttributes.push(ENGINE_ELEMENT_SCENE_ATTRIBUTE_NAME);
|
|
20
|
+
});
|
|
17
21
|
});
|
|
18
22
|
|
|
19
23
|
const couldNotLoadScenePromise = Promise.resolve(false);
|
|
@@ -42,6 +46,10 @@ export class SceneSwitcher extends Behaviour {
|
|
|
42
46
|
@serializable()
|
|
43
47
|
useSwipe: boolean = true;
|
|
44
48
|
|
|
49
|
+
/** when enabled will automatically apply the environment scene lights */
|
|
50
|
+
@serializable()
|
|
51
|
+
useSceneLighting: boolean = true;
|
|
52
|
+
|
|
45
53
|
|
|
46
54
|
private _currentIndex: number = -1;
|
|
47
55
|
private _currentScene: AssetReference | undefined = undefined;
|
|
@@ -191,6 +199,8 @@ export class SceneSwitcher extends Behaviour {
|
|
|
191
199
|
}
|
|
192
200
|
if (this._currentIndex === index) {
|
|
193
201
|
GameObject.add(scene.asset, this.gameObject);
|
|
202
|
+
if (this.useSceneLighting)
|
|
203
|
+
this.context.sceneLighting.enable(scene)
|
|
194
204
|
// save the loaded scene as an url parameter
|
|
195
205
|
if (this.queryParameterName?.length)
|
|
196
206
|
setParamWithoutReload(this.queryParameterName, index.toString(), this.useHistory);
|
|
@@ -4,6 +4,7 @@ export * from "./codegen/components";
|
|
|
4
4
|
// We dont want to export everything in the extensions
|
|
5
5
|
export * from "./js-extensions/RGBAColor";
|
|
6
6
|
export * from "./js-extensions/Object3D";
|
|
7
|
+
export * from "./XRFlag"
|
|
7
8
|
|
|
8
9
|
export * from "./export"
|
|
9
10
|
export * from "./postprocessing"
|
|
@@ -5,7 +5,7 @@ import { BloomEffect, BrightnessContrastEffect, ChromaticAberrationEffect, Depth
|
|
|
5
5
|
import { showBalloonWarning } from "../../engine/debug/debug";
|
|
6
6
|
import { Camera } from "../Camera";
|
|
7
7
|
import { PostProcessingEffect } from "./PostProcessingEffect";
|
|
8
|
-
import { Constructor } from "../../engine/
|
|
8
|
+
import { Constructor } from "../../engine/engine_types";
|
|
9
9
|
|
|
10
10
|
const debug = getParam("debugpost");
|
|
11
11
|
|
|
@@ -17,7 +17,7 @@ export class VolumeParameter {
|
|
|
17
17
|
set overrideState(val: boolean) {
|
|
18
18
|
if (this._active === val) return;
|
|
19
19
|
this._active = val;
|
|
20
|
-
const value = val ? this.
|
|
20
|
+
const value = val ? this._valueRaw : this._defaultValue;
|
|
21
21
|
this.processValue(value, true);
|
|
22
22
|
}
|
|
23
23
|
private _active: boolean = true;
|
|
@@ -26,13 +26,13 @@ export class VolumeParameter {
|
|
|
26
26
|
|
|
27
27
|
@serializable()
|
|
28
28
|
get value() {
|
|
29
|
-
return this.
|
|
29
|
+
return this._valueRaw;
|
|
30
30
|
}
|
|
31
31
|
set value(val: any) {
|
|
32
32
|
this.processValue(val, false);
|
|
33
33
|
}
|
|
34
34
|
private _value: any;
|
|
35
|
-
private
|
|
35
|
+
private _valueRaw?: any;
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
set defaultValue(val: any) {
|
|
@@ -43,7 +43,7 @@ export class VolumeParameter {
|
|
|
43
43
|
|
|
44
44
|
/** enforce the value to be set and onValueChanged to be called if assigned */
|
|
45
45
|
__init() {
|
|
46
|
-
this.processValue(this.
|
|
46
|
+
this.processValue(this._valueRaw, true);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/** called to modify a changing value before it is saved */
|
|
@@ -65,9 +65,10 @@ export class VolumeParameter {
|
|
|
65
65
|
// with the value that is expected to received when the parameter is disabled)
|
|
66
66
|
this._value = this._defaultValue;
|
|
67
67
|
val = this._defaultValue;
|
|
68
|
+
this._valueRaw = val;
|
|
68
69
|
}
|
|
69
70
|
else {
|
|
70
|
-
this.
|
|
71
|
+
this._valueRaw = val;
|
|
71
72
|
if (this._active && this.valueProcessor)
|
|
72
73
|
val = this.valueProcessor(val);
|
|
73
74
|
this._value = val;
|
|
@@ -80,7 +81,7 @@ export class VolumeParameter {
|
|
|
80
81
|
|
|
81
82
|
private testIfValueChanged(newValue: any): boolean {
|
|
82
83
|
|
|
83
|
-
if (this.
|
|
84
|
+
if (this._valueRaw === newValue)
|
|
84
85
|
return false;
|
|
85
86
|
|
|
86
87
|
// TODO: may need checks for colors or vectors (check by xyz,rgb because they might come in as anonymous objects via editor modifications)
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Vector4, WebGLCubeRenderTarget, Texture, LightProbe } from "three";
|
|
2
|
-
import { Context } from "./engine_setup";
|
|
3
|
-
import { SceneLightSettings } from "./extensions/NEEDLE_lighting_settings";
|
|
4
|
-
import { SourceIdentifier } from "./engine_types";
|
|
5
|
-
export declare type SphericalHarmonicsData = {
|
|
6
|
-
array: number[];
|
|
7
|
-
texture: WebGLCubeRenderTarget | Texture;
|
|
8
|
-
lightProbe?: LightProbe;
|
|
9
|
-
};
|
|
10
|
-
export declare enum AmbientMode {
|
|
11
|
-
Skybox = 0,
|
|
12
|
-
Trilight = 1,
|
|
13
|
-
Flat = 3,
|
|
14
|
-
Custom = 4
|
|
15
|
-
}
|
|
16
|
-
export declare enum DefaultReflectionMode {
|
|
17
|
-
Skybox = 0,
|
|
18
|
-
Custom = 1
|
|
19
|
-
}
|
|
20
|
-
export declare class RendererData {
|
|
21
|
-
private context;
|
|
22
|
-
constructor(context: Context);
|
|
23
|
-
private _currentReflectionId?;
|
|
24
|
-
private sceneLightSettings?;
|
|
25
|
-
private preUpdate;
|
|
26
|
-
private _timevec4;
|
|
27
|
-
get timeVec4(): Vector4;
|
|
28
|
-
get environmentIntensity(): number;
|
|
29
|
-
registerSceneLightSettings(sceneLightSettings: SceneLightSettings): void;
|
|
30
|
-
registerReflection(sourceId: SourceIdentifier, reflectionTexture: Texture): void;
|
|
31
|
-
getReflection(sourceId: SourceIdentifier): LightData | null | undefined;
|
|
32
|
-
enableReflection(sourceId: SourceIdentifier): void;
|
|
33
|
-
disableReflection(sourceId?: SourceIdentifier): void;
|
|
34
|
-
getSceneLightingData(sourceId: SourceIdentifier): Promise<SphericalHarmonicsData>;
|
|
35
|
-
private _waitPromise?;
|
|
36
|
-
private _lighting;
|
|
37
|
-
}
|
|
38
|
-
export declare class LightData {
|
|
39
|
-
get Source(): Texture;
|
|
40
|
-
get Array(): number[] | undefined;
|
|
41
|
-
private _context;
|
|
42
|
-
private _source;
|
|
43
|
-
private _sphericalHarmonics;
|
|
44
|
-
private _sphericalHarmonicsArray?;
|
|
45
|
-
private _ambientScale;
|
|
46
|
-
private _lightProbe?;
|
|
47
|
-
constructor(context: Context, tex: Texture, ambientScale?: number);
|
|
48
|
-
getSphericalHarmonicsArray(intensityFactor?: number): SphericalHarmonicsData | null;
|
|
49
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engine_rendererdata.js","sourceRoot":"","sources":["../../src/engine/engine_rendererdata.ts"],"names":[],"mappings":"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"}
|