@combeenation/3d-viewer 12.4.1 → 13.0.1
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/dist/lib-cjs/buildinfo.json +1 -1
- package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
- package/dist/lib-cjs/index.d.ts +63 -63
- package/dist/lib-cjs/index.js +81 -114
- package/dist/lib-cjs/index.js.map +1 -1
- package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.d.ts +10 -0
- package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.js +132 -0
- package/dist/lib-cjs/internal/cbn-custom-babylon-loader-plugin.js.map +1 -0
- package/dist/lib-cjs/internal/cloning-helper.d.ts +19 -0
- package/dist/lib-cjs/internal/cloning-helper.js +164 -0
- package/dist/lib-cjs/internal/cloning-helper.js.map +1 -0
- package/dist/lib-cjs/internal/device-helper.d.ts +9 -0
- package/dist/lib-cjs/{api/util/deviceHelper.js → internal/device-helper.js} +7 -11
- package/dist/lib-cjs/internal/device-helper.js.map +1 -0
- package/dist/lib-cjs/internal/geometry-helper.d.ts +21 -0
- package/dist/lib-cjs/{api/util/geometryHelper.js → internal/geometry-helper.js} +58 -25
- package/dist/lib-cjs/internal/geometry-helper.js.map +1 -0
- package/dist/lib-cjs/internal/metadata-helper.d.ts +26 -0
- package/dist/lib-cjs/internal/metadata-helper.js +51 -0
- package/dist/lib-cjs/internal/metadata-helper.js.map +1 -0
- package/dist/lib-cjs/internal/paintable-helper.d.ts +40 -0
- package/dist/lib-cjs/internal/paintable-helper.js +287 -0
- package/dist/lib-cjs/internal/paintable-helper.js.map +1 -0
- package/dist/lib-cjs/internal/tags-helper.d.ts +12 -0
- package/dist/lib-cjs/internal/tags-helper.js +38 -0
- package/dist/lib-cjs/internal/tags-helper.js.map +1 -0
- package/dist/lib-cjs/manager/camera-manager.d.ts +51 -0
- package/dist/lib-cjs/manager/camera-manager.js +154 -0
- package/dist/lib-cjs/manager/camera-manager.js.map +1 -0
- package/dist/lib-cjs/manager/debug-manager.d.ts +60 -0
- package/dist/lib-cjs/manager/debug-manager.js +218 -0
- package/dist/lib-cjs/manager/debug-manager.js.map +1 -0
- package/dist/lib-cjs/manager/event-manager.d.ts +52 -0
- package/dist/lib-cjs/manager/event-manager.js +72 -0
- package/dist/lib-cjs/manager/event-manager.js.map +1 -0
- package/dist/lib-cjs/{api/manager/gltfExportManager.d.ts → manager/gltf-export-manager.d.ts} +29 -34
- package/dist/lib-cjs/{api/manager/gltfExportManager.js → manager/gltf-export-manager.js} +103 -124
- package/dist/lib-cjs/manager/gltf-export-manager.js.map +1 -0
- package/dist/lib-cjs/manager/material-manager.d.ts +35 -0
- package/dist/lib-cjs/manager/material-manager.js +126 -0
- package/dist/lib-cjs/manager/material-manager.js.map +1 -0
- package/dist/lib-cjs/manager/model-manager.d.ts +145 -0
- package/dist/lib-cjs/manager/model-manager.js +383 -0
- package/dist/lib-cjs/manager/model-manager.js.map +1 -0
- package/dist/lib-cjs/manager/parameter-manager.d.ts +210 -0
- package/dist/lib-cjs/manager/parameter-manager.js +515 -0
- package/dist/lib-cjs/manager/parameter-manager.js.map +1 -0
- package/dist/lib-cjs/manager/scene-manager.d.ts +45 -0
- package/dist/lib-cjs/manager/scene-manager.js +65 -0
- package/dist/lib-cjs/manager/scene-manager.js.map +1 -0
- package/dist/lib-cjs/manager/screenshot-manager.d.ts +36 -0
- package/dist/lib-cjs/manager/screenshot-manager.js +40 -0
- package/dist/lib-cjs/manager/screenshot-manager.js.map +1 -0
- package/dist/lib-cjs/manager/texture-manager.d.ts +12 -0
- package/dist/lib-cjs/manager/texture-manager.js +44 -0
- package/dist/lib-cjs/manager/texture-manager.js.map +1 -0
- package/dist/lib-cjs/{api/classes/viewerError.d.ts → viewer-error.d.ts} +6 -1
- package/dist/lib-cjs/{api/classes/viewerError.js → viewer-error.js} +7 -2
- package/dist/lib-cjs/viewer-error.js.map +1 -0
- package/dist/lib-cjs/viewer.d.ts +117 -0
- package/dist/lib-cjs/viewer.js +222 -0
- package/dist/lib-cjs/viewer.js.map +1 -0
- package/package.json +10 -11
- package/src/dev.ts +14 -37
- package/src/{types.d.ts → global-types.d.ts} +8 -18
- package/src/index.ts +79 -113
- package/src/internal/cbn-custom-babylon-loader-plugin.ts +159 -0
- package/src/internal/cloning-helper.ts +225 -0
- package/src/internal/device-helper.ts +25 -0
- package/src/{api/util/geometryHelper.ts → internal/geometry-helper.ts} +63 -24
- package/src/internal/metadata-helper.ts +63 -0
- package/src/internal/paintable-helper.ts +310 -0
- package/src/internal/tags-helper.ts +41 -0
- package/src/manager/camera-manager.ts +236 -0
- package/src/manager/debug-manager.ts +245 -0
- package/src/manager/event-manager.ts +72 -0
- package/src/{api/manager/gltfExportManager.ts → manager/gltf-export-manager.ts} +132 -125
- package/src/manager/material-manager.ts +135 -0
- package/src/manager/model-manager.ts +458 -0
- package/src/manager/parameter-manager.ts +652 -0
- package/src/manager/scene-manager.ts +101 -0
- package/src/manager/screenshot-manager.ts +59 -0
- package/src/manager/texture-manager.ts +32 -0
- package/src/{api/classes/viewerError.ts → viewer-error.ts} +6 -1
- package/src/viewer.ts +296 -0
- package/dist/lib-cjs/api/classes/animationInterface.d.ts +0 -8
- package/dist/lib-cjs/api/classes/animationInterface.js +0 -3
- package/dist/lib-cjs/api/classes/animationInterface.js.map +0 -1
- package/dist/lib-cjs/api/classes/dottedPath.d.ts +0 -79
- package/dist/lib-cjs/api/classes/dottedPath.js +0 -167
- package/dist/lib-cjs/api/classes/dottedPath.js.map +0 -1
- package/dist/lib-cjs/api/classes/element.d.ts +0 -153
- package/dist/lib-cjs/api/classes/element.js +0 -703
- package/dist/lib-cjs/api/classes/element.js.map +0 -1
- package/dist/lib-cjs/api/classes/event.d.ts +0 -401
- package/dist/lib-cjs/api/classes/event.js +0 -425
- package/dist/lib-cjs/api/classes/event.js.map +0 -1
- package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +0 -26
- package/dist/lib-cjs/api/classes/eventBroadcaster.js +0 -50
- package/dist/lib-cjs/api/classes/eventBroadcaster.js.map +0 -1
- package/dist/lib-cjs/api/classes/fuzzyMap.d.ts +0 -7
- package/dist/lib-cjs/api/classes/fuzzyMap.js +0 -22
- package/dist/lib-cjs/api/classes/fuzzyMap.js.map +0 -1
- package/dist/lib-cjs/api/classes/parameter.d.ts +0 -410
- package/dist/lib-cjs/api/classes/parameter.js +0 -643
- package/dist/lib-cjs/api/classes/parameter.js.map +0 -1
- package/dist/lib-cjs/api/classes/parameterObservable.d.ts +0 -36
- package/dist/lib-cjs/api/classes/parameterObservable.js +0 -73
- package/dist/lib-cjs/api/classes/parameterObservable.js.map +0 -1
- package/dist/lib-cjs/api/classes/parameterizable.d.ts +0 -15
- package/dist/lib-cjs/api/classes/parameterizable.js +0 -103
- package/dist/lib-cjs/api/classes/parameterizable.js.map +0 -1
- package/dist/lib-cjs/api/classes/placementAnimation.d.ts +0 -45
- package/dist/lib-cjs/api/classes/placementAnimation.js +0 -177
- package/dist/lib-cjs/api/classes/placementAnimation.js.map +0 -1
- package/dist/lib-cjs/api/classes/variant.d.ts +0 -261
- package/dist/lib-cjs/api/classes/variant.js +0 -873
- package/dist/lib-cjs/api/classes/variant.js.map +0 -1
- package/dist/lib-cjs/api/classes/variantInstance.d.ts +0 -53
- package/dist/lib-cjs/api/classes/variantInstance.js +0 -126
- package/dist/lib-cjs/api/classes/variantInstance.js.map +0 -1
- package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +0 -17
- package/dist/lib-cjs/api/classes/variantParameterizable.js +0 -87
- package/dist/lib-cjs/api/classes/variantParameterizable.js.map +0 -1
- package/dist/lib-cjs/api/classes/viewer.d.ts +0 -215
- package/dist/lib-cjs/api/classes/viewer.js +0 -709
- package/dist/lib-cjs/api/classes/viewer.js.map +0 -1
- package/dist/lib-cjs/api/classes/viewerError.js.map +0 -1
- package/dist/lib-cjs/api/classes/viewerLight.d.ts +0 -66
- package/dist/lib-cjs/api/classes/viewerLight.js +0 -345
- package/dist/lib-cjs/api/classes/viewerLight.js.map +0 -1
- package/dist/lib-cjs/api/internal/lensRendering.d.ts +0 -8
- package/dist/lib-cjs/api/internal/lensRendering.js +0 -12
- package/dist/lib-cjs/api/internal/lensRendering.js.map +0 -1
- package/dist/lib-cjs/api/internal/sceneSetup.d.ts +0 -13
- package/dist/lib-cjs/api/internal/sceneSetup.js +0 -228
- package/dist/lib-cjs/api/internal/sceneSetup.js.map +0 -1
- package/dist/lib-cjs/api/manager/animationManager.d.ts +0 -30
- package/dist/lib-cjs/api/manager/animationManager.js +0 -127
- package/dist/lib-cjs/api/manager/animationManager.js.map +0 -1
- package/dist/lib-cjs/api/manager/gltfExportManager.js.map +0 -1
- package/dist/lib-cjs/api/manager/sceneManager.d.ts +0 -33
- package/dist/lib-cjs/api/manager/sceneManager.js +0 -129
- package/dist/lib-cjs/api/manager/sceneManager.js.map +0 -1
- package/dist/lib-cjs/api/manager/tagManager.d.ts +0 -118
- package/dist/lib-cjs/api/manager/tagManager.js +0 -531
- package/dist/lib-cjs/api/manager/tagManager.js.map +0 -1
- package/dist/lib-cjs/api/manager/textureLoadManager.d.ts +0 -22
- package/dist/lib-cjs/api/manager/textureLoadManager.js +0 -108
- package/dist/lib-cjs/api/manager/textureLoadManager.js.map +0 -1
- package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +0 -106
- package/dist/lib-cjs/api/manager/variantInstanceManager.js +0 -291
- package/dist/lib-cjs/api/manager/variantInstanceManager.js.map +0 -1
- package/dist/lib-cjs/api/store/specStorage.d.ts +0 -32
- package/dist/lib-cjs/api/store/specStorage.js +0 -66
- package/dist/lib-cjs/api/store/specStorage.js.map +0 -1
- package/dist/lib-cjs/api/util/babylonHelper.d.ts +0 -238
- package/dist/lib-cjs/api/util/babylonHelper.js +0 -826
- package/dist/lib-cjs/api/util/babylonHelper.js.map +0 -1
- package/dist/lib-cjs/api/util/debugHelper.d.ts +0 -9
- package/dist/lib-cjs/api/util/debugHelper.js +0 -94
- package/dist/lib-cjs/api/util/debugHelper.js.map +0 -1
- package/dist/lib-cjs/api/util/deviceHelper.d.ts +0 -9
- package/dist/lib-cjs/api/util/deviceHelper.js.map +0 -1
- package/dist/lib-cjs/api/util/geometryHelper.d.ts +0 -17
- package/dist/lib-cjs/api/util/geometryHelper.js.map +0 -1
- package/dist/lib-cjs/api/util/globalTypes.d.ts +0 -490
- package/dist/lib-cjs/api/util/globalTypes.js +0 -2
- package/dist/lib-cjs/api/util/globalTypes.js.map +0 -1
- package/dist/lib-cjs/api/util/resourceHelper.d.ts +0 -58
- package/dist/lib-cjs/api/util/resourceHelper.js +0 -215
- package/dist/lib-cjs/api/util/resourceHelper.js.map +0 -1
- package/dist/lib-cjs/api/util/sceneLoaderHelper.d.ts +0 -58
- package/dist/lib-cjs/api/util/sceneLoaderHelper.js +0 -229
- package/dist/lib-cjs/api/util/sceneLoaderHelper.js.map +0 -1
- package/dist/lib-cjs/api/util/stringHelper.d.ts +0 -13
- package/dist/lib-cjs/api/util/stringHelper.js +0 -33
- package/dist/lib-cjs/api/util/stringHelper.js.map +0 -1
- package/dist/lib-cjs/api/util/structureHelper.d.ts +0 -9
- package/dist/lib-cjs/api/util/structureHelper.js +0 -58
- package/dist/lib-cjs/api/util/structureHelper.js.map +0 -1
- package/src/api/classes/animationInterface.ts +0 -10
- package/src/api/classes/dottedPath.ts +0 -181
- package/src/api/classes/element.ts +0 -766
- package/src/api/classes/event.ts +0 -457
- package/src/api/classes/eventBroadcaster.ts +0 -52
- package/src/api/classes/fuzzyMap.ts +0 -21
- package/src/api/classes/parameter.ts +0 -686
- package/src/api/classes/parameterObservable.ts +0 -73
- package/src/api/classes/parameterizable.ts +0 -87
- package/src/api/classes/placementAnimation.ts +0 -162
- package/src/api/classes/variant.ts +0 -965
- package/src/api/classes/variantInstance.ts +0 -123
- package/src/api/classes/variantParameterizable.ts +0 -83
- package/src/api/classes/viewer.ts +0 -751
- package/src/api/classes/viewerLight.ts +0 -335
- package/src/api/internal/debugViewer.ts +0 -90
- package/src/api/internal/lensRendering.ts +0 -9
- package/src/api/internal/sceneSetup.ts +0 -208
- package/src/api/manager/animationManager.ts +0 -143
- package/src/api/manager/sceneManager.ts +0 -134
- package/src/api/manager/tagManager.ts +0 -572
- package/src/api/manager/textureLoadManager.ts +0 -107
- package/src/api/manager/variantInstanceManager.ts +0 -306
- package/src/api/store/specStorage.ts +0 -68
- package/src/api/util/babylonHelper.ts +0 -915
- package/src/api/util/debugHelper.ts +0 -121
- package/src/api/util/deviceHelper.ts +0 -31
- package/src/api/util/globalTypes.ts +0 -566
- package/src/api/util/resourceHelper.ts +0 -201
- package/src/api/util/sceneLoaderHelper.ts +0 -247
- package/src/api/util/stringHelper.ts +0 -30
- package/src/api/util/structureHelper.ts +0 -62
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { AnimationInterface } from '../classes/animationInterface';
|
|
2
|
-
import { PlacementAnimation } from '../classes/placementAnimation';
|
|
3
|
-
import { Animation as BabylonAnimation } from '@babylonjs/core/Animations/animation';
|
|
4
|
-
import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
|
|
5
|
-
import { Scene as BabylonScene } from '@babylonjs/core/scene';
|
|
6
|
-
import { Nullable } from '@babylonjs/core/types';
|
|
7
|
-
//import { CustomEase } from 'gsap/CustomEase';
|
|
8
|
-
//import { ExpoScaleEase, RoughEase, SlowMo } from 'gsap/EasePack';
|
|
9
|
-
import { remove } from 'lodash-es';
|
|
10
|
-
|
|
11
|
-
//gsap.registerPlugin( CustomEase, ExpoScaleEase, RoughEase, SlowMo );
|
|
12
|
-
|
|
13
|
-
export class AnimationManager {
|
|
14
|
-
public animations: AnimationInterface[] = [];
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Constructor.
|
|
18
|
-
*/
|
|
19
|
-
protected constructor(protected scene: BabylonScene) {}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Creates an {@link AnimationManager} based on given Babylon.js scene.
|
|
23
|
-
*/
|
|
24
|
-
public static async create(scene: BabylonScene): Promise<AnimationManager> {
|
|
25
|
-
return new AnimationManager(scene);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @deprecated Use viewer.moveCameraTo().
|
|
30
|
-
*/
|
|
31
|
-
public resetCamera(animate: boolean = false) {
|
|
32
|
-
//TODO currently only works for arcrotate. are there any other cameras?
|
|
33
|
-
const activeCamera = this.scene.activeCamera as Nullable<ArcRotateCamera>;
|
|
34
|
-
if (!activeCamera) {
|
|
35
|
-
throw new Error('There is no active camera');
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const initAlpha = activeCamera.metadata.alpha;
|
|
39
|
-
const initBeta = activeCamera.metadata.beta;
|
|
40
|
-
const initRadius = activeCamera.metadata.radius;
|
|
41
|
-
|
|
42
|
-
if (animate) {
|
|
43
|
-
this.animateArcRotateCamera(initAlpha, initBeta, initRadius);
|
|
44
|
-
} else {
|
|
45
|
-
activeCamera.alpha = initAlpha;
|
|
46
|
-
activeCamera.beta = initBeta;
|
|
47
|
-
activeCamera.radius = initRadius;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @deprecated Use viewer.moveCameraTo().
|
|
53
|
-
*/
|
|
54
|
-
public animateArcRotateCamera(targetAlpha: number, targetBeta: number, targetRadius: number) {
|
|
55
|
-
const activeCamera = this.scene.activeCamera as Nullable<ArcRotateCamera>;
|
|
56
|
-
if (!activeCamera) {
|
|
57
|
-
throw new Error('There is no active camera');
|
|
58
|
-
}
|
|
59
|
-
const alphaAnimation = new BabylonAnimation(
|
|
60
|
-
'alphaAnimation',
|
|
61
|
-
'alpha',
|
|
62
|
-
30,
|
|
63
|
-
BabylonAnimation.ANIMATIONTYPE_FLOAT,
|
|
64
|
-
BabylonAnimation.ANIMATIONLOOPMODE_CONSTANT
|
|
65
|
-
);
|
|
66
|
-
const betaAnimation = new BabylonAnimation(
|
|
67
|
-
'betaAnimation',
|
|
68
|
-
'beta',
|
|
69
|
-
30,
|
|
70
|
-
BabylonAnimation.ANIMATIONTYPE_FLOAT,
|
|
71
|
-
BabylonAnimation.ANIMATIONLOOPMODE_CONSTANT
|
|
72
|
-
);
|
|
73
|
-
const radiusAnimation = new BabylonAnimation(
|
|
74
|
-
'radiusAnimation',
|
|
75
|
-
'radius',
|
|
76
|
-
30,
|
|
77
|
-
BabylonAnimation.ANIMATIONTYPE_FLOAT,
|
|
78
|
-
BabylonAnimation.ANIMATIONLOOPMODE_CONSTANT
|
|
79
|
-
);
|
|
80
|
-
alphaAnimation.setKeys([
|
|
81
|
-
{
|
|
82
|
-
frame: 0,
|
|
83
|
-
value: activeCamera.alpha,
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
frame: 100,
|
|
87
|
-
value: targetAlpha,
|
|
88
|
-
},
|
|
89
|
-
]);
|
|
90
|
-
betaAnimation.setKeys([
|
|
91
|
-
{
|
|
92
|
-
frame: 0,
|
|
93
|
-
value: activeCamera.beta,
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
frame: 100,
|
|
97
|
-
value: targetBeta,
|
|
98
|
-
},
|
|
99
|
-
]);
|
|
100
|
-
radiusAnimation.setKeys([
|
|
101
|
-
{
|
|
102
|
-
frame: 0,
|
|
103
|
-
value: activeCamera.radius,
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
frame: 100,
|
|
107
|
-
value: targetRadius,
|
|
108
|
-
},
|
|
109
|
-
]);
|
|
110
|
-
activeCamera.animations.push(alphaAnimation);
|
|
111
|
-
activeCamera.animations.push(betaAnimation);
|
|
112
|
-
activeCamera.animations.push(radiusAnimation);
|
|
113
|
-
|
|
114
|
-
const animation = this.scene.beginAnimation(activeCamera, 0, 100, false, 10);
|
|
115
|
-
animation.disposeOnEnd = true;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Stops and kills all running animations.
|
|
120
|
-
*/
|
|
121
|
-
public killAllAnimations() {
|
|
122
|
-
this.animations.forEach(animation => animation.kill());
|
|
123
|
-
this.animations = [];
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* @see {@link PlacementAnimation.play}
|
|
128
|
-
*/
|
|
129
|
-
public async animateToPlacement(
|
|
130
|
-
mutable: object,
|
|
131
|
-
placement: PlacementDefinition | string,
|
|
132
|
-
animation?: AnimationDefinition | string
|
|
133
|
-
): Promise<AnimationInterface> {
|
|
134
|
-
const _animation = new PlacementAnimation(mutable, placement, animation);
|
|
135
|
-
this.animations.push(_animation);
|
|
136
|
-
const animationPromise = _animation.play();
|
|
137
|
-
animationPromise.then(a => {
|
|
138
|
-
remove(this.animations, _a => _a === a);
|
|
139
|
-
a.kill();
|
|
140
|
-
});
|
|
141
|
-
return await animationPromise;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { Event } from '../classes/event';
|
|
2
|
-
import { Parameter } from '../classes/parameter';
|
|
3
|
-
import { ParameterObservable } from '../classes/parameterObservable';
|
|
4
|
-
import { SpecStorage } from '../store/specStorage';
|
|
5
|
-
import { changeEnvironment } from '../util/babylonHelper';
|
|
6
|
-
import { mergeMaps } from '../util/resourceHelper';
|
|
7
|
-
import { TextureLoadManager } from './textureLoadManager';
|
|
8
|
-
import { Camera } from '@babylonjs/core/Cameras/camera';
|
|
9
|
-
import { Scene as BabylonScene } from '@babylonjs/core/scene';
|
|
10
|
-
import { cloneDeep, concat, merge } from 'lodash-es';
|
|
11
|
-
|
|
12
|
-
export class SceneManager extends ParameterObservable {
|
|
13
|
-
protected readonly _parameterObservers: Map<string, ParameterObserver[]> = new Map();
|
|
14
|
-
|
|
15
|
-
protected _textureLoadManager: TextureLoadManager | null = null;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Constructor.
|
|
19
|
-
*/
|
|
20
|
-
protected constructor(public scene: BabylonScene) {
|
|
21
|
-
super();
|
|
22
|
-
this._textureLoadManager = TextureLoadManager.create(scene);
|
|
23
|
-
this.addParameterObservers();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Creates a {@link SceneManager} based on given Babylon.js scene.
|
|
28
|
-
*/
|
|
29
|
-
public static async create(scene: BabylonScene): Promise<SceneManager> {
|
|
30
|
-
const sceneManager = new SceneManager(scene);
|
|
31
|
-
|
|
32
|
-
await sceneManager.bootstrapParameters(SpecStorage.get<ParameterBag>('scene.parameters'));
|
|
33
|
-
return sceneManager;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* The active `Camera`.
|
|
38
|
-
*/
|
|
39
|
-
get activeCamera(): Camera {
|
|
40
|
-
if (!this.scene.activeCamera) {
|
|
41
|
-
throw new Error('Scene has no active camera.');
|
|
42
|
-
}
|
|
43
|
-
return this.scene.activeCamera;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Places the given {@link ParameterBag} in the {@link SceneManager}'s parameters, replaces all patterns in the
|
|
48
|
-
* {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
|
|
49
|
-
*
|
|
50
|
-
* @emit {@link Event.SCENE_PARAMETER_COMMITTED}
|
|
51
|
-
*/
|
|
52
|
-
public async commitParameters(parameters?: ParameterBag): Promise<SceneManager> {
|
|
53
|
-
if (!parameters) {
|
|
54
|
-
parameters = {};
|
|
55
|
-
}
|
|
56
|
-
const oldParameters = cloneDeep(this.parameters);
|
|
57
|
-
merge(this.parameters, parameters);
|
|
58
|
-
|
|
59
|
-
// handle parameter observers
|
|
60
|
-
let observerPromises: Promise<ParameterObserverResult>[] = [];
|
|
61
|
-
for (const parameter in this.parameters) {
|
|
62
|
-
const oldParameterValue = oldParameters[parameter];
|
|
63
|
-
const newParameterValue = this.parameters[parameter];
|
|
64
|
-
this.assertParameter(Parameter.declarations, parameter, newParameterValue);
|
|
65
|
-
if (oldParameterValue === newParameterValue) {
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
// parameter changed
|
|
69
|
-
const parameterObservers = mergeMaps(this._parameterObservers, this.parameterObservers);
|
|
70
|
-
if (parameterObservers.has(parameter)) {
|
|
71
|
-
const observers = parameterObservers.get(parameter)!;
|
|
72
|
-
observerPromises = concat(
|
|
73
|
-
observerPromises,
|
|
74
|
-
observers.map(observer => {
|
|
75
|
-
const observerPromise = observer(this, oldParameterValue, newParameterValue);
|
|
76
|
-
return Promise.resolve(observerPromise).then(() => {
|
|
77
|
-
this.broadcastEvent(
|
|
78
|
-
Event.SCENE_PARAMETER_COMMITTED,
|
|
79
|
-
this,
|
|
80
|
-
parameter,
|
|
81
|
-
oldParameterValue,
|
|
82
|
-
newParameterValue
|
|
83
|
-
);
|
|
84
|
-
});
|
|
85
|
-
})
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
await Promise.all(observerPromises);
|
|
90
|
-
return this;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
protected addParameterObservers(): SceneManager {
|
|
94
|
-
const handleEnvParamChange = async (
|
|
95
|
-
manager: SceneManager,
|
|
96
|
-
oldValue: Undefinable<ParameterValue>,
|
|
97
|
-
newValue: ParameterValue
|
|
98
|
-
) => {
|
|
99
|
-
const params = {
|
|
100
|
-
color: manager.parameters[Parameter.ENVIRONMENT_COLOR],
|
|
101
|
-
intensity: manager.parameters[Parameter.ENVIRONMENT_INTENSITY],
|
|
102
|
-
env: manager.parameters[Parameter.ENVIRONMENT],
|
|
103
|
-
background: manager.parameters[Parameter.ENVIRONMENT_BACKGROUND],
|
|
104
|
-
rotation: manager.parameters[Parameter.ENVIRONMENT_ROTATION],
|
|
105
|
-
useDefault: manager.parameters[Parameter.ENVIRONMENT_USEDEFAULT],
|
|
106
|
-
};
|
|
107
|
-
const envDef: EnvironmentDefinition = {
|
|
108
|
-
environmentColor: params.color ? Parameter.parseColor(params.color) : undefined,
|
|
109
|
-
environmentIntensity: params.intensity !== undefined ? Parameter.parseNumber(params.intensity) : undefined,
|
|
110
|
-
environment: params.env ? (params.env as string) : undefined,
|
|
111
|
-
environmentBackground: params.background ? (params.background as string) : undefined,
|
|
112
|
-
environmentRotation: params.rotation !== undefined ? Parameter.parseNumber(params.rotation) : undefined,
|
|
113
|
-
environmentUseDefault: params.useDefault ? Parameter.parseBoolean(params.useDefault) : undefined,
|
|
114
|
-
};
|
|
115
|
-
changeEnvironment(manager.scene, envDef);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
this._parameterObservers.set(Parameter.ENVIRONMENT_COLOR, [handleEnvParamChange]);
|
|
119
|
-
this._parameterObservers.set(Parameter.ENVIRONMENT_ROTATION, [handleEnvParamChange]);
|
|
120
|
-
this._parameterObservers.set(Parameter.ENVIRONMENT_USEDEFAULT, [handleEnvParamChange]);
|
|
121
|
-
this._parameterObservers.set(Parameter.ENVIRONMENT, [handleEnvParamChange]);
|
|
122
|
-
this._parameterObservers.set(Parameter.ENVIRONMENT_BACKGROUND, [handleEnvParamChange]);
|
|
123
|
-
this._parameterObservers.set(Parameter.ENVIRONMENT_INTENSITY, [handleEnvParamChange]);
|
|
124
|
-
return this;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Bootstrapping for parameters. It sets the `parametersInitialized` to true for all ancestors.
|
|
129
|
-
*/
|
|
130
|
-
protected async bootstrapParameters(parameters?: ParameterBag): Promise<SceneManager> {
|
|
131
|
-
await this.commitParameters(merge(cloneDeep(this.parameters), parameters));
|
|
132
|
-
return this;
|
|
133
|
-
}
|
|
134
|
-
}
|