import { Utils } from '../common/Utils';
import { BaseComponent } from './BaseComponent';
import { ImageTexture } from '../resources/ImageTexture';
const __ = {
private: Symbol('private'),
}
/**
* @class CameraResourceControllerComponent
* The camera resource controller compnent.
* @memberof THING
* @extends THING.BaseComponent
*/
class CameraResourceControllerComponent extends BaseComponent {
/**
* The resource(s) controller of camera, like setting background resource etc.
*/
constructor() {
super();
this[__.private] = {};
let _private = this[__.private];
_private.backgroundImage = null;
_private.background = null;
}
onRemove() {
let _private = this[__.private];
if (_private.background && _private.background.isImageTexture) {
_private.background.release();
}
_private.background = null;
super.onRemove();
}
onCopy(component) {
this.background = component.background;
}
/**
* Get/Set the background.
* @type {Number|String|Array<Number>|THING.ImageTexture}
* @private
*/
get background() {
let _private = this[__.private];
return _private.background;
}
set background(value) {
let _private = this[__.private];
let node = this.object.node;
if (_private.background && _private.background.isImageTexture) {
_private.background.release();
}
if (value) {
// Image texture resource
if (value.isImageTexture || value.isCubeTexture || value.isVideoTexture) {
_private.background = value;
_private.background.addRef();
_private.background.waitForComplete().then((image) => {
if (_private.background != image) {
return;
}
node.setBackground('Texture', image.getTextureResource());
});
}
// Image url or color from string
else if (Utils.isString(value)) {
if (_private.backgroundImage) {
_private.backgroundImage.release();
_private.backgroundImage = null;
}
// Color
if (Utils.isColorString(value)) {
_private.background = Utils.parseColor(value, [1, 1, 1]);
node.setBackground('Color', _private.background);
}
// Image url
else {
_private.backgroundImage = new ImageTexture(value);
this.background = _private.backgroundImage;
}
}
// Color from number/array
else if (Utils.isNumber(value) || Utils.isArray(value)) {
_private.background = Utils.parseColor(value, [1, 1, 1]);
node.setBackground('Color', _private.background);
}
}
else {
_private.background = null;
node.clearBackground();
}
}
}
CameraResourceControllerComponent.exportProperties = [
'background',
];
export { CameraResourceControllerComponent }