Source: objects/BaseLight.js

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 }