import { Utils } from '../common/Utils';
import { BaseLight } from './BaseLight';
/**
* HemisphereLight - 半球光(天光)
*
* 模拟天空和地面的漫反射光照,从上方照射一种颜色、从下方照射另一种颜色。
*
* @class HemisphereLight
* @memberof THING
* @extends THING.BaseLight
* @public
*
* @example
const light = new THING.HemisphereLight({
color: '#87ceeb',
groundColor: '#8b4513',
intensity: 0.6,
});
*/
class HemisphereLight extends BaseLight {
/**
* 构造函数
* @param {object} param 参数对象。
* @param {number|string|Array<number>} param.color 光的颜色
* @param {number|string|Array<number>} param.groundColor 地面颜色
* @param {number} param.intensity 光的强度
* @constructor
* @public
*/
constructor(param = {}) {
super(param);
}
onCopy(object) {
super.onCopy(object);
this.groundColor = object.groundColor;
}
onBeforeSetup(param) {
param['renderableNode'] = param['renderableNode'] || Utils.createObject('HemisphereLight', { app: this.app });
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;
}
onBeforeDestroy() {
if (this.app.objectManager.keepAliveObjects.includes(this)) {
return false;
}
if (!super.onBeforeDestroy()) {
return false;
}
return true;
}
// #region Accessor
/**
* 获取/设置 地面颜色
* @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 }