@smarterplan/ngx-smarterplan-core 1.2.0 → 1.2.2

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 (57) hide show
  1. package/esm2020/lib/matterport-extensions/hsl-loader/HlsLoader.mjs +68 -0
  2. package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +51 -0
  3. package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +62 -0
  4. package/esm2020/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +190 -0
  5. package/esm2020/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +85 -0
  6. package/esm2020/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
  7. package/esm2020/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
  8. package/esm2020/lib/matterport-extensions/tv-player/TvPlayer.mjs +98 -0
  9. package/esm2020/lib/matterport-extensions/video-renderer/VideoRenderer.mjs +64 -0
  10. package/esm2020/lib/services/matterport.service.mjs +68 -9
  11. package/esm2020/lib/services/models/object3D.service.mjs +1 -1
  12. package/esm2020/lib/services/models/poi.service.mjs +1 -1
  13. package/esm2020/lib/services/viewer.service.mjs +1 -1
  14. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +511 -30
  15. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  16. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +511 -30
  17. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  18. package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts +26 -0
  19. package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts.map +1 -0
  20. package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts +31 -0
  21. package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts.map +1 -0
  22. package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts +38 -0
  23. package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts.map +1 -0
  24. package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts +42 -0
  25. package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts.map +1 -0
  26. package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts +46 -0
  27. package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts.map +1 -0
  28. package/lib/matterport-extensions/tv-player/TvPlayer.d.ts +26 -0
  29. package/lib/matterport-extensions/tv-player/TvPlayer.d.ts.map +1 -0
  30. package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts +26 -0
  31. package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts.map +1 -0
  32. package/lib/services/matterport.service.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/esm2020/lib/matterport-extensions/common/src/SceneComponent.mjs +0 -128
  35. package/esm2020/lib/matterport-extensions/common/src/sdk-components/OrientedBox.mjs +0 -145
  36. package/esm2020/lib/matterport-extensions/core/src/index.mjs +0 -4
  37. package/esm2020/lib/matterport-extensions/core/src/observable/Observable.mjs +0 -167
  38. package/esm2020/lib/matterport-extensions/core/src/observable/ObservableValue.mjs +0 -38
  39. package/esm2020/lib/matterport-extensions/core/src/subscription/ISubscription.mjs +0 -2
  40. package/esm2020/lib/matterport-extensions/core/src/types.mjs +0 -2
  41. package/esm2020/lib/matterport-extensions/core/src/util/index.mjs +0 -165
  42. package/lib/matterport-extensions/common/src/SceneComponent.d.ts +0 -388
  43. package/lib/matterport-extensions/common/src/SceneComponent.d.ts.map +0 -1
  44. package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts +0 -44
  45. package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts.map +0 -1
  46. package/lib/matterport-extensions/core/src/index.d.ts +0 -4
  47. package/lib/matterport-extensions/core/src/index.d.ts.map +0 -1
  48. package/lib/matterport-extensions/core/src/observable/Observable.d.ts +0 -94
  49. package/lib/matterport-extensions/core/src/observable/Observable.d.ts.map +0 -1
  50. package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts +0 -21
  51. package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts.map +0 -1
  52. package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts +0 -26
  53. package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts.map +0 -1
  54. package/lib/matterport-extensions/core/src/types.d.ts +0 -10
  55. package/lib/matterport-extensions/core/src/types.d.ts.map +0 -1
  56. package/lib/matterport-extensions/core/src/util/index.d.ts +0 -31
  57. package/lib/matterport-extensions/core/src/util/index.d.ts.map +0 -1
@@ -0,0 +1,68 @@
1
+ import { SceneComponent } from './../scene-component/SceneComponent';
2
+ // @ts-ignore
3
+ import Hls from 'hls.js';
4
+ export class HlsLoader extends SceneComponent {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.video = null;
8
+ this.texture = null;
9
+ this.hls = null;
10
+ this.inputs = {
11
+ src: './../assets/video/121222-04.mp4',
12
+ enabled: true,
13
+ };
14
+ this.outputs = {
15
+ video: null,
16
+ aspect: 1,
17
+ };
18
+ }
19
+ onInit(videoTexture) {
20
+ this.outputs.video = videoTexture;
21
+ this.outputs.aspect = 720 / 480;
22
+ if (this.inputs.enabled) {
23
+ this.setupStream();
24
+ }
25
+ }
26
+ onInputsUpdated() {
27
+ this.setupStream();
28
+ }
29
+ onDestroy() {
30
+ this.releaseResources();
31
+ }
32
+ createVideoElement() {
33
+ const video = document.createElement('video');
34
+ video.crossOrigin = 'anonymous';
35
+ video.setAttribute('height', '480');
36
+ video.setAttribute('width', '720');
37
+ video.volume = 0.1;
38
+ return video;
39
+ }
40
+ setupStream() {
41
+ this.releaseResources();
42
+ if (this.inputs.enabled) {
43
+ this.video = this.createVideoElement();
44
+ this.hls = new Hls();
45
+ this.hls.loadSource(this.inputs.src);
46
+ this.hls.attachMedia(this.video);
47
+ this.hls.on(Hls.Events.MANIFEST_PARSED, () => {
48
+ this.outputs.video = this.video;
49
+ });
50
+ }
51
+ }
52
+ releaseResources() {
53
+ if (this.hls) {
54
+ this.hls.destroy();
55
+ this.hls = null;
56
+ }
57
+ if (this.texture) {
58
+ this.texture.dispose();
59
+ this.texture = null;
60
+ this.outputs.video = null;
61
+ }
62
+ }
63
+ }
64
+ export const hlsLoaderType = 'mp.hlsLoader';
65
+ export function makeHlsLoader() {
66
+ return new HlsLoader();
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGxzTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvaHNsLWxvYWRlci9IbHNMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RixhQUFhO0FBQ2IsT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDO0FBWXpCLE1BQU0sT0FBTyxTQUFVLFNBQVEsY0FBYztJQUE3Qzs7UUFDVSxVQUFLLEdBQTRCLElBQUksQ0FBQztRQUN0QyxZQUFPLEdBQXdCLElBQUksQ0FBQztRQUNwQyxRQUFHLEdBQWUsSUFBSSxDQUFDO1FBRXRCLFdBQU0sR0FBVztZQUN4QixHQUFHLEVBQUUsaUNBQWlDO1lBQ3RDLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQTtRQUVRLFlBQU8sR0FBRztZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLE1BQU0sRUFBRSxDQUFDO1NBQ0MsQ0FBQztJQXNEZixDQUFDO0lBcERVLE1BQU0sQ0FBQyxZQUEyQjtRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFDLEdBQUcsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFUSxlQUFlO1FBRXRCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRVEsU0FBUztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDaEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ2pCO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQztBQUM1QyxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjZW5lQ29tcG9uZW50LCBDb21wb25lbnRPdXRwdXQgfSBmcm9tICcuLy4uL3NjZW5lLWNvbXBvbmVudC9TY2VuZUNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZpZGVvVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcclxuLy8gQHRzLWlnbm9yZVxyXG5pbXBvcnQgSGxzIGZyb20gJ2hscy5qcyc7XHJcblxyXG50eXBlIElucHV0cyA9IHtcclxuICBzcmM6IHN0cmluZztcclxuICBlbmFibGVkOiBib29sZWFuO1xyXG59O1xyXG5cclxudHlwZSBPdXRwdXRzID0ge1xyXG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbDtcclxuICBhc3BlY3Q6IG51bWJlcjtcclxufSAmIENvbXBvbmVudE91dHB1dDtcclxuXHJcbmV4cG9ydCBjbGFzcyBIbHNMb2FkZXIgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgdGV4dHVyZTogVmlkZW9UZXh0dXJlIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBobHM6IEhscyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcclxuICAgIHNyYzogJy4vLi4vYXNzZXRzL3ZpZGVvLzEyMTIyMi0wNC5tcDQnLFxyXG4gICAgZW5hYmxlZDogdHJ1ZSxcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG91dHB1dHMgPSB7XHJcbiAgICB2aWRlbzogbnVsbCxcclxuICAgIGFzcGVjdDogMSxcclxuICB9IGFzIE91dHB1dHM7XHJcblxyXG4gIG92ZXJyaWRlIG9uSW5pdCh2aWRlb1RleHR1cmU/OiBWaWRlb1RleHR1cmUpIHtcclxuICAgIHRoaXMub3V0cHV0cy52aWRlbyA9IHZpZGVvVGV4dHVyZTtcclxuICAgIHRoaXMub3V0cHV0cy5hc3BlY3QgPSA3MjAvNDgwO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzLmVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5zZXR1cFN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25JbnB1dHNVcGRhdGVkKCkge1xyXG5cclxuICAgIHRoaXMuc2V0dXBTdHJlYW0oKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVsZWFzZVJlc291cmNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVWaWRlb0VsZW1lbnQoKSB7XHJcbiAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XHJcbiAgICB2aWRlby5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xyXG4gICAgdmlkZW8uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnNDgwJyk7XHJcbiAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzcyMCcpO1xyXG4gICAgdmlkZW8udm9sdW1lID0gMC4xO1xyXG4gICAgcmV0dXJuIHZpZGVvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFN0cmVhbSgpIHtcclxuICAgIHRoaXMucmVsZWFzZVJlc291cmNlcygpO1xyXG5cclxuICAgIGlmICh0aGlzLmlucHV0cy5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMudmlkZW8gPSB0aGlzLmNyZWF0ZVZpZGVvRWxlbWVudCgpO1xyXG4gICAgICB0aGlzLmhscyA9IG5ldyBIbHMoKTtcclxuICAgICAgdGhpcy5obHMubG9hZFNvdXJjZSh0aGlzLmlucHV0cy5zcmMpO1xyXG4gICAgICB0aGlzLmhscy5hdHRhY2hNZWRpYSh0aGlzLnZpZGVvKTtcclxuICAgICAgdGhpcy5obHMub24oSGxzLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsICgpID0+IHtcclxuICAgICAgICB0aGlzLm91dHB1dHMudmlkZW8gPSB0aGlzLnZpZGVvO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVsZWFzZVJlc291cmNlcygpIHtcclxuICAgIGlmICh0aGlzLmhscykge1xyXG4gICAgICB0aGlzLmhscy5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuaGxzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZXh0dXJlKSB7XHJcbiAgICAgIHRoaXMudGV4dHVyZS5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMudGV4dHVyZSA9IG51bGw7XHJcbiAgICAgIHRoaXMub3V0cHV0cy52aWRlbyA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaGxzTG9hZGVyVHlwZSA9ICdtcC5obHNMb2FkZXInO1xyXG5leHBvcnQgZnVuY3Rpb24gbWFrZUhsc0xvYWRlcigpIHtcclxuICByZXR1cm4gbmV3IEhsc0xvYWRlcigpO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,51 @@
1
+ import { SceneComponent } from './../scene-component/SceneComponent';
2
+ export class CanvasImage extends SceneComponent {
3
+ constructor() {
4
+ super(...arguments);
5
+ this.image = null;
6
+ this.inputs = {
7
+ src: null,
8
+ srcPosition: { x: 0, y: 0 },
9
+ srcSize: { w: 64, h: 64 },
10
+ destPosition: { x: 0, y: 0 },
11
+ destSize: { w: 64, h: 64 },
12
+ };
13
+ this.outputs = {
14
+ painter: null,
15
+ };
16
+ }
17
+ onInit() {
18
+ this.outputs.painter = this;
19
+ this.maybeLoadImage();
20
+ }
21
+ onInputsUpdated() {
22
+ this.maybeLoadImage();
23
+ }
24
+ paint(context2d, size) {
25
+ if (!this.image) {
26
+ return;
27
+ }
28
+ context2d.clearRect(0, 0, this.inputs.destSize.w, this.inputs.destSize.h);
29
+ if (this.image.width > 0) {
30
+ context2d.drawImage(this.image, this.inputs.srcPosition.x, this.inputs.srcPosition.y, this.inputs.srcSize.w, this.inputs.srcSize.h, this.inputs.destPosition.x, this.inputs.destPosition.y, this.inputs.destSize.w, this.inputs.destSize.h);
31
+ }
32
+ }
33
+ maybeLoadImage() {
34
+ this.image = null;
35
+ if (this.inputs.src !== null && this.inputs.src !== '') {
36
+ const that = this;
37
+ this.image = new Image();
38
+ this.image.crossOrigin = 'anonymous';
39
+ this.image.src = this.inputs.src;
40
+ this.image.onload = function (event) {
41
+ // that.notify('paint.ready');
42
+ };
43
+ }
44
+ // this.notify('paint.ready');
45
+ }
46
+ }
47
+ export const canvasImageType = 'mp.canvasImage';
48
+ export function makeCanvasImage() {
49
+ return new CanvasImage();
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FudmFzSW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvQ2FudmFzSW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQWVwRixNQUFNLE9BQU8sV0FBWSxTQUFRLGNBQWM7SUFBL0M7O1FBQ1UsVUFBSyxHQUE0QixJQUFJLENBQUM7UUFFckMsV0FBTSxHQUFXO1lBQ3hCLEdBQUcsRUFBRSxJQUFJO1lBQ1QsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzNCLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUN6QixZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1NBQzNCLENBQUE7UUFFUSxZQUFPLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUk7U0FDSCxDQUFDO0lBeUNmLENBQUM7SUF2Q1UsTUFBTTtRQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVRLGVBQWU7UUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBbUMsRUFBRSxJQUFVO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBRUQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUN4QixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWxCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRTtZQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFTLEtBQVk7Z0JBQ3ZDLDhCQUE4QjtZQUNoQyxDQUFDLENBQUM7U0FDSDtRQUVELDhCQUE4QjtJQUNoQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7QUFDaEQsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudE91dHB1dCwgU2NlbmVDb21wb25lbnR9IGZyb20gJy4vLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcbmltcG9ydCB7SVBhaW50ZXIyZH0gZnJvbSBcIi4vQ2FudmFzUmVuZGVyZXJcIjtcbmltcG9ydCB7U2l6ZX0gZnJvbSBcIi4vUGxhbmVSZW5kZXJlclwiO1xudHlwZSBJbnB1dHMgPSB7XG4gIHNyYzogc3RyaW5nIHwgbnVsbDtcbiAgc3JjUG9zaXRpb246IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfTtcbiAgc3JjU2l6ZTogU2l6ZTtcbiAgZGVzdFBvc2l0aW9uOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH07XG4gIGRlc3RTaXplOiBTaXplO1xufTtcblxudHlwZSBPdXRwdXRzID0ge1xuICBwYWludGVyOiBJUGFpbnRlcjJkIHwgbnVsbDtcbn0gJiBDb21wb25lbnRPdXRwdXQ7XG5cbmV4cG9ydCBjbGFzcyBDYW52YXNJbWFnZSBleHRlbmRzIFNjZW5lQ29tcG9uZW50IGltcGxlbWVudHMgSVBhaW50ZXIyZCB7XG4gIHByaXZhdGUgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcbiAgICBzcmM6IG51bGwsXG4gICAgc3JjUG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgIHNyY1NpemU6IHsgdzogNjQsIGg6IDY0IH0sXG4gICAgZGVzdFBvc2l0aW9uOiB7IHg6IDAsIHk6IDAgfSxcbiAgICBkZXN0U2l6ZTogeyB3OiA2NCwgaDogNjQgfSxcbiAgfVxuXG4gIG92ZXJyaWRlIG91dHB1dHMgPSB7XG4gICAgcGFpbnRlcjogbnVsbCxcbiAgfSBhcyBPdXRwdXRzO1xuXG4gIG92ZXJyaWRlIG9uSW5pdCgpIHtcbiAgICB0aGlzLm91dHB1dHMucGFpbnRlciA9IHRoaXM7XG4gICAgdGhpcy5tYXliZUxvYWRJbWFnZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25JbnB1dHNVcGRhdGVkKCkge1xuICAgIHRoaXMubWF5YmVMb2FkSW1hZ2UoKTtcbiAgfVxuXG4gIHBhaW50KGNvbnRleHQyZDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBzaXplOiBTaXplKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmltYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGV4dDJkLmNsZWFyUmVjdCgwLCAwLCB0aGlzLmlucHV0cy5kZXN0U2l6ZS53LCB0aGlzLmlucHV0cy5kZXN0U2l6ZS5oKTtcbiAgICBpZiAodGhpcy5pbWFnZS53aWR0aCA+IDApIHtcbiAgICAgIGNvbnRleHQyZC5kcmF3SW1hZ2UodGhpcy5pbWFnZSxcbiAgICAgICAgdGhpcy5pbnB1dHMuc3JjUG9zaXRpb24ueCwgdGhpcy5pbnB1dHMuc3JjUG9zaXRpb24ueSxcbiAgICAgICAgdGhpcy5pbnB1dHMuc3JjU2l6ZS53LCB0aGlzLmlucHV0cy5zcmNTaXplLmgsXG4gICAgICAgIHRoaXMuaW5wdXRzLmRlc3RQb3NpdGlvbi54LCB0aGlzLmlucHV0cy5kZXN0UG9zaXRpb24ueSxcbiAgICAgICAgdGhpcy5pbnB1dHMuZGVzdFNpemUudywgdGhpcy5pbnB1dHMuZGVzdFNpemUuaCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXliZUxvYWRJbWFnZSgpIHtcbiAgICB0aGlzLmltYWdlID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmlucHV0cy5zcmMgIT09IG51bGwgJiYgdGhpcy5pbnB1dHMuc3JjICE9PSAnJykge1xuICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICB0aGlzLmltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB0aGlzLmltYWdlLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XG4gICAgICB0aGlzLmltYWdlLnNyYyA9IHRoaXMuaW5wdXRzLnNyYztcbiAgICAgIHRoaXMuaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIC8vIHRoYXQubm90aWZ5KCdwYWludC5yZWFkeScpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLm5vdGlmeSgncGFpbnQucmVhZHknKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY2FudmFzSW1hZ2VUeXBlID0gJ21wLmNhbnZhc0ltYWdlJztcbmV4cG9ydCBmdW5jdGlvbiBtYWtlQ2FudmFzSW1hZ2UoKSB7XG4gIHJldHVybiBuZXcgQ2FudmFzSW1hZ2UoKTtcbn1cbiJdfQ==
@@ -0,0 +1,62 @@
1
+ import { SceneComponent } from '../scene-component/SceneComponent';
2
+ import { CanvasTexture } from 'three';
3
+ export class CanvasRenderer extends SceneComponent {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.inputs = {
7
+ painter: null,
8
+ textureRes: { w: 1024, h: 1024 }, // dim for thermostat
9
+ };
10
+ this.outputs = {
11
+ texture: null,
12
+ };
13
+ this.events = {
14
+ repaint: true,
15
+ };
16
+ }
17
+ onInit(ci) {
18
+ // set up canvas 2d context
19
+ this.canvas = document.createElement('canvas');
20
+ this.renderContext2D = this.canvas.getContext('2d');
21
+ this.outputs.texture = new CanvasTexture(this.canvas);
22
+ // this.inputs.painter = ci; // FOR TV ONLY
23
+ this.resize(this.inputs.textureRes);
24
+ this.repaint();
25
+ }
26
+ setCanvasNestThermostatPainter(sc) {
27
+ this.inputs.painter = sc;
28
+ }
29
+ onInputsUpdated(oldInputs) {
30
+ if (oldInputs.textureRes.w !== this.inputs.textureRes.w ||
31
+ oldInputs.textureRes.h !== this.inputs.textureRes.h) {
32
+ this.resize(this.inputs.textureRes);
33
+ }
34
+ if (oldInputs.painter !== this.inputs.painter) {
35
+ this.repaint();
36
+ }
37
+ }
38
+ onEvent(eventType, _eventData) {
39
+ if (eventType === 'repaint') {
40
+ this.repaint();
41
+ }
42
+ }
43
+ onDestroy() {
44
+ this.outputs.texture.dispose();
45
+ this.outputs.texture = null;
46
+ }
47
+ resize(size) {
48
+ this.canvas.width = size.w;
49
+ this.canvas.height = size.h;
50
+ }
51
+ repaint() {
52
+ if (this.inputs.painter) {
53
+ this.inputs.painter.paint(this.renderContext2D, this.inputs.textureRes);
54
+ this.outputs.texture.needsUpdate = true;
55
+ }
56
+ }
57
+ }
58
+ export const canvasRendererType = 'mp.canvasRenderer';
59
+ export function makeCanvasRenderer() {
60
+ return new CanvasRenderer();
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FudmFzUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvQ2FudmFzUmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBcUJ0QyxNQUFNLE9BQU8sY0FBZSxTQUFRLGNBQWM7SUFBbEQ7O1FBSVcsV0FBTSxHQUFXO1lBQ3hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUscUJBQXFCO1NBQ3hELENBQUE7UUFFUSxZQUFPLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUk7U0FDSCxDQUFDO1FBRUosV0FBTSxHQUFHO1lBQ2hCLE9BQU8sRUFBRSxJQUFJO1NBQ0osQ0FBQztJQW9EZCxDQUFDO0lBbERVLE1BQU0sQ0FBQyxFQUFnQjtRQUU5QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELDJDQUEyQztRQUUzQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxFQUFFO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRVEsZUFBZSxDQUFDLFNBQWlCO1FBQ3hDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQzdDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFUSxPQUFPLENBQUMsU0FBaUIsRUFBRSxVQUFtQjtRQUNyRCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVRLFNBQVM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFTyxNQUFNLENBQUMsSUFBVTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QztJQUNILENBQUM7Q0FFRjtBQU9ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQ3RELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2VuZUNvbXBvbmVudCwgQ29tcG9uZW50T3V0cHV0IH0gZnJvbSAnLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhbnZhc1RleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi9QbGFuZVJlbmRlcmVyJztcbmltcG9ydCB7IENhbnZhc0ltYWdlIH0gZnJvbSAnLi9DYW52YXNJbWFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhaW50ZXIyZCB7XG4gIHBhaW50KGNvbnRleHQyZDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBzaXplOiBTaXplKTogdm9pZDtcbn1cblxudHlwZSBJbnB1dHMgPSB7XG4gIHBhaW50ZXI6IElQYWludGVyMmQgfCBudWxsO1xuICB0ZXh0dXJlUmVzOiBTaXplO1xufVxuXG50eXBlIE91dHB1dHMgPSB7XG4gIHRleHR1cmU6IFRleHR1cmUgfCBudWxsO1xufSAmIENvbXBvbmVudE91dHB1dDtcblxudHlwZSBFdmVudHMgPSB7XG4gIHJlcGFpbnQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgQ2FudmFzUmVuZGVyZXIgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgcHJpdmF0ZSByZW5kZXJDb250ZXh0MkQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcbiAgICBwYWludGVyOiBudWxsLFxuICAgIHRleHR1cmVSZXM6IHsgdzogMTAyNCwgaDogMTAyNCB9LCAvLyBkaW0gZm9yIHRoZXJtb3N0YXRcbiAgfVxuXG4gIG92ZXJyaWRlIG91dHB1dHMgPSB7XG4gICAgdGV4dHVyZTogbnVsbCxcbiAgfSBhcyBPdXRwdXRzO1xuXG4gIG92ZXJyaWRlIGV2ZW50cyA9IHtcbiAgICByZXBhaW50OiB0cnVlLFxuICB9IGFzIEV2ZW50cztcblxuICBvdmVycmlkZSBvbkluaXQoY2k/OiBDYW52YXNJbWFnZSkge1xuXG4gICAgLy8gc2V0IHVwIGNhbnZhcyAyZCBjb250ZXh0XG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB0aGlzLnJlbmRlckNvbnRleHQyRCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgdGhpcy5vdXRwdXRzLnRleHR1cmUgPSBuZXcgQ2FudmFzVGV4dHVyZSh0aGlzLmNhbnZhcyk7XG4gICAgLy8gdGhpcy5pbnB1dHMucGFpbnRlciA9IGNpOyAvLyBGT1IgVFYgT05MWVxuXG4gICAgdGhpcy5yZXNpemUodGhpcy5pbnB1dHMudGV4dHVyZVJlcyk7XG4gICAgdGhpcy5yZXBhaW50KCk7XG4gIH1cblxuICBzZXRDYW52YXNOZXN0VGhlcm1vc3RhdFBhaW50ZXIoc2Mpe1xuICAgIHRoaXMuaW5wdXRzLnBhaW50ZXIgPSBzYztcbiAgfVxuXG4gIG92ZXJyaWRlIG9uSW5wdXRzVXBkYXRlZChvbGRJbnB1dHM6IElucHV0cykge1xuICAgIGlmIChvbGRJbnB1dHMudGV4dHVyZVJlcy53ICE9PSB0aGlzLmlucHV0cy50ZXh0dXJlUmVzLncgfHxcbiAgICAgICAgb2xkSW5wdXRzLnRleHR1cmVSZXMuaCAhPT0gdGhpcy5pbnB1dHMudGV4dHVyZVJlcy5oKSB7XG4gICAgICB0aGlzLnJlc2l6ZSh0aGlzLmlucHV0cy50ZXh0dXJlUmVzKTtcbiAgICB9XG5cbiAgICBpZiAob2xkSW5wdXRzLnBhaW50ZXIgIT09IHRoaXMuaW5wdXRzLnBhaW50ZXIpIHtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uRXZlbnQoZXZlbnRUeXBlOiBzdHJpbmcsIF9ldmVudERhdGE6IHVua25vd24pIHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSAncmVwYWludCcpIHtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLm91dHB1dHMudGV4dHVyZS5kaXNwb3NlKCk7XG4gICAgdGhpcy5vdXRwdXRzLnRleHR1cmUgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNpemUoc2l6ZTogU2l6ZSkge1xuICAgIHRoaXMuY2FudmFzLndpZHRoID0gc2l6ZS53O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHNpemUuaDtcbiAgfVxuXG4gIHB1YmxpYyByZXBhaW50KCkge1xuICAgIGlmICh0aGlzLmlucHV0cy5wYWludGVyKSB7XG4gICAgICB0aGlzLmlucHV0cy5wYWludGVyLnBhaW50KHRoaXMucmVuZGVyQ29udGV4dDJELCB0aGlzLmlucHV0cy50ZXh0dXJlUmVzKTtcbiAgICAgIHRoaXMub3V0cHV0cy50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDYW52YXNSZW5kZXJlciBleHRlbmRzIFNjZW5lQ29tcG9uZW50e1xuICBpbnB1dHM6IElucHV0cztcbiAgb3V0cHV0czogT3V0cHV0cztcbn1cblxuZXhwb3J0IGNvbnN0IGNhbnZhc1JlbmRlcmVyVHlwZSA9ICdtcC5jYW52YXNSZW5kZXJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWFrZUNhbnZhc1JlbmRlcmVyKCkge1xuICByZXR1cm4gbmV3IENhbnZhc1JlbmRlcmVyKCk7XG59XG4iXX0=
@@ -0,0 +1,190 @@
1
+ import { SceneComponent } from '../scene-component/SceneComponent';
2
+ import { AnimationMixer, LoopOnce, AnimationClip, Texture, VectorKeyframeTrack, InterpolateSmooth, MeshBasicMaterial, LinearFilter } from 'three';
3
+ const HoverEvent = 'hover';
4
+ const UnhoverEvent = 'unhover';
5
+ const RepaintEvent = 'repaint';
6
+ export class NestThermostat extends SceneComponent {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.cv = null;
10
+ this.planeRenderer = null;
11
+ this.rootScene = null;
12
+ this.mixer = null;
13
+ this.onEnterClip = null;
14
+ this.mesh = null;
15
+ this.currentTime = 0;
16
+ this.nextUpdate = 0;
17
+ this.temperature = 0;
18
+ this.tempChangeRange = 5;
19
+ this.inputs = {
20
+ loadingState: 'Idle',
21
+ texture: null,
22
+ updateInterval: 1000,
23
+ };
24
+ this.outputs = {
25
+ painter: null,
26
+ visible: false,
27
+ };
28
+ this.events = {
29
+ [HoverEvent]: true,
30
+ [UnhoverEvent]: true,
31
+ };
32
+ }
33
+ onInit(modelNode, plane, inputTexture) {
34
+ if (!this.context) {
35
+ this.context = {
36
+ root: modelNode
37
+ };
38
+ }
39
+ this.inputs.texture = inputTexture;
40
+ const root = this.context.root;
41
+ const THREE = this.context.three;
42
+ this.planeRenderer = plane;
43
+ this.planeRenderer.outputs.objectRoot.translateZ(0.05);
44
+ this.planeRenderer.outputs.objectRoot.translateY(0.4);
45
+ this.planeRenderer.outputs.objectRoot.scale.set(0.5, 0.5, 0.5);
46
+ // planeRenderer.inputs.localPosition.z = 0.05;
47
+ // planeRenderer.inputs.localPosition.y = 0.4;
48
+ // planeRenderer.inputs.localScale = {x: 0.5, y: 0.5, z: 0.5};
49
+ this.outputs.painter = this;
50
+ this.mixer = new AnimationMixer(this.planeRenderer.outputs.objectRoot);
51
+ const tm = 0.2;
52
+ const positionTrack = new VectorKeyframeTrack('.scale', [0, tm], [
53
+ 0, 0, 0,
54
+ 0.5, 0.5, 0.5
55
+ ], InterpolateSmooth);
56
+ this.onEnterClip = new AnimationClip(null, tm, [positionTrack]);
57
+ }
58
+ onInputsUpdated() {
59
+ if (this.inputs.loadingState === 'Loaded') {
60
+ const lines = [];
61
+ //@ts-ignore
62
+ this.context.root.obj3D.traverse((obj) => {
63
+ // we dont want line segments, track them and remove them.
64
+ if (obj.type === 'LineSegments') {
65
+ lines.push(obj);
66
+ }
67
+ else if (obj.type === 'Mesh') {
68
+ this.mesh = obj;
69
+ const materials = this.mesh.material;
70
+ materials.forEach((m, idx) => {
71
+ if (m && m.map.source.data.outerHTML.indexOf('_5b76dbe388862300126c1e14') !== -1) {
72
+ let video, videoImage, videoImageContext, videoTexture;
73
+ // create the video element
74
+ video = document.createElement('video');
75
+ video.src = "./../assets/video/121222-04.mp4";
76
+ video.load(); // must call after setting/changing source
77
+ video.loop = true;
78
+ video.play();
79
+ videoImage = document.createElement('canvas');
80
+ videoImage.width = 480;
81
+ videoImage.height = 204;
82
+ videoImageContext = videoImage.getContext('2d');
83
+ // background color if no video present
84
+ videoImageContext.fillStyle = '#000000';
85
+ videoImageContext.fillRect(0, 0, videoImage.width, videoImage.height);
86
+ videoTexture = new Texture(videoImage);
87
+ videoTexture.minFilter = LinearFilter;
88
+ videoTexture.magFilter = LinearFilter;
89
+ const movieMaterial = new MeshBasicMaterial({ map: videoTexture });
90
+ // const newMaterial = new MeshBasicMaterial({map: this.inputs.texture});
91
+ // const newMaterial = new MeshBasicMaterial({map: this.inputs.texture});
92
+ // this.mesh.material[idx] = newMaterial;
93
+ this.mesh.material[idx] = movieMaterial;
94
+ const render = () => {
95
+ if (video.readyState === video.HAVE_ENOUGH_DATA) {
96
+ videoImageContext.drawImage(video, 0, 0);
97
+ if (videoTexture)
98
+ videoTexture.needsUpdate = true;
99
+ }
100
+ const camera = this.rootScene.children.find(u => u.constructor.name === 'CameraRig');
101
+ this.context.renderer.render(this.context.scene, camera);
102
+ };
103
+ setInterval(() => {
104
+ render();
105
+ }, 200);
106
+ }
107
+ });
108
+ }
109
+ });
110
+ // remove the line segments.
111
+ lines.forEach((line) => {
112
+ line.parent.remove(line);
113
+ });
114
+ }
115
+ }
116
+ onEvent(eventType, eventData) {
117
+ if (eventType === HoverEvent) {
118
+ const data = eventData;
119
+ if (data.hover) {
120
+ this.outputs.visible = true;
121
+ const onEnterAction = this.mixer.clipAction(this.onEnterClip);
122
+ onEnterAction.stop();
123
+ onEnterAction.loop = LoopOnce;
124
+ onEnterAction.clampWhenFinished = true;
125
+ onEnterAction.play();
126
+ }
127
+ else {
128
+ this.outputs.visible = false;
129
+ }
130
+ }
131
+ }
132
+ paint(context2d, size) {
133
+ const x = 490;
134
+ const y = 490;
135
+ context2d.fillStyle = 'black';
136
+ context2d.beginPath();
137
+ context2d.arc(x, y, 400, 0, Math.PI * 2);
138
+ context2d.fill();
139
+ context2d.fillStyle = '#CF5300';
140
+ context2d.beginPath();
141
+ context2d.arc(x, y, 300, 0, Math.PI * 2);
142
+ context2d.fill();
143
+ context2d.beginPath();
144
+ context2d.strokeStyle = 'orange';
145
+ context2d.arc(x, y, 240, 0.75 * Math.PI, 0.25 * Math.PI);
146
+ context2d.lineCap = 'butt';
147
+ context2d.lineWidth = 80;
148
+ context2d.stroke();
149
+ context2d.fillStyle = 'white';
150
+ context2d.font = '220px Arial';
151
+ context2d.fillText(`${this.temperature}`, x - 115, y + 75);
152
+ this.outputs.visible = true;
153
+ }
154
+ onTick(delta) {
155
+ this.currentTime += delta;
156
+ if (this.mixer) {
157
+ this.mixer.update(delta / 1000);
158
+ }
159
+ if (this.currentTime > this.nextUpdate) {
160
+ this.nextUpdate += this.inputs.updateInterval;
161
+ this.temperature += (Math.random() * this.tempChangeRange);
162
+ this.temperature = Math.trunc(this.temperature);
163
+ if (this.temperature > 99) {
164
+ this.temperature = 99;
165
+ this.tempChangeRange = -this.tempChangeRange;
166
+ }
167
+ if (this.temperature < 10) {
168
+ this.temperature = 10;
169
+ this.tempChangeRange = -this.tempChangeRange;
170
+ }
171
+ this.component.notify(RepaintEvent);
172
+ this.cv.repaint();
173
+ }
174
+ }
175
+ setComponent(component, plane, cv) {
176
+ component.onTick = this.onTick.bind(this);
177
+ // plane.onTick = this.onTick.bind(this);
178
+ this.cv = cv;
179
+ this.component = component;
180
+ this.context = component.context;
181
+ }
182
+ setRootScene(rootScene) {
183
+ this.rootScene = rootScene;
184
+ }
185
+ }
186
+ export const nestThermostatType = 'mp.nestThermostat';
187
+ export const makeNestThermostat = function () {
188
+ return new NestThermostat();
189
+ };
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmVzdFRoZXJtb3N0YXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvTmVzdFRoZXJtb3N0YXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBb0MsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRyxPQUFPLEVBRUwsY0FBYyxFQUVkLFFBQVEsRUFDUixhQUFhLEVBRWIsT0FBTyxFQUVQLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLFlBQVksRUFFYixNQUFNLE9BQU8sQ0FBQztBQUlmLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUMzQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUM7QUFDL0IsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBYy9CLE1BQU0sT0FBTyxjQUFlLFNBQVEsY0FBYztJQUFsRDs7UUFDVSxPQUFFLEdBQTBCLElBQUksQ0FBQztRQUNqQyxrQkFBYSxHQUF5QixJQUFJLENBQUM7UUFDM0MsY0FBUyxHQUFvQixJQUFJLENBQUM7UUFDbEMsVUFBSyxHQUEwQixJQUFJLENBQUM7UUFDcEMsZ0JBQVcsR0FBeUIsSUFBSSxDQUFDO1FBQ3pDLFNBQUksR0FBZ0IsSUFBSSxDQUFDO1FBQ3pCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDeEIsb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFJM0IsV0FBTSxHQUFXO1lBQ3hCLFlBQVksRUFBRSxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQTtRQUVRLFlBQU8sR0FBRztZQUNqQixPQUFPLEVBQUUsSUFBSTtZQUNiLE9B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LENBQUMsV0FBVyxHQUFHLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2FBQzlDO1lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUNsQjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsU0FBeUIsRUFBRSxLQUFvQixFQUFFLEVBQWtCO1FBQzlFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBbUI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2NlbmVDb21wb25lbnQsIENvbXBvbmVudE91dHB1dCwgQ29tcG9uZW50Q29udGV4dH0gZnJvbSAnLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcbmltcG9ydCB7XG4gIE9iamVjdDNELFxuICBBbmltYXRpb25NaXhlcixcbiAgQW5pbWF0aW9uQWN0aW9uLFxuICBMb29wT25jZSxcbiAgQW5pbWF0aW9uQ2xpcCxcbiAgTWVzaCxcbiAgVGV4dHVyZSxcbiAgTWVzaExhbWJlcnRNYXRlcmlhbCxcbiAgVmVjdG9yS2V5ZnJhbWVUcmFjayxcbiAgSW50ZXJwb2xhdGVTbW9vdGgsXG4gIE1lc2hCYXNpY01hdGVyaWFsLFxuICBMaW5lU2VnbWVudHMsXG4gIExpbmVhckZpbHRlcixcbiAgRG91YmxlU2lkZVxufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQge0NhbnZhc1JlbmRlcmVyLCBJUGFpbnRlcjJkfSBmcm9tICcuL0NhbnZhc1JlbmRlcmVyJztcbmltcG9ydCB7UGxhbmVSZW5kZXJlciwgU2l6ZX0gZnJvbSAnLi9QbGFuZVJlbmRlcmVyJztcblxuY29uc3QgSG92ZXJFdmVudCA9ICdob3Zlcic7XG5jb25zdCBVbmhvdmVyRXZlbnQgPSAndW5ob3Zlcic7XG5jb25zdCBSZXBhaW50RXZlbnQgPSAncmVwYWludCc7XG5cbnR5cGUgSW5wdXRzID0ge1xuICBsb2FkaW5nU3RhdGU6IHN0cmluZztcbiAgdGV4dHVyZTogVGV4dHVyZSB8IG51bGw7XG4gIHVwZGF0ZUludGVydmFsOiBudW1iZXI7XG59XG5cbnR5cGUgT3V0cHV0cyA9IHtcbiAgcGFpbnRlcjogSVBhaW50ZXIyZCB8IG51bGw7XG4gIHZpc2libGU6IGJvb2xlYW47XG59ICYgQ29tcG9uZW50T3V0cHV0O1xuXG5cbmV4cG9ydCBjbGFzcyBOZXN0VGhlcm1vc3RhdCBleHRlbmRzIFNjZW5lQ29tcG9uZW50IGltcGxlbWVudHMgSVBhaW50ZXIyZCB7XG4gIHByaXZhdGUgY3Y6IENhbnZhc1JlbmRlcmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGxhbmVSZW5kZXJlcjogUGxhbmVSZW5kZXJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJvb3RTY2VuZTogT2JqZWN0M0QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtaXhlcjogQW5pbWF0aW9uTWl4ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvbkVudGVyQ2xpcDogQW5pbWF0aW9uQ2xpcCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1lc2g6IE1lc2ggfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VGltZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBuZXh0VXBkYXRlOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHRlbXBlcmF0dXJlOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHRlbXBDaGFuZ2VSYW5nZTogbnVtYmVyID0gNTtcbiAgcHJpdmF0ZSBjb21wb25lbnQ6IFNjZW5lQ29tcG9uZW50O1xuXG5cbiAgb3ZlcnJpZGUgaW5wdXRzOiBJbnB1dHMgPSB7XG4gICAgbG9hZGluZ1N0YXRlOiAnSWRsZScsXG4gICAgdGV4dHVyZTogbnVsbCxcbiAgICB1cGRhdGVJbnRlcnZhbDogMTAwMCxcbiAgfVxuXG4gIG92ZXJyaWRlIG91dHB1dHMgPSB7XG4gICAgcGFpbnRlcjogbnVsbCxcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgfSBhcyBPdXRwdXRzO1xuXG4gIG92ZXJyaWRlIGV2ZW50cyA9IHtcbiAgICBbSG92ZXJFdmVudF06IHRydWUsXG4gICAgW1VuaG92ZXJFdmVudF06IHRydWUsXG4gIH07XG5cbiAgb3ZlcnJpZGUgb25Jbml0KG1vZGVsTm9kZT86IGFueSwgcGxhbmU/OiBQbGFuZVJlbmRlcmVyLCBpbnB1dFRleHR1cmU/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkge1xuICAgICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgICByb290OiBtb2RlbE5vZGVcbiAgICAgIH0gYXMgQ29tcG9uZW50Q29udGV4dDtcbiAgICB9XG4gICAgdGhpcy5pbnB1dHMudGV4dHVyZSA9IGlucHV0VGV4dHVyZTtcbiAgICBjb25zdCByb290ID0gdGhpcy5jb250ZXh0LnJvb3Q7XG4gICAgY29uc3QgVEhSRUUgPSB0aGlzLmNvbnRleHQudGhyZWU7XG5cbiAgICB0aGlzLnBsYW5lUmVuZGVyZXIgPSBwbGFuZTtcbiAgICB0aGlzLnBsYW5lUmVuZGVyZXIub3V0cHV0cy5vYmplY3RSb290LnRyYW5zbGF0ZVooMC4wNSk7XG4gICAgdGhpcy5wbGFuZVJlbmRlcmVyLm91dHB1dHMub2JqZWN0Um9vdC50cmFuc2xhdGVZKDAuNCk7XG4gICAgdGhpcy5wbGFuZVJlbmRlcmVyLm91dHB1dHMub2JqZWN0Um9vdC5zY2FsZS5zZXQoMC41LCAwLjUsIDAuNSk7XG4gICAgLy8gcGxhbmVSZW5kZXJlci5pbnB1dHMubG9jYWxQb3NpdGlvbi56ID0gMC4wNTtcbiAgICAvLyBwbGFuZVJlbmRlcmVyLmlucHV0cy5sb2NhbFBvc2l0aW9uLnkgPSAwLjQ7XG4gICAgLy8gcGxhbmVSZW5kZXJlci5pbnB1dHMubG9jYWxTY2FsZSA9IHt4OiAwLjUsIHk6IDAuNSwgejogMC41fTtcblxuICAgIHRoaXMub3V0cHV0cy5wYWludGVyID0gdGhpcztcblxuICAgIHRoaXMubWl4ZXIgPSBuZXcgQW5pbWF0aW9uTWl4ZXIodGhpcy5wbGFuZVJlbmRlcmVyLm91dHB1dHMub2JqZWN0Um9vdCk7XG5cbiAgICBjb25zdCB0bSA9IDAuMjtcbiAgICBjb25zdCBwb3NpdGlvblRyYWNrID0gbmV3IFZlY3RvcktleWZyYW1lVHJhY2soJy5zY2FsZScsIFswLCB0bV0sIFtcbiAgICAgIDAsIDAsIDAsXG4gICAgICAwLjUsIDAuNSwgMC41XG4gICAgXSwgSW50ZXJwb2xhdGVTbW9vdGgpO1xuICAgIHRoaXMub25FbnRlckNsaXAgPSBuZXcgQW5pbWF0aW9uQ2xpcChudWxsLCB0bSwgW3Bvc2l0aW9uVHJhY2tdKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uSW5wdXRzVXBkYXRlZCgpIHtcbiAgICBpZiAodGhpcy5pbnB1dHMubG9hZGluZ1N0YXRlID09PSAnTG9hZGVkJykge1xuICAgICAgY29uc3QgbGluZXM6IExpbmVTZWdtZW50c1tdID0gW107XG5cbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdGhpcy5jb250ZXh0LnJvb3Qub2JqM0QudHJhdmVyc2UoKG9iajogT2JqZWN0M0QpID0+IHtcbiAgICAgICAgLy8gd2UgZG9udCB3YW50IGxpbmUgc2VnbWVudHMsIHRyYWNrIHRoZW0gYW5kIHJlbW92ZSB0aGVtLlxuICAgICAgICBpZiAob2JqLnR5cGUgPT09ICdMaW5lU2VnbWVudHMnKSB7XG4gICAgICAgICAgbGluZXMucHVzaChvYmogYXMgTGluZVNlZ21lbnRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvYmoudHlwZSA9PT0gJ01lc2gnKSB7XG4gICAgICAgICAgdGhpcy5tZXNoID0gb2JqIGFzIE1lc2g7XG5cbiAgICAgICAgICBjb25zdCBtYXRlcmlhbHMgPSB0aGlzLm1lc2gubWF0ZXJpYWwgYXMgTWVzaExhbWJlcnRNYXRlcmlhbDtcbiAgICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaCgobSwgaWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAobSAmJiBtLm1hcC5zb3VyY2UuZGF0YS5vdXRlckhUTUwuaW5kZXhPZignXzViNzZkYmUzODg4NjIzMDAxMjZjMWUxNCcpICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgdmlkZW8sIHZpZGVvSW1hZ2UsIHZpZGVvSW1hZ2VDb250ZXh0LCB2aWRlb1RleHR1cmU7XG4gICAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgdmlkZW8gZWxlbWVudFxuICAgICAgICAgICAgICB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgIHZpZGVvLnNyYyA9IFwiLi8uLi9hc3NldHMvdmlkZW8vMTIxMjIyLTA0Lm1wNFwiO1xuICAgICAgICAgICAgICB2aWRlby5sb2FkKCk7IC8vIG11c3QgY2FsbCBhZnRlciBzZXR0aW5nL2NoYW5naW5nIHNvdXJjZVxuICAgICAgICAgICAgICB2aWRlby5sb29wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmlkZW8ucGxheSgpO1xuXG4gICAgICAgICAgICAgIHZpZGVvSW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgdmlkZW9JbWFnZS53aWR0aCA9IDQ4MDtcbiAgICAgICAgICAgICAgdmlkZW9JbWFnZS5oZWlnaHQgPSAyMDQ7XG5cbiAgICAgICAgICAgICAgdmlkZW9JbWFnZUNvbnRleHQgPSB2aWRlb0ltYWdlLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICAgIC8vIGJhY2tncm91bmQgY29sb3IgaWYgbm8gdmlkZW8gcHJlc2VudFxuICAgICAgICAgICAgICB2aWRlb0ltYWdlQ29udGV4dC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XG4gICAgICAgICAgICAgIHZpZGVvSW1hZ2VDb250ZXh0LmZpbGxSZWN0KDAsIDAsIHZpZGVvSW1hZ2Uud2lkdGgsIHZpZGVvSW1hZ2UuaGVpZ2h0KTtcblxuICAgICAgICAgICAgICB2aWRlb1RleHR1cmUgPSBuZXcgVGV4dHVyZSh2aWRlb0ltYWdlKVxuICAgICAgICAgICAgICB2aWRlb1RleHR1cmUubWluRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuICAgICAgICAgICAgICB2aWRlb1RleHR1cmUubWFnRmlsdGVyID0gTGluZWFyRmlsdGVyO1xuICAgICAgICAgICAgICBjb25zdCBtb3ZpZU1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHttYXA6IHZpZGVvVGV4dHVyZX0pXG4gICAgICAgICAgICAgIC8vIGNvbnN0IG5ld01hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHttYXA6IHRoaXMuaW5wdXRzLnRleHR1cmV9KTtcbiAgICAgICAgICAgICAgLy8gY29uc3QgbmV3TWF0ZXJpYWwgPSBuZXcgTWVzaEJhc2ljTWF0ZXJpYWwoe21hcDogdGhpcy5pbnB1dHMudGV4dHVyZX0pO1xuICAgICAgICAgICAgICAvLyB0aGlzLm1lc2gubWF0ZXJpYWxbaWR4XSA9IG5ld01hdGVyaWFsO1xuICAgICAgICAgICAgICB0aGlzLm1lc2gubWF0ZXJpYWxbaWR4XSA9IG1vdmllTWF0ZXJpYWw7XG5cblxuICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvLnJlYWR5U3RhdGUgPT09IHZpZGVvLkhBVkVfRU5PVUdIX0RBVEEpIHtcbiAgICAgICAgICAgICAgICAgIHZpZGVvSW1hZ2VDb250ZXh0LmRyYXdJbWFnZSh2aWRlbywgMCwgMCk7XG4gICAgICAgICAgICAgICAgICBpZiAodmlkZW9UZXh0dXJlKVxuICAgICAgICAgICAgICAgICAgICB2aWRlb1RleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lcmEgPSB0aGlzLnJvb3RTY2VuZS5jaGlsZHJlbi5maW5kKHU9PnUuY29uc3RydWN0b3IubmFtZSA9PT0gJ0NhbWVyYVJpZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZW5kZXJlci5yZW5kZXIodGhpcy5jb250ZXh0LnNjZW5lLCBjYW1lcmEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNldEludGVydmFsKCgpPT57XG4gICAgICAgICAgICAgICAgcmVuZGVyKCk7XG4gICAgICAgICAgICAgIH0sMjAwKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGluZSBzZWdtZW50cy5cbiAgICAgIGxpbmVzLmZvckVhY2goKGxpbmU6IExpbmVTZWdtZW50cykgPT4ge1xuICAgICAgICBsaW5lLnBhcmVudC5yZW1vdmUobGluZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBvbkV2ZW50KGV2ZW50VHlwZTogc3RyaW5nLCBldmVudERhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSBIb3ZlckV2ZW50KSB7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSBldmVudERhdGE7XG4gICAgICBpZiAoZGF0YS5ob3Zlcikge1xuICAgICAgICB0aGlzLm91dHB1dHMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9uRW50ZXJBY3Rpb246IEFuaW1hdGlvbkFjdGlvbiA9IHRoaXMubWl4ZXIuY2xpcEFjdGlvbih0aGlzLm9uRW50ZXJDbGlwKTtcbiAgICAgICAgb25FbnRlckFjdGlvbi5zdG9wKCk7XG4gICAgICAgIG9uRW50ZXJBY3Rpb24ubG9vcCA9IExvb3BPbmNlO1xuICAgICAgICBvbkVudGVyQWN0aW9uLmNsYW1wV2hlbkZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgb25FbnRlckFjdGlvbi5wbGF5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm91dHB1dHMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhaW50KGNvbnRleHQyZDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBzaXplOiBTaXplKTogdm9pZCB7XG4gICAgY29uc3QgeCA9IDQ5MDtcbiAgICBjb25zdCB5ID0gNDkwO1xuXG4gICAgY29udGV4dDJkLmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgY29udGV4dDJkLmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQyZC5hcmMoeCwgeSwgNDAwLCAwLCBNYXRoLlBJICogMik7XG4gICAgY29udGV4dDJkLmZpbGwoKTtcblxuICAgIGNvbnRleHQyZC5maWxsU3R5bGUgPSAnI0NGNTMwMCc7XG4gICAgY29udGV4dDJkLmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQyZC5hcmMoeCwgeSwgMzAwLCAwLCBNYXRoLlBJICogMik7XG4gICAgY29udGV4dDJkLmZpbGwoKTtcblxuICAgIGNvbnRleHQyZC5iZWdpblBhdGgoKTtcbiAgICBjb250ZXh0MmQuc3Ryb2tlU3R5bGUgPSAnb3JhbmdlJztcbiAgICBjb250ZXh0MmQuYXJjKHgsIHksIDI0MCwgMC43NSAqIE1hdGguUEksIDAuMjUgKiBNYXRoLlBJKTtcbiAgICBjb250ZXh0MmQubGluZUNhcCA9ICdidXR0JztcbiAgICBjb250ZXh0MmQubGluZVdpZHRoID0gODA7XG4gICAgY29udGV4dDJkLnN0cm9rZSgpO1xuXG4gICAgY29udGV4dDJkLmZpbGxTdHlsZSA9ICd3aGl0ZSc7XG4gICAgY29udGV4dDJkLmZvbnQgPSAnMjIwcHggQXJpYWwnO1xuICAgIGNvbnRleHQyZC5maWxsVGV4dChgJHt0aGlzLnRlbXBlcmF0dXJlfWAsIHggLSAxMTUsIHkgKyA3NSk7XG4gICAgdGhpcy5vdXRwdXRzLnZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25UaWNrKGRlbHRhOiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRUaW1lICs9IGRlbHRhO1xuXG4gICAgaWYgKHRoaXMubWl4ZXIpIHtcbiAgICAgIHRoaXMubWl4ZXIudXBkYXRlKGRlbHRhIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudFRpbWUgPiB0aGlzLm5leHRVcGRhdGUpIHtcbiAgICAgIHRoaXMubmV4dFVwZGF0ZSArPSB0aGlzLmlucHV0cy51cGRhdGVJbnRlcnZhbDtcblxuICAgICAgdGhpcy50ZW1wZXJhdHVyZSArPSAoTWF0aC5yYW5kb20oKSAqIHRoaXMudGVtcENoYW5nZVJhbmdlKTtcbiAgICAgIHRoaXMudGVtcGVyYXR1cmUgPSBNYXRoLnRydW5jKHRoaXMudGVtcGVyYXR1cmUpO1xuXG4gICAgICBpZiAodGhpcy50ZW1wZXJhdHVyZSA+IDk5KSB7XG4gICAgICAgIHRoaXMudGVtcGVyYXR1cmUgPSA5OTtcbiAgICAgICAgdGhpcy50ZW1wQ2hhbmdlUmFuZ2UgPSAtdGhpcy50ZW1wQ2hhbmdlUmFuZ2U7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50ZW1wZXJhdHVyZSA8IDEwKSB7XG4gICAgICAgIHRoaXMudGVtcGVyYXR1cmUgPSAxMDtcbiAgICAgICAgdGhpcy50ZW1wQ2hhbmdlUmFuZ2UgPSAtdGhpcy50ZW1wQ2hhbmdlUmFuZ2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShSZXBhaW50RXZlbnQpO1xuICAgICAgdGhpcy5jdi5yZXBhaW50KClcbiAgICB9XG4gIH1cblxuICBzZXRDb21wb25lbnQoY29tcG9uZW50OiBTY2VuZUNvbXBvbmVudCwgcGxhbmU6IFBsYW5lUmVuZGVyZXIsIGN2OiBDYW52YXNSZW5kZXJlcikge1xuICAgIGNvbXBvbmVudC5vblRpY2sgPSB0aGlzLm9uVGljay5iaW5kKHRoaXMpO1xuICAgIC8vIHBsYW5lLm9uVGljayA9IHRoaXMub25UaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jdiA9IGN2O1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbXBvbmVudC5jb250ZXh0O1xuICB9XG5cbiAgc2V0Um9vdFNjZW5lKHJvb3RTY2VuZTogT2JqZWN0M0QpIHtcbiAgICB0aGlzLnJvb3RTY2VuZSA9IHJvb3RTY2VuZTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbmVzdFRoZXJtb3N0YXRUeXBlID0gJ21wLm5lc3RUaGVybW9zdGF0JztcbmV4cG9ydCBjb25zdCBtYWtlTmVzdFRoZXJtb3N0YXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgTmVzdFRoZXJtb3N0YXQoKTtcbn1cbiJdfQ==
@@ -0,0 +1,85 @@
1
+ import { SceneComponent, ComponentInteractionType, } from '../scene-component/SceneComponent';
2
+ import { Mesh, MeshBasicMaterial, Group, PlaneBufferGeometry } from 'three';
3
+ export class PlaneRenderer extends SceneComponent {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.rootScene = null;
7
+ this.inputs = {
8
+ texture: null,
9
+ aspect: 1,
10
+ transparent: true,
11
+ visible: true,
12
+ opacity: 1,
13
+ polygonOffset: false,
14
+ polygonOffsetFactor: 0,
15
+ polygonOffsetUnits: 0,
16
+ localScale: { x: 1, y: 1, z: 1 },
17
+ localPosition: { x: 0, y: 0, z: 0 },
18
+ };
19
+ this.events = {
20
+ [ComponentInteractionType.CLICK]: true,
21
+ };
22
+ }
23
+ onInit(modelNode, inputTexture) {
24
+ this.inputs.texture = inputTexture;
25
+ if (!this.context) {
26
+ this.context = {
27
+ root: modelNode
28
+ };
29
+ }
30
+ this.pivotNode = new Group();
31
+ this.mesh = new Mesh(new PlaneBufferGeometry(1.0, 1.0), new MeshBasicMaterial({
32
+ transparent: this.inputs.transparent,
33
+ map: this.inputs.texture,
34
+ opacity: this.inputs.opacity,
35
+ polygonOffset: this.inputs.polygonOffset,
36
+ polygonOffsetFactor: this.inputs.polygonOffsetFactor,
37
+ polygonOffsetUnits: this.inputs.polygonOffsetUnits,
38
+ }));
39
+ this.mesh.scale.set(this.inputs.localScale.x, this.inputs.localScale.y / this.inputs.aspect, this.inputs.localScale.z);
40
+ this.mesh.position.set(this.inputs.localPosition.x, this.inputs.localPosition.y, this.inputs.localPosition.z);
41
+ this.mesh.updateMatrixWorld();
42
+ this.pivotNode.add(this.mesh);
43
+ this.outputs.objectRoot = this.pivotNode;
44
+ this.outputs.collider = this.pivotNode;
45
+ this.mesh.visible = this.inputs.visible;
46
+ }
47
+ onEvent(eventType, eventData) {
48
+ this.notify(eventType, eventData);
49
+ }
50
+ onInputsUpdated(oldInputs) {
51
+ if (oldInputs.transparent !== this.inputs.transparent) {
52
+ this.mesh.material.transparent = this.inputs.transparent;
53
+ }
54
+ if (oldInputs.texture !== this.inputs.texture) {
55
+ const material = this.mesh.material;
56
+ material.map = this.inputs.texture;
57
+ material.needsUpdate = true;
58
+ }
59
+ if (oldInputs.visible !== this.inputs.visible) {
60
+ this.mesh.visible = this.inputs.visible;
61
+ }
62
+ if (oldInputs.polygonOffset !== this.inputs.polygonOffset) {
63
+ const material = this.mesh.material;
64
+ material.polygonOffset = this.inputs.polygonOffset;
65
+ material.polygonOffsetFactor = this.inputs.polygonOffsetFactor;
66
+ material.polygonOffsetUnits = this.inputs.polygonOffsetUnits;
67
+ }
68
+ this.mesh.scale.set(this.inputs.localScale.x, this.inputs.localScale.y / this.inputs.aspect, this.inputs.localScale.z);
69
+ this.mesh.position.set(this.inputs.localPosition.x, this.inputs.localPosition.y, this.inputs.localPosition.z);
70
+ }
71
+ onDestroy() {
72
+ this.outputs.collider = null;
73
+ this.outputs.objectRoot = null;
74
+ this.mesh.material.dispose();
75
+ this.mesh.geometry.dispose();
76
+ }
77
+ setRootScene(rootScene) {
78
+ this.rootScene = rootScene;
79
+ }
80
+ }
81
+ export const planeRendererType = 'mp.planeRenderer';
82
+ export function makePlaneRenderer() {
83
+ return new PlaneRenderer();
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxhbmVSZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvbWF0dGVycG9ydC1leHRlbnNpb25zL25lc3QtdGhlcm1vc3RhdC9QbGFuZVJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUUsd0JBQXdCLEdBQW9CLE1BQU0sbUNBQW1DLENBQUM7QUFDOUcsT0FBTyxFQUVMLElBQUksRUFDSixpQkFBaUIsRUFFakIsS0FBSyxFQUNMLG1CQUFtQixFQUNwQixNQUFNLE9BQU8sQ0FBQztBQWlCZixNQUFNLE9BQU8sYUFBYyxTQUFRLGNBQWM7SUFBakQ7O1FBQ1UsY0FBUyxHQUFvQixJQUFJLENBQUM7UUFJakMsV0FBTSxHQUFXO1lBQ3hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLENBQUM7WUFDVCxXQUFXLEVBQUUsSUFBSTtZQUNqQixPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsYUFBYSxFQUFFLEtBQUs7WUFDcEIsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLFVBQVUsRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDO1lBQzlCLGFBQWEsRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDO1NBQ2xDLENBQUE7UUFFUSxXQUFNLEdBQUc7WUFDaEIsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO1NBQ3ZDLENBQUM7SUEwRUosQ0FBQztJQXhFVSxNQUFNLENBQUMsU0FBZSxFQUFFLFlBQWtCO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxH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WSxDQUFDLFNBQW1CO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7Q0FFRjtBQU1ELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDO0FBRXBELE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NjZW5lQ29tcG9uZW50LCBDb21wb25lbnRJbnRlcmFjdGlvblR5cGUsIENvbXBvbmVudENvbnRleHQsfSBmcm9tICcuLi9zY2VuZS1jb21wb25lbnQvU2NlbmVDb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgVGV4dHVyZSxcbiAgTWVzaCxcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXG4gIE9iamVjdDNELFxuICBHcm91cCxcbiAgUGxhbmVCdWZmZXJHZW9tZXRyeVxufSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCB0eXBlIFNpemUgPSB7IHc6IG51bWJlcjsgaDogbnVtYmVyOyB9O1xuXG50eXBlIElucHV0cyA9IHtcbiAgdGV4dHVyZTogVGV4dHVyZSB8IG51bGw7XG4gIGFzcGVjdDogbnVtYmVyO1xuICB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBwb2x5Z29uT2Zmc2V0OiBib29sZWFuO1xuICBwb2x5Z29uT2Zmc2V0RmFjdG9yOiBudW1iZXI7XG4gIHBvbHlnb25PZmZzZXRVbml0czogbnVtYmVyO1xuICBsb2NhbFNjYWxlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IH07XG4gIGxvY2FsUG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFBsYW5lUmVuZGVyZXIgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCBpbXBsZW1lbnRzIElQbGFuZVJlbmRlcmVyIHtcbiAgcHJpdmF0ZSByb290U2NlbmU6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWVzaDogTWVzaDtcbiAgcHJpdmF0ZSBwaXZvdE5vZGU6IE9iamVjdDNEO1xuXG4gIG92ZXJyaWRlIGlucHV0czogSW5wdXRzID0ge1xuICAgIHRleHR1cmU6IG51bGwsXG4gICAgYXNwZWN0OiAxLFxuICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgb3BhY2l0eTogMSxcbiAgICBwb2x5Z29uT2Zmc2V0OiBmYWxzZSxcbiAgICBwb2x5Z29uT2Zmc2V0RmFjdG9yOiAwLFxuICAgIHBvbHlnb25PZmZzZXRVbml0czogMCxcbiAgICBsb2NhbFNjYWxlOiB7eDogMSwgeTogMSwgejogMX0sXG4gICAgbG9jYWxQb3NpdGlvbjoge3g6IDAsIHk6IDAsIHo6IDB9LFxuICB9XG5cbiAgb3ZlcnJpZGUgZXZlbnRzID0ge1xuICAgIFtDb21wb25lbnRJbnRlcmFjdGlvblR5cGUuQ0xJQ0tdOiB0cnVlLFxuICB9O1xuXG4gIG92ZXJyaWRlIG9uSW5pdChtb2RlbE5vZGU/OiBhbnksIGlucHV0VGV4dHVyZT86IGFueSkge1xuICAgIHRoaXMuaW5wdXRzLnRleHR1cmUgPSBpbnB1dFRleHR1cmU7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgcm9vdDogbW9kZWxOb2RlXG4gICAgICB9IGFzIENvbXBvbmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgdGhpcy5waXZvdE5vZGUgPSBuZXcgR3JvdXAoKTtcblxuICAgIHRoaXMubWVzaCA9IG5ldyBNZXNoKFxuICAgICAgbmV3IFBsYW5lQnVmZmVyR2VvbWV0cnkoMS4wLCAxLjApLFxuICAgICAgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcbiAgICAgICAgdHJhbnNwYXJlbnQ6IHRoaXMuaW5wdXRzLnRyYW5zcGFyZW50LFxuICAgICAgICBtYXA6IHRoaXMuaW5wdXRzLnRleHR1cmUsXG4gICAgICAgIG9wYWNpdHk6IHRoaXMuaW5wdXRzLm9wYWNpdHksXG4gICAgICAgIHBvbHlnb25PZmZzZXQ6IHRoaXMuaW5wdXRzLnBvbHlnb25PZmZzZXQsXG4gICAgICAgIHBvbHlnb25PZmZzZXRGYWN0b3I6IHRoaXMuaW5wdXRzLnBvbHlnb25PZmZzZXRGYWN0b3IsXG4gICAgICAgIHBvbHlnb25PZmZzZXRVbml0czogdGhpcy5pbnB1dHMucG9seWdvbk9mZnNldFVuaXRzLFxuICAgICAgfSkpO1xuICAgIHRoaXMubWVzaC5zY2FsZS5zZXQodGhpcy5pbnB1dHMubG9jYWxTY2FsZS54LCB0aGlzLmlucHV0cy5sb2NhbFNjYWxlLnkgLyB0aGlzLmlucHV0cy5hc3BlY3QsIHRoaXMuaW5wdXRzLmxvY2FsU2NhbGUueik7XG4gICAgdGhpcy5tZXNoLnBvc2l0aW9uLnNldCh0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLngsIHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueSwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi56KTtcbiAgICB0aGlzLm1lc2gudXBkYXRlTWF0cml4V29ybGQoKTtcbiAgICB0aGlzLnBpdm90Tm9kZS5hZGQodGhpcy5tZXNoKTtcblxuICAgIHRoaXMub3V0cHV0cy5vYmplY3RSb290ID0gdGhpcy5waXZvdE5vZGU7XG4gICAgdGhpcy5vdXRwdXRzLmNvbGxpZGVyID0gdGhpcy5waXZvdE5vZGU7XG4gICAgdGhpcy5tZXNoLnZpc2libGUgPSB0aGlzLmlucHV0cy52aXNpYmxlO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25FdmVudChldmVudFR5cGU6IHN0cmluZywgZXZlbnREYXRhOiB1bmtub3duKSB7XG4gICAgdGhpcy5ub3RpZnkoZXZlbnRUeXBlLCBldmVudERhdGEpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25JbnB1dHNVcGRhdGVkKG9sZElucHV0czogSW5wdXRzKSB7XG4gICAgaWYgKG9sZElucHV0cy50cmFuc3BhcmVudCAhPT0gdGhpcy5pbnB1dHMudHJhbnNwYXJlbnQpIHtcbiAgICAgICh0aGlzLm1lc2gubWF0ZXJpYWwgYXMgTWVzaEJhc2ljTWF0ZXJpYWwpLnRyYW5zcGFyZW50ID0gdGhpcy5pbnB1dHMudHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZElucHV0cy50ZXh0dXJlICE9PSB0aGlzLmlucHV0cy50ZXh0dXJlKSB7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWVzaC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbDtcbiAgICAgIG1hdGVyaWFsLm1hcCA9IHRoaXMuaW5wdXRzLnRleHR1cmU7XG4gICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9sZElucHV0cy52aXNpYmxlICE9PSB0aGlzLmlucHV0cy52aXNpYmxlKSB7XG4gICAgICB0aGlzLm1lc2gudmlzaWJsZSA9IHRoaXMuaW5wdXRzLnZpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKG9sZElucHV0cy5wb2x5Z29uT2Zmc2V0ICE9PSB0aGlzLmlucHV0cy5wb2x5Z29uT2Zmc2V0KSB7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWVzaC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbDtcbiAgICAgIG1hdGVyaWFsLnBvbHlnb25PZmZzZXQgPSB0aGlzLmlucHV0cy5wb2x5Z29uT2Zmc2V0O1xuICAgICAgbWF0ZXJpYWwucG9seWdvbk9mZnNldEZhY3RvciA9IHRoaXMuaW5wdXRzLnBvbHlnb25PZmZzZXRGYWN0b3I7XG4gICAgICBtYXRlcmlhbC5wb2x5Z29uT2Zmc2V0VW5pdHMgPSB0aGlzLmlucHV0cy5wb2x5Z29uT2Zmc2V0VW5pdHM7XG4gICAgfVxuXG4gICAgdGhpcy5tZXNoLnNjYWxlLnNldCh0aGlzLmlucHV0cy5sb2NhbFNjYWxlLngsIHRoaXMuaW5wdXRzLmxvY2FsU2NhbGUueSAvIHRoaXMuaW5wdXRzLmFzcGVjdCwgdGhpcy5pbnB1dHMubG9jYWxTY2FsZS56KTtcbiAgICB0aGlzLm1lc2gucG9zaXRpb24uc2V0KHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueCwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi55LCB0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLnopO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIHRoaXMub3V0cHV0cy5jb2xsaWRlciA9IG51bGw7XG4gICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QgPSBudWxsO1xuXG4gICAgKHRoaXMubWVzaC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xuICAgIHRoaXMubWVzaC5nZW9tZXRyeS5kaXNwb3NlKCk7XG4gIH1cblxuICBzZXRSb290U2NlbmUocm9vdFNjZW5lOiBPYmplY3QzRCkge1xuICAgIHRoaXMucm9vdFNjZW5lID0gcm9vdFNjZW5lO1xuICB9XG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGxhbmVSZW5kZXJlciBleHRlbmRzIFNjZW5lQ29tcG9uZW50IHtcbiAgaW5wdXRzOiBJbnB1dHM7XG59XG5cbmV4cG9ydCBjb25zdCBwbGFuZVJlbmRlcmVyVHlwZSA9ICdtcC5wbGFuZVJlbmRlcmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQbGFuZVJlbmRlcmVyKCkge1xuICByZXR1cm4gbmV3IFBsYW5lUmVuZGVyZXIoKTtcbn1cbiJdfQ==