import { Utils } from '../common/Utils'
import { BaseTickableObject3D } from './BaseTickableObject3D';
import { NodeUserDataType, InheritType } from '../const';
/**
* @class BaseLight
* The base light object.
* @memberof THING
* @extends THING.BaseTickableObject3D
*/
class BaseLight extends BaseTickableObject3D {
/**
* The base light object.
* @param {Object} param The initial parameters.
*/
constructor(param = {}) {
super(param);
}
onCopy(object) {
super.onCopy(object);
this.color = object.color;
this.intensity = object.intensity;
}
onLoadResource(options, resolve, reject) {
resolve();
}
onSetupComplete(param) {
super.onSetupComplete(param);
// Sync options
Utils.syncOptions(this, [
'color',
'intensity'
], param, param['extras'] || param['external']);
}
onExportExternalData() {
let external = Object.assign({}, super.onExportExternalData());
Utils.setAttributeIfExist(external, 'color', this);
Utils.setAttributeIfExist(external, 'intensity', this);
return external;
}
onAfterSetup(param) {
let bodyNode = this.bodyNode;
bodyNode.setName(bodyNode.getType());
// Never affect bounding box
bodyNode.getUserData()[NodeUserDataType.BoundingBoxInheritType] = InheritType.Stop;
}
// #region Accessor
// #region Render
get layerMask() {
Utils.warn('Light object can not use layer mask now');
return super.layerMask;
}
set layerMask(value) {
Utils.warn('Light object can not use layer mask now');
super.layerMask = value;
}
// #endregion
/**
* Get/Set color.
* @type {Number|String|Array<Number>}
* @private
*/
get color() {
let color = [0, 0, 0];
this.bodyNode.getColor(color);
return Utils.colorToHexString(color);
}
set color(value) {
let color = Utils.parseColor(value);
this.bodyNode.setColor(color);
}
/**
* Get/Set intensity.
* @type {Number}
* @private
*/
get intensity() {
return this.bodyNode.getIntensity();
}
set intensity(value) {
this.bodyNode.setIntensity(value);
}
// #endregion
get isLight() {
return true;
}
}
export { BaseLight }