UNPKG

three

Version:

JavaScript 3D library

122 lines (91 loc) 2.26 kB
/** * A layers object assigns an 3D object to 1 or more of 32 * layers numbered `0` to `31` - internally the layers are stored as a * bit mask], and by default all 3D objects are a member of layer `0`. * * This can be used to control visibility - an object must share a layer with * a camera to be visible when that camera's view is * rendered. * * All classes that inherit from {@link Object3D} have an `layers` property which * is an instance of this class. */ class Layers { /** * Constructs a new layers instance, with membership * initially set to layer `0`. */ constructor() { /** * A bit mask storing which of the 32 layers this layers object is currently * a member of. * * @type {number} */ this.mask = 1 | 0; } /** * Sets membership to the given layer, and remove membership all other layers. * * @param {number} layer - The layer to set. */ set( layer ) { this.mask = ( 1 << layer | 0 ) >>> 0; } /** * Adds membership of the given layer. * * @param {number} layer - The layer to enable. */ enable( layer ) { this.mask |= 1 << layer | 0; } /** * Adds membership to all layers. */ enableAll() { this.mask = 0xffffffff | 0; } /** * Toggles the membership of the given layer. * * @param {number} layer - The layer to toggle. */ toggle( layer ) { this.mask ^= 1 << layer | 0; } /** * Removes membership of the given layer. * * @param {number} layer - The layer to enable. */ disable( layer ) { this.mask &= ~ ( 1 << layer | 0 ); } /** * Removes the membership from all layers. */ disableAll() { this.mask = 0; } /** * Returns `true` if this and the given layers object have at least one * layer in common. * * @param {Layers} layers - The layers to test. * @return {boolean } Whether this and the given layers object have at least one layer in common or not. */ test( layers ) { return ( this.mask & layers.mask ) !== 0; } /** * Returns `true` if the given layer is enabled. * * @param {number} layer - The layer to test. * @return {boolean } Whether the given layer is enabled or not. */ isEnabled( layer ) { return ( this.mask & ( 1 << layer | 0 ) ) !== 0; } } export { Layers };