@openhps/core
Version:
Open Hybrid Positioning System - Core component
75 lines (69 loc) • 2.04 kB
JavaScript
import { Object3D } from '../core/Object3D.js';
import { Color } from '../math/Color.js';
/**
* Abstract base class for lights - all other light types inherit the
* properties and methods described here.
*
* @abstract
* @augments Object3D
*/
class Light extends Object3D {
/**
* Constructs a new light.
*
* @param {(number|Color|string)} [color=0xffffff] - The light's color.
* @param {number} [intensity=1] - The light's strength/intensity.
*/
constructor(color, intensity = 1) {
super();
/**
* This flag can be used for type testing.
*
* @type {boolean}
* @readonly
* @default true
*/
this.isLight = true;
this.type = 'Light';
/**
* The light's color.
*
* @type {Color}
*/
this.color = new Color(color);
/**
* The light's intensity.
*
* @type {number}
* @default 1
*/
this.intensity = intensity;
}
/**
* Frees the GPU-related resources allocated by this instance. Call this
* method whenever this instance is no longer used in your app.
*/
dispose() {
// Empty here in base class; some subclasses override.
}
copy(source, recursive) {
super.copy(source, recursive);
this.color.copy(source.color);
this.intensity = source.intensity;
return this;
}
toJSON(meta) {
const data = super.toJSON(meta);
data.object.color = this.color.getHex();
data.object.intensity = this.intensity;
if (this.groundColor !== undefined) data.object.groundColor = this.groundColor.getHex();
if (this.distance !== undefined) data.object.distance = this.distance;
if (this.angle !== undefined) data.object.angle = this.angle;
if (this.decay !== undefined) data.object.decay = this.decay;
if (this.penumbra !== undefined) data.object.penumbra = this.penumbra;
if (this.shadow !== undefined) data.object.shadow = this.shadow.toJSON();
if (this.target !== undefined) data.object.target = this.target.uuid;
return data;
}
}
export { Light };