Source: objects/HemisphereLight.js

import { Utils } from '../common/Utils';
import { BaseLight } from './BaseLight';

/**
 * @class HemisphereLight
 * The hemisphere light object.
 * @memberof THING
 * @extends THING.BaseLight
 * @public
 */
class HemisphereLight extends BaseLight {

	/**
	 * THe hemisphere light object in scene.
	 * @param {Object} param The initial parameters.
	 */
	constructor(param = {}) {
		super(param);
	}

	onCopy(object) {
		super.onCopy(object);

		this.groundColor = object.groundColor;
	}

	onBeforeSetup(param) {
		param['renderableNode'] = param['renderableNode'] || Utils.createObject('HemisphereLight');

		super.onBeforeSetup(param);
	}

	onSetupComplete(param) {
		super.onSetupComplete(param);

		// Sync options
		Utils.syncOptions(this, [
			'groundColor',
		], param, param['extras'] || param['external']);
	}

	onExportExternalData() {
		let external = Object.assign({}, super.onExportExternalData());
		Utils.setAttributeIfExist(external, 'groundColor', this);;
		return external;
	}

	// #region Accessor

	/**
	 * Get/Set ground color.
	 * @type {Number|String|Array<Number>}
	 * @public
	 */
	get groundColor() {
		let color = [0, 0, 0];
		this.bodyNode.getGroundColor(color);

		return Utils.colorToHexString(color);
	}
	set groundColor(value) {
		let color = Utils.parseColor(value);

		this.bodyNode.setGroundColor(color);
	}

	// #endregion

	/**
	 * Check whether it's HemisphereLight type or inherit from it.
	 * @type {Boolean}
	 */
	get isHemisphereLight() {
		return true;
	}

}

export { HemisphereLight }