@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.
- package/esm2020/lib/matterport-extensions/hsl-loader/HlsLoader.mjs +68 -0
- package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +51 -0
- package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +62 -0
- package/esm2020/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +190 -0
- package/esm2020/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +85 -0
- package/esm2020/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
- package/esm2020/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
- package/esm2020/lib/matterport-extensions/tv-player/TvPlayer.mjs +98 -0
- package/esm2020/lib/matterport-extensions/video-renderer/VideoRenderer.mjs +64 -0
- package/esm2020/lib/services/matterport.service.mjs +68 -9
- package/esm2020/lib/services/models/object3D.service.mjs +1 -1
- package/esm2020/lib/services/models/poi.service.mjs +1 -1
- package/esm2020/lib/services/viewer.service.mjs +1 -1
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +511 -30
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +511 -30
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts +26 -0
- package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts.map +1 -0
- package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts +31 -0
- package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts.map +1 -0
- package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts +38 -0
- package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts.map +1 -0
- package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts +42 -0
- package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts.map +1 -0
- package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts +46 -0
- package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts.map +1 -0
- package/lib/matterport-extensions/tv-player/TvPlayer.d.ts +26 -0
- package/lib/matterport-extensions/tv-player/TvPlayer.d.ts.map +1 -0
- package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts +26 -0
- package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts.map +1 -0
- package/lib/services/matterport.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/esm2020/lib/matterport-extensions/common/src/SceneComponent.mjs +0 -128
- package/esm2020/lib/matterport-extensions/common/src/sdk-components/OrientedBox.mjs +0 -145
- package/esm2020/lib/matterport-extensions/core/src/index.mjs +0 -4
- package/esm2020/lib/matterport-extensions/core/src/observable/Observable.mjs +0 -167
- package/esm2020/lib/matterport-extensions/core/src/observable/ObservableValue.mjs +0 -38
- package/esm2020/lib/matterport-extensions/core/src/subscription/ISubscription.mjs +0 -2
- package/esm2020/lib/matterport-extensions/core/src/types.mjs +0 -2
- package/esm2020/lib/matterport-extensions/core/src/util/index.mjs +0 -165
- package/lib/matterport-extensions/common/src/SceneComponent.d.ts +0 -388
- package/lib/matterport-extensions/common/src/SceneComponent.d.ts.map +0 -1
- package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts +0 -44
- package/lib/matterport-extensions/common/src/sdk-components/OrientedBox.d.ts.map +0 -1
- package/lib/matterport-extensions/core/src/index.d.ts +0 -4
- package/lib/matterport-extensions/core/src/index.d.ts.map +0 -1
- package/lib/matterport-extensions/core/src/observable/Observable.d.ts +0 -94
- package/lib/matterport-extensions/core/src/observable/Observable.d.ts.map +0 -1
- package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts +0 -21
- package/lib/matterport-extensions/core/src/observable/ObservableValue.d.ts.map +0 -1
- package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts +0 -26
- package/lib/matterport-extensions/core/src/subscription/ISubscription.d.ts.map +0 -1
- package/lib/matterport-extensions/core/src/types.d.ts +0 -10
- package/lib/matterport-extensions/core/src/types.d.ts.map +0 -1
- package/lib/matterport-extensions/core/src/util/index.d.ts +0 -31
- 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==
|