@configura/babylon-view 1.6.2 → 2.0.0-alpha.10

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 (134) hide show
  1. package/.eslintrc.json +18 -18
  2. package/LICENSE +201 -201
  3. package/README.md +1 -1
  4. package/dist/animation/AnimatableObject.d.ts +8 -8
  5. package/dist/animation/AnimatableObject.js +3 -3
  6. package/dist/animation/animator/Animator.d.ts +33 -33
  7. package/dist/animation/animator/Animator.js +58 -58
  8. package/dist/animation/animator/AnimatorEasing.d.ts +16 -16
  9. package/dist/animation/animator/AnimatorEasing.js +31 -31
  10. package/dist/animation/animator/AnimatorEasingMatrix.d.ts +14 -14
  11. package/dist/animation/animator/AnimatorEasingMatrix.js +16 -16
  12. package/dist/animation/animator/AnimatorHighlight.d.ts +16 -16
  13. package/dist/animation/animator/AnimatorHighlight.js +32 -32
  14. package/dist/animation/animator/AnimatorPointToPoint.d.ts +8 -8
  15. package/dist/animation/animator/AnimatorPointToPoint.js +14 -14
  16. package/dist/animation/animator/AnimatorQueue.d.ts +13 -13
  17. package/dist/animation/animator/AnimatorQueue.js +57 -57
  18. package/dist/animation/animator/AnimatorScale.d.ts +8 -8
  19. package/dist/animation/animator/AnimatorScale.js +13 -13
  20. package/dist/animation/animator/AnimatorSpin.d.ts +10 -10
  21. package/dist/animation/animator/AnimatorSpin.js +13 -13
  22. package/dist/animation/animator/EasingFunctions.d.ts +35 -35
  23. package/dist/animation/animator/EasingFunctions.js +137 -137
  24. package/dist/animation/coordinator/Coordinator.d.ts +28 -28
  25. package/dist/animation/coordinator/Coordinator.js +53 -53
  26. package/dist/animation/coordinator/CoordinatorDropAndSpin.d.ts +22 -22
  27. package/dist/animation/coordinator/CoordinatorDropAndSpin.js +138 -138
  28. package/dist/animation/coordinator/CoordinatorIdentity.d.ts +11 -11
  29. package/dist/animation/coordinator/CoordinatorIdentity.js +14 -14
  30. package/dist/animation/coordinator/CoordinatorNodeQueues.d.ts +18 -18
  31. package/dist/animation/coordinator/CoordinatorNodeQueues.js +50 -50
  32. package/dist/animation/coordinator/CoordinatorPulse.d.ts +21 -21
  33. package/dist/animation/coordinator/CoordinatorPulse.js +47 -47
  34. package/dist/animation/coordinator/CoordinatorPulseBounce.d.ts +14 -14
  35. package/dist/animation/coordinator/CoordinatorPulseBounce.js +35 -35
  36. package/dist/animation/coordinator/CoordinatorPulseHighlight.d.ts +13 -13
  37. package/dist/animation/coordinator/CoordinatorPulseHighlight.js +29 -29
  38. package/dist/animation/coordinator/CoordinatorPulseInflate.d.ts +14 -14
  39. package/dist/animation/coordinator/CoordinatorPulseInflate.js +23 -23
  40. package/dist/camera/CameraCreator.d.ts +5 -5
  41. package/dist/camera/CameraCreator.js +4 -4
  42. package/dist/camera/CfgArcRotateCameraPointersInput.d.ts +26 -26
  43. package/dist/camera/CfgArcRotateCameraPointersInput.js +266 -266
  44. package/dist/camera/CfgOrbitalCamera.d.ts +76 -68
  45. package/dist/camera/CfgOrbitalCamera.js +276 -250
  46. package/dist/camera/CfgOrbitalCameraControlProps.d.ts +12 -6
  47. package/dist/camera/CfgOrbitalCameraControlProps.js +7 -3
  48. package/dist/camera/GradingApplier.d.ts +3 -3
  49. package/dist/camera/GradingApplier.js +48 -48
  50. package/dist/engine/EngineCreator.d.ts +3 -3
  51. package/dist/engine/EngineCreator.js +10 -10
  52. package/dist/geometry/CfgGeometry.d.ts +29 -29
  53. package/dist/geometry/CfgGeometry.js +146 -146
  54. package/dist/geometry/CfgMesh.d.ts +10 -10
  55. package/dist/geometry/CfgMesh.js +38 -38
  56. package/dist/geometry/geoSplitter.d.ts +8 -8
  57. package/dist/geometry/geoSplitter.js +192 -192
  58. package/dist/geometry/stretch/CfgMorphTarget.d.ts +15 -15
  59. package/dist/geometry/stretch/CfgMorphTarget.js +65 -65
  60. package/dist/geometry/stretch/CfgStretchData.d.ts +116 -116
  61. package/dist/geometry/stretch/CfgStretchData.js +350 -350
  62. package/dist/geometry/stretch/CfgStretchMorphGeometry.d.ts +16 -16
  63. package/dist/geometry/stretch/CfgStretchMorphGeometry.js +95 -95
  64. package/dist/index.d.ts +16 -13
  65. package/dist/index.js +16 -13
  66. package/dist/io/CfgHistoryToCameraConfConnector.d.ts +30 -0
  67. package/dist/io/CfgHistoryToCameraConfConnector.js +80 -0
  68. package/dist/io/CfgIOCameraConfConnector.d.ts +36 -0
  69. package/dist/io/CfgIOCameraConfConnector.js +81 -0
  70. package/dist/io/CfgObservableStateToCameraConfConnector.d.ts +11 -0
  71. package/dist/io/CfgObservableStateToCameraConfConnector.js +11 -0
  72. package/dist/io/CfgWindowMessageToCameraConfConnector.d.ts +11 -0
  73. package/dist/io/CfgWindowMessageToCameraConfConnector.js +11 -0
  74. package/dist/light/CfgDirectionalLight.d.ts +8 -8
  75. package/dist/light/CfgDirectionalLight.js +18 -18
  76. package/dist/light/CfgHemisphericLight.d.ts +7 -7
  77. package/dist/light/CfgHemisphericLight.js +17 -17
  78. package/dist/light/CfgPointLight.d.ts +8 -8
  79. package/dist/light/CfgPointLight.js +18 -18
  80. package/dist/light/DefaultLightRig.d.ts +19 -19
  81. package/dist/light/DefaultLightRig.js +77 -77
  82. package/dist/light/LightRigCreator.d.ts +9 -9
  83. package/dist/light/LightRigCreator.js +3 -3
  84. package/dist/material/CfgMaterial.d.ts +68 -68
  85. package/dist/material/CfgMaterial.js +482 -482
  86. package/dist/material/DummyMaterialCreator.d.ts +4 -4
  87. package/dist/material/DummyMaterialCreator.js +15 -15
  88. package/dist/material/material.d.ts +18 -18
  89. package/dist/material/material.js +128 -128
  90. package/dist/material/texture.d.ts +14 -14
  91. package/dist/material/texture.js +306 -306
  92. package/dist/nodes/CfgContentRootNode.d.ts +19 -19
  93. package/dist/nodes/CfgContentRootNode.js +75 -75
  94. package/dist/nodes/CfgDeferredMeshNode.d.ts +55 -55
  95. package/dist/nodes/CfgDeferredMeshNode.js +378 -378
  96. package/dist/nodes/CfgProductNode.d.ts +127 -127
  97. package/dist/nodes/CfgProductNode.js +598 -598
  98. package/dist/nodes/CfgSymNode.d.ts +50 -50
  99. package/dist/nodes/CfgSymNode.js +249 -249
  100. package/dist/nodes/CfgSymRootNode.d.ts +45 -45
  101. package/dist/nodes/CfgSymRootNode.js +229 -229
  102. package/dist/nodes/CfgTransformNode.d.ts +33 -33
  103. package/dist/nodes/CfgTransformNode.js +83 -83
  104. package/dist/scene/SceneCreator.d.ts +6 -6
  105. package/dist/scene/SceneCreator.js +22 -22
  106. package/dist/utilities/CfgBoundingBox.d.ts +21 -21
  107. package/dist/utilities/CfgBoundingBox.js +81 -81
  108. package/dist/utilities/anchor/anchor.d.ts +50 -50
  109. package/dist/utilities/anchor/anchor.js +133 -133
  110. package/dist/utilities/anchor/anchorMap.d.ts +20 -20
  111. package/dist/utilities/anchor/anchorMap.js +111 -111
  112. package/dist/utilities/utilities3D.d.ts +70 -70
  113. package/dist/utilities/utilities3D.js +265 -265
  114. package/dist/utilities/utilitiesColor.d.ts +18 -18
  115. package/dist/utilities/utilitiesColor.js +50 -50
  116. package/dist/utilities/utilitiesImage.d.ts +6 -6
  117. package/dist/utilities/utilitiesImage.js +107 -107
  118. package/dist/utilities/utilitiesSymRootIdentifier.d.ts +7 -7
  119. package/dist/utilities/utilitiesSymRootIdentifier.js +26 -26
  120. package/dist/view/BaseView.d.ts +78 -78
  121. package/dist/view/BaseView.js +303 -303
  122. package/dist/view/BaseViewConfiguration.d.ts +32 -32
  123. package/dist/view/BaseViewConfiguration.js +10 -10
  124. package/dist/view/RenderEnv.d.ts +43 -43
  125. package/dist/view/RenderEnv.js +7 -7
  126. package/dist/view/SingleProductDefaultCameraView.d.ts +37 -34
  127. package/dist/view/SingleProductDefaultCameraView.js +145 -141
  128. package/dist/view/SingleProductDefaultCameraViewConfiguration.d.ts +42 -46
  129. package/dist/view/SingleProductDefaultCameraViewConfiguration.js +11 -11
  130. package/dist/view/SingleProductView.d.ts +44 -42
  131. package/dist/view/SingleProductView.js +212 -207
  132. package/dist/view/SingleProductViewConfiguration.d.ts +32 -32
  133. package/dist/view/SingleProductViewConfiguration.js +19 -19
  134. package/package.json +5 -5
@@ -1,207 +1,212 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { CfgMtrlApplication, CfgMtrlApplicationSource, } from "@configura/web-api";
11
- import { getWaitFramesPromise, Observable } from "@configura/web-utilities";
12
- import { CoordinatorIdentity } from "../animation/coordinator/CoordinatorIdentity.js";
13
- import { CfgProductNode } from "../nodes/CfgProductNode.js";
14
- import { BaseView } from "./BaseView.js";
15
- import { SingleProductViewPhase, } from "./SingleProductViewConfiguration.js";
16
- export class SingleProductView extends BaseView {
17
- constructor(options) {
18
- super(options);
19
- this._scheduledForRemoval = [];
20
- this._viewPhaseObservable = new Observable();
21
- this._currentPhase = SingleProductViewPhase.Idle;
22
- this.notifyPhaseChange = (phase) => {
23
- this._viewPhaseObservable.notifyAll({
24
- previous: this._currentPhase,
25
- current: phase,
26
- });
27
- this._currentPhase = phase;
28
- };
29
- this.clearProduct = () => {
30
- const currentProductNode = this._currentProductNode;
31
- if (currentProductNode !== undefined) {
32
- this.notifyPhaseChange(SingleProductViewPhase.RemovePreviousProduct);
33
- this.scheduleForRemoval(currentProductNode);
34
- this._currentProductNode = undefined;
35
- }
36
- };
37
- this.loadProduct = (applicationAreas, product) => {
38
- this.notifyPhaseChange(SingleProductViewPhase.LoadProductCalled);
39
- const abortController = new AbortController();
40
- const abortSignal = abortController.signal;
41
- const loadingToken = this._loadingObservable.startChildLoading();
42
- const stopLoading = () => {
43
- this._loadingObservable.stopChildLoading(loadingToken);
44
- };
45
- void (() => __awaiter(this, void 0, void 0, function* () {
46
- let isNewProduct = false;
47
- let currentProductNode = this._currentProductNode;
48
- if (currentProductNode === undefined ||
49
- !currentProductNode.product.isBackedBySame(product)) {
50
- this.clearProduct();
51
- this.notifyPhaseChange(SingleProductViewPhase.MakeNewProduct);
52
- currentProductNode = CfgProductNode.make(this._renderEnvironment, product);
53
- this.notifyPhaseChange(SingleProductViewPhase.AddNewProduct);
54
- this._currentProductNode = currentProductNode;
55
- this._contentRoot.add(currentProductNode);
56
- isNewProduct = true;
57
- }
58
- const animationCoordinator = {
59
- coordinator: this._animationCoordinator,
60
- isNewProduct,
61
- };
62
- try {
63
- this.notifyPhaseChange(SingleProductViewPhase.SetModelsAndLoadGeo);
64
- currentProductNode.refreshStretch();
65
- yield currentProductNode.loadGeo(animationCoordinator);
66
- if (isNewProduct) {
67
- // New products needs resizing before rendering the first time
68
- this.notifyPhaseChange(SingleProductViewPhase.HandleSizing);
69
- this.handleSizing(true);
70
- }
71
- if (abortSignal.aborted) {
72
- this.notifyPhaseChange(SingleProductViewPhase.Aborted);
73
- return;
74
- }
75
- if (applicationAreas !== "loading") {
76
- this.notifyPhaseChange(SingleProductViewPhase.SetApplicationAreas);
77
- currentProductNode.setApplicationAreas(applicationAreas.map((a) => CfgMtrlApplication.fromMtrlLikeApplication(CfgMtrlApplicationSource.ApplicationArea, a)));
78
- }
79
- const loadMaterialsPromise = currentProductNode.loadMaterials(animationCoordinator);
80
- const doRenderTemporaryMaterials = yield Promise.race([
81
- (() => __awaiter(this, void 0, void 0, function* () {
82
- yield loadMaterialsPromise;
83
- return false;
84
- }))(),
85
- (() => __awaiter(this, void 0, void 0, function* () {
86
- yield getWaitFramesPromise(10);
87
- return true;
88
- }))(),
89
- ]);
90
- this.notifyPhaseChange(SingleProductViewPhase.ApplyGeo);
91
- yield currentProductNode.applyGeo(animationCoordinator);
92
- // We don't have to wait for this
93
- void this.flushScheduledForRemove(animationCoordinator);
94
- if (abortSignal.aborted) {
95
- this.notifyPhaseChange(SingleProductViewPhase.Aborted);
96
- return;
97
- }
98
- if (!isNewProduct) {
99
- // At this stage, any change in geometry has been applied
100
- this.notifyPhaseChange(SingleProductViewPhase.HandleSizing);
101
- this.handleSizing(false);
102
- }
103
- if (doRenderTemporaryMaterials) {
104
- this.scheduleRerender();
105
- }
106
- if (abortSignal.aborted) {
107
- this.notifyPhaseChange(SingleProductViewPhase.Aborted);
108
- return;
109
- }
110
- this.notifyPhaseChange(SingleProductViewPhase.LoadMaterials);
111
- yield loadMaterialsPromise;
112
- if (abortSignal.aborted) {
113
- this.notifyPhaseChange(SingleProductViewPhase.Aborted);
114
- return;
115
- }
116
- this.notifyPhaseChange(SingleProductViewPhase.ApplyMaterials);
117
- this.pauseRendering();
118
- yield currentProductNode.applyMaterials();
119
- this.resumeRendering();
120
- this.notifyPhaseChange(SingleProductViewPhase.AppliedMaterials);
121
- this.scheduleRerender();
122
- stopLoading();
123
- this.notifyPhaseChange(SingleProductViewPhase.Idle);
124
- }
125
- catch (e) {
126
- this.notifyPhaseChange(SingleProductViewPhase.Error);
127
- this.notifyError(e);
128
- stopLoading();
129
- // Might result in double-unlock of semaphore, this is OK.
130
- this.resumeRendering();
131
- }
132
- }))();
133
- return () => {
134
- abortController.abort();
135
- stopLoading();
136
- };
137
- };
138
- this._animationCoordinator = new CoordinatorIdentity(this, this._viewPhaseObservable);
139
- }
140
- destroy() {
141
- this._animationCoordinator.destroy();
142
- super.destroy();
143
- }
144
- scheduleForRemoval(productNode) {
145
- productNode.destroy();
146
- this._scheduledForRemoval.push(productNode);
147
- }
148
- setConfiguration(configuration) {
149
- const animationCoordinatorCreator = configuration.experimentalAnimationCoordinator;
150
- if (animationCoordinatorCreator !== undefined &&
151
- this._animationCoordinatorCreator !== animationCoordinatorCreator) {
152
- this._animationCoordinatorCreator = animationCoordinatorCreator;
153
- this._animationCoordinator.destroy();
154
- this._animationCoordinator = animationCoordinatorCreator(this, this._viewPhaseObservable);
155
- }
156
- super.setConfiguration(configuration);
157
- }
158
- get currentProductNode() {
159
- return this._currentProductNode;
160
- }
161
- addEventListener(event, listener) {
162
- switch (event) {
163
- case "viewPhase":
164
- this._viewPhaseObservable.listen(listener);
165
- break;
166
- default:
167
- super.addEventListener(event, listener);
168
- }
169
- }
170
- removeEventListener(event, listener) {
171
- switch (event) {
172
- case "viewPhase":
173
- this._viewPhaseObservable.stopListen(listener);
174
- break;
175
- default:
176
- super.removeEventListener(event, listener);
177
- }
178
- }
179
- getNeededFrameRender(time) {
180
- return (super.getNeededFrameRender(time) ||
181
- this._animationCoordinator.willTick(time, this._engine.getDeltaTime()));
182
- }
183
- renderFrame(time) {
184
- this._animationCoordinator.tick(time, this._engine.getDeltaTime());
185
- super.renderFrame(time);
186
- }
187
- flushScheduledForRemove(animationCoordinator) {
188
- return __awaiter(this, void 0, void 0, function* () {
189
- if (this._scheduledForRemoval.length === 0) {
190
- return;
191
- }
192
- const promises = [];
193
- for (;;) {
194
- const productNode = this._scheduledForRemoval.shift();
195
- if (productNode === undefined) {
196
- break;
197
- }
198
- promises.push((() => __awaiter(this, void 0, void 0, function* () {
199
- yield productNode.flushScheduledForRemove(animationCoordinator);
200
- this._contentRoot.remove(true, productNode);
201
- }))());
202
- }
203
- yield Promise.all(promises);
204
- this.notifyPhaseChange(SingleProductViewPhase.RemovedProduct);
205
- });
206
- }
207
- }
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { CfgMtrlApplication, CfgMtrlApplicationSource, } from "@configura/web-api";
11
+ import { getWaitFramesPromise, Observable } from "@configura/web-utilities";
12
+ import { CoordinatorIdentity } from "../animation/coordinator/CoordinatorIdentity.js";
13
+ import { CfgProductNode } from "../nodes/CfgProductNode.js";
14
+ import { BaseView } from "./BaseView.js";
15
+ import { SingleProductViewPhase, } from "./SingleProductViewConfiguration.js";
16
+ export class SingleProductView extends BaseView {
17
+ constructor(options) {
18
+ super(options);
19
+ this._isFirstLoad = true;
20
+ this._scheduledForRemoval = [];
21
+ this._viewPhaseObservable = new Observable();
22
+ this._currentPhase = SingleProductViewPhase.Idle;
23
+ this.notifyPhaseChange = (phase) => {
24
+ this._viewPhaseObservable.notifyAll({
25
+ previous: this._currentPhase,
26
+ current: phase,
27
+ });
28
+ this._currentPhase = phase;
29
+ };
30
+ this.clearProduct = () => {
31
+ const currentProductNode = this._currentProductNode;
32
+ if (currentProductNode !== undefined) {
33
+ this.notifyPhaseChange(SingleProductViewPhase.RemovePreviousProduct);
34
+ this.scheduleForRemoval(currentProductNode);
35
+ this._currentProductNode = undefined;
36
+ }
37
+ };
38
+ this.loadProduct = (applicationAreas, product) => {
39
+ this.notifyPhaseChange(SingleProductViewPhase.LoadProductCalled);
40
+ const abortController = new AbortController();
41
+ const abortSignal = abortController.signal;
42
+ const loadingToken = this._loadingObservable.startChildLoading();
43
+ const stopLoading = () => {
44
+ this._loadingObservable.stopChildLoading(loadingToken);
45
+ };
46
+ void (() => __awaiter(this, void 0, void 0, function* () {
47
+ let isNewProduct = false;
48
+ let currentProductNode = this._currentProductNode;
49
+ if (currentProductNode === undefined ||
50
+ !currentProductNode.product.isBackedBySame(product)) {
51
+ this.clearProduct();
52
+ this.notifyPhaseChange(SingleProductViewPhase.MakeNewProduct);
53
+ currentProductNode = CfgProductNode.make(this._renderEnvironment, product);
54
+ this.notifyPhaseChange(SingleProductViewPhase.AddNewProduct);
55
+ this._currentProductNode = currentProductNode;
56
+ this._contentRoot.add(currentProductNode);
57
+ isNewProduct = true;
58
+ }
59
+ const animationCoordinator = {
60
+ coordinator: this._animationCoordinator,
61
+ isNewProduct,
62
+ };
63
+ try {
64
+ this.notifyPhaseChange(SingleProductViewPhase.SetModelsAndLoadGeo);
65
+ currentProductNode.refreshStretch();
66
+ yield currentProductNode.loadGeo(animationCoordinator);
67
+ if (isNewProduct) {
68
+ // New products needs resizing before rendering the first time
69
+ this.notifyPhaseChange(SingleProductViewPhase.HandleSizing);
70
+ this.handleSizing(true);
71
+ }
72
+ if (abortSignal.aborted) {
73
+ this.notifyPhaseChange(SingleProductViewPhase.Aborted);
74
+ return;
75
+ }
76
+ if (applicationAreas !== "loading") {
77
+ this.notifyPhaseChange(SingleProductViewPhase.SetApplicationAreas);
78
+ currentProductNode.setApplicationAreas(applicationAreas.map((a) => CfgMtrlApplication.fromMtrlLikeApplication(CfgMtrlApplicationSource.ApplicationArea, a)));
79
+ }
80
+ const loadMaterialsPromise = currentProductNode.loadMaterials(animationCoordinator);
81
+ const doRenderTemporaryMaterials = yield Promise.race([
82
+ (() => __awaiter(this, void 0, void 0, function* () {
83
+ yield loadMaterialsPromise;
84
+ return false;
85
+ }))(),
86
+ (() => __awaiter(this, void 0, void 0, function* () {
87
+ yield getWaitFramesPromise(10);
88
+ return true;
89
+ }))(),
90
+ ]);
91
+ this.notifyPhaseChange(SingleProductViewPhase.ApplyGeo);
92
+ yield currentProductNode.applyGeo(animationCoordinator);
93
+ // We don't have to wait for this
94
+ void this.flushScheduledForRemove(animationCoordinator);
95
+ if (abortSignal.aborted) {
96
+ this.notifyPhaseChange(SingleProductViewPhase.Aborted);
97
+ return;
98
+ }
99
+ if (!isNewProduct) {
100
+ // At this stage, any change in geometry has been applied
101
+ this.notifyPhaseChange(SingleProductViewPhase.HandleSizing);
102
+ this.handleSizing(false);
103
+ }
104
+ this._isFirstLoad = false;
105
+ if (doRenderTemporaryMaterials) {
106
+ this.scheduleRerender();
107
+ }
108
+ if (abortSignal.aborted) {
109
+ this.notifyPhaseChange(SingleProductViewPhase.Aborted);
110
+ return;
111
+ }
112
+ this.notifyPhaseChange(SingleProductViewPhase.LoadMaterials);
113
+ yield loadMaterialsPromise;
114
+ if (abortSignal.aborted) {
115
+ this.notifyPhaseChange(SingleProductViewPhase.Aborted);
116
+ return;
117
+ }
118
+ this.notifyPhaseChange(SingleProductViewPhase.ApplyMaterials);
119
+ this.pauseRendering();
120
+ yield currentProductNode.applyMaterials();
121
+ this.resumeRendering();
122
+ this.notifyPhaseChange(SingleProductViewPhase.AppliedMaterials);
123
+ this.scheduleRerender();
124
+ stopLoading();
125
+ this.notifyPhaseChange(SingleProductViewPhase.Idle);
126
+ }
127
+ catch (e) {
128
+ this.notifyPhaseChange(SingleProductViewPhase.Error);
129
+ this.notifyError(e);
130
+ stopLoading();
131
+ // Might result in double-unlock of semaphore, this is OK.
132
+ this.resumeRendering();
133
+ }
134
+ }))();
135
+ return () => {
136
+ abortController.abort();
137
+ stopLoading();
138
+ };
139
+ };
140
+ this._animationCoordinator = new CoordinatorIdentity(this, this._viewPhaseObservable);
141
+ }
142
+ destroy() {
143
+ this._animationCoordinator.destroy();
144
+ super.destroy();
145
+ }
146
+ scheduleForRemoval(productNode) {
147
+ productNode.destroy();
148
+ this._scheduledForRemoval.push(productNode);
149
+ }
150
+ setConfiguration(configuration) {
151
+ const animationCoordinatorCreator = configuration.experimentalAnimationCoordinator;
152
+ if (animationCoordinatorCreator !== undefined &&
153
+ this._animationCoordinatorCreator !== animationCoordinatorCreator) {
154
+ this._animationCoordinatorCreator = animationCoordinatorCreator;
155
+ this._animationCoordinator.destroy();
156
+ this._animationCoordinator = animationCoordinatorCreator(this, this._viewPhaseObservable);
157
+ }
158
+ super.setConfiguration(configuration);
159
+ }
160
+ get currentProductNode() {
161
+ return this._currentProductNode;
162
+ }
163
+ get isFirstLoad() {
164
+ return this._isFirstLoad;
165
+ }
166
+ addEventListener(event, listener) {
167
+ switch (event) {
168
+ case "viewPhase":
169
+ this._viewPhaseObservable.listen(listener);
170
+ break;
171
+ default:
172
+ super.addEventListener(event, listener);
173
+ }
174
+ }
175
+ removeEventListener(event, listener) {
176
+ switch (event) {
177
+ case "viewPhase":
178
+ this._viewPhaseObservable.stopListen(listener);
179
+ break;
180
+ default:
181
+ super.removeEventListener(event, listener);
182
+ }
183
+ }
184
+ getNeededFrameRender(time) {
185
+ return (super.getNeededFrameRender(time) ||
186
+ this._animationCoordinator.willTick(time, this._engine.getDeltaTime()));
187
+ }
188
+ renderFrame(time) {
189
+ this._animationCoordinator.tick(time, this._engine.getDeltaTime());
190
+ super.renderFrame(time);
191
+ }
192
+ flushScheduledForRemove(animationCoordinator) {
193
+ return __awaiter(this, void 0, void 0, function* () {
194
+ if (this._scheduledForRemoval.length === 0) {
195
+ return;
196
+ }
197
+ const promises = [];
198
+ for (;;) {
199
+ const productNode = this._scheduledForRemoval.shift();
200
+ if (productNode === undefined) {
201
+ break;
202
+ }
203
+ promises.push((() => __awaiter(this, void 0, void 0, function* () {
204
+ yield productNode.flushScheduledForRemove(animationCoordinator);
205
+ this._contentRoot.remove(true, productNode);
206
+ }))());
207
+ }
208
+ yield Promise.all(promises);
209
+ this.notifyPhaseChange(SingleProductViewPhase.RemovedProduct);
210
+ });
211
+ }
212
+ }
@@ -1,33 +1,33 @@
1
- import { EventListener } from "@configura/web-utilities";
2
- import { CoordinatorCreator } from "../animation/coordinator/Coordinator.js";
3
- import { BaseViewConfiguration, BaseViewEventMap } from "./BaseViewConfiguration.js";
4
- export interface SingleProductViewConfiguration extends BaseViewConfiguration {
5
- experimentalAnimationCoordinator?: CoordinatorCreator;
6
- }
7
- export interface SingleProductViewEventMap extends BaseViewEventMap {
8
- viewPhase: SingleProductViewPhaseEvent;
9
- }
10
- export declare type SingleProductViewEventListener<K extends keyof SingleProductViewEventMap> = EventListener<SingleProductViewEventMap, K>;
11
- export declare type SingleProductViewPhaseEvent = {
12
- previous: SingleProductViewPhase;
13
- current: SingleProductViewPhase;
14
- };
15
- export declare enum SingleProductViewPhase {
16
- Idle = "Idle",
17
- LoadProductCalled = "LoadProductCalled",
18
- RemovePreviousProduct = "RemovePreviousProduct",
19
- RemovedProduct = "RemovedProduct",
20
- MakeNewProduct = "MakeNewProduct",
21
- AddNewProduct = "AddNewProduct",
22
- SetApplicationAreas = "SetApplicationAreas",
23
- SetModelsAndLoadGeo = "SetModelsAndLoadGeo",
24
- GeoLoaded = "GeoLoaded",
25
- ApplyGeo = "ApplyGeo",
26
- HandleSizing = "HandleSizing",
27
- LoadMaterials = "LoadMaterials",
28
- ApplyMaterials = "ApplyMaterials",
29
- AppliedMaterials = "AppliedMaterials",
30
- Aborted = "Aborted",
31
- Error = "Error"
32
- }
1
+ import { EventListener } from "@configura/web-utilities";
2
+ import { CoordinatorCreator } from "../animation/coordinator/Coordinator.js";
3
+ import { BaseViewConfiguration, BaseViewEventMap } from "./BaseViewConfiguration.js";
4
+ export interface SingleProductViewConfiguration extends BaseViewConfiguration {
5
+ experimentalAnimationCoordinator?: CoordinatorCreator;
6
+ }
7
+ export interface SingleProductViewEventMap extends BaseViewEventMap {
8
+ viewPhase: SingleProductViewPhaseEvent;
9
+ }
10
+ export declare type SingleProductViewEventListener<K extends keyof SingleProductViewEventMap> = EventListener<SingleProductViewEventMap, K>;
11
+ export declare type SingleProductViewPhaseEvent = {
12
+ previous: SingleProductViewPhase;
13
+ current: SingleProductViewPhase;
14
+ };
15
+ export declare enum SingleProductViewPhase {
16
+ Idle = "Idle",
17
+ LoadProductCalled = "LoadProductCalled",
18
+ RemovePreviousProduct = "RemovePreviousProduct",
19
+ RemovedProduct = "RemovedProduct",
20
+ MakeNewProduct = "MakeNewProduct",
21
+ AddNewProduct = "AddNewProduct",
22
+ SetApplicationAreas = "SetApplicationAreas",
23
+ SetModelsAndLoadGeo = "SetModelsAndLoadGeo",
24
+ GeoLoaded = "GeoLoaded",
25
+ ApplyGeo = "ApplyGeo",
26
+ HandleSizing = "HandleSizing",
27
+ LoadMaterials = "LoadMaterials",
28
+ ApplyMaterials = "ApplyMaterials",
29
+ AppliedMaterials = "AppliedMaterials",
30
+ Aborted = "Aborted",
31
+ Error = "Error"
32
+ }
33
33
  //# sourceMappingURL=SingleProductViewConfiguration.d.ts.map
@@ -1,19 +1,19 @@
1
- export var SingleProductViewPhase;
2
- (function (SingleProductViewPhase) {
3
- SingleProductViewPhase["Idle"] = "Idle";
4
- SingleProductViewPhase["LoadProductCalled"] = "LoadProductCalled";
5
- SingleProductViewPhase["RemovePreviousProduct"] = "RemovePreviousProduct";
6
- SingleProductViewPhase["RemovedProduct"] = "RemovedProduct";
7
- SingleProductViewPhase["MakeNewProduct"] = "MakeNewProduct";
8
- SingleProductViewPhase["AddNewProduct"] = "AddNewProduct";
9
- SingleProductViewPhase["SetApplicationAreas"] = "SetApplicationAreas";
10
- SingleProductViewPhase["SetModelsAndLoadGeo"] = "SetModelsAndLoadGeo";
11
- SingleProductViewPhase["GeoLoaded"] = "GeoLoaded";
12
- SingleProductViewPhase["ApplyGeo"] = "ApplyGeo";
13
- SingleProductViewPhase["HandleSizing"] = "HandleSizing";
14
- SingleProductViewPhase["LoadMaterials"] = "LoadMaterials";
15
- SingleProductViewPhase["ApplyMaterials"] = "ApplyMaterials";
16
- SingleProductViewPhase["AppliedMaterials"] = "AppliedMaterials";
17
- SingleProductViewPhase["Aborted"] = "Aborted";
18
- SingleProductViewPhase["Error"] = "Error";
19
- })(SingleProductViewPhase || (SingleProductViewPhase = {}));
1
+ export var SingleProductViewPhase;
2
+ (function (SingleProductViewPhase) {
3
+ SingleProductViewPhase["Idle"] = "Idle";
4
+ SingleProductViewPhase["LoadProductCalled"] = "LoadProductCalled";
5
+ SingleProductViewPhase["RemovePreviousProduct"] = "RemovePreviousProduct";
6
+ SingleProductViewPhase["RemovedProduct"] = "RemovedProduct";
7
+ SingleProductViewPhase["MakeNewProduct"] = "MakeNewProduct";
8
+ SingleProductViewPhase["AddNewProduct"] = "AddNewProduct";
9
+ SingleProductViewPhase["SetApplicationAreas"] = "SetApplicationAreas";
10
+ SingleProductViewPhase["SetModelsAndLoadGeo"] = "SetModelsAndLoadGeo";
11
+ SingleProductViewPhase["GeoLoaded"] = "GeoLoaded";
12
+ SingleProductViewPhase["ApplyGeo"] = "ApplyGeo";
13
+ SingleProductViewPhase["HandleSizing"] = "HandleSizing";
14
+ SingleProductViewPhase["LoadMaterials"] = "LoadMaterials";
15
+ SingleProductViewPhase["ApplyMaterials"] = "ApplyMaterials";
16
+ SingleProductViewPhase["AppliedMaterials"] = "AppliedMaterials";
17
+ SingleProductViewPhase["Aborted"] = "Aborted";
18
+ SingleProductViewPhase["Error"] = "Error";
19
+ })(SingleProductViewPhase || (SingleProductViewPhase = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@configura/babylon-view",
3
- "version": "1.6.2",
3
+ "version": "2.0.0-alpha.10",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -16,16 +16,16 @@
16
16
  },
17
17
  "dependencies": {
18
18
  "@babylonjs/core": "4.2.0",
19
- "@configura/web-core": "1.6.2",
20
- "@configura/web-utilities": "1.6.2"
19
+ "@configura/web-core": "2.0.0-alpha.10",
20
+ "@configura/web-utilities": "2.0.0-alpha.10"
21
21
  },
22
22
  "devDependencies": {
23
- "@configura/web-api": "1.6.2",
23
+ "@configura/web-api": "2.0.0-alpha.10",
24
24
  "del-cli": "^3.0.0",
25
25
  "typescript": "4.2"
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"
29
29
  },
30
- "gitHead": "7d15c3d75c39de15271da189ed1d0d5bfa719d79"
30
+ "gitHead": "77f9cbe7521be3fd58a139bdc93167a349ef384f"
31
31
  }