Переглянути джерело

Merge pull request #17305 from higharc/layers-enable-disable-all

Add functions to enable/disable all layers
Mr.doob 6 роки тому
батько
коміт
87f983d6ca
4 змінених файлів з 60 додано та 13 видалено
  1. 10 0
      docs/api/en/core/Layers.html
  2. 35 13
      examples/webgl_layers.html
  3. 3 0
      src/core/Layers.d.ts
  4. 12 0
      src/core/Layers.js

+ 10 - 0
docs/api/en/core/Layers.html

@@ -80,6 +80,16 @@
 			Toggle membership of *layer*.
 		</p>
 
+		<h3>[method:null enableAll]()</h3>
+		<p>
+			Add membership to all layers.
+		</p>
+
+		<h3>[method:null disableAll]()</h3>
+		<p>
+			Remove membership from all layers.
+		</p>
+
 		<h2>Source</h2>
 
 		<p>

+ 35 - 13
examples/webgl_layers.html

@@ -93,26 +93,48 @@
 				stats = new Stats();
 				container.appendChild( stats.dom );
 
-				var layers = { red: true, green: true, blue: true };
+				var layers = {
 
-				//
-				// Init gui
-				var gui = new GUI();
-				gui.add( layers, 'red' ).onChange( function () {
+					'toggle red': function() {
+
+						camera.layers.toggle( 0 );
+
+					},
+
+					'toggle green': function() {
+
+						camera.layers.toggle( 1 );
+
+					},
 
-					camera.layers.toggle( 0 );
+					'toggle blue': function() {
 
-				} );
-				gui.add( layers, 'green' ).onChange( function () {
+						camera.layers.toggle( 2 );
 
-					camera.layers.toggle( 1 );
+					},
 
-				} );
-				gui.add( layers, 'blue' ).onChange( function () {
+					'enable all': function() {
 
-					camera.layers.toggle( 2 );
+						camera.layers.enableAll();
 
-				} );
+					},
+
+					'disable all': function() {
+
+						camera.layers.disableAll();
+
+					}
+
+				};
+
+				//
+				// Init gui
+				var gui = new GUI();
+				gui.add( layers, 'toggle red' );
+				gui.add( layers, 'toggle green' );
+				gui.add( layers, 'toggle blue' );
+				gui.add( layers, 'enable all' );
+				gui.add( layers, 'disable all' );
 
 				window.addEventListener( 'resize', onWindowResize, false );
 

+ 3 - 0
src/core/Layers.d.ts

@@ -10,4 +10,7 @@ export class Layers {
 	disable( channel: number ): void;
 	test( layers: Layers ): boolean;
 
+	enableAll (): void;
+	disableAll (): void;
+
 }

+ 12 - 0
src/core/Layers.js

@@ -38,6 +38,18 @@ Object.assign( Layers.prototype, {
 
 		return ( this.mask & layers.mask ) !== 0;
 
+	},
+
+	enableAll: function () {
+
+		this.mask = 0xffffffff | 0;
+
+	},
+
+	disableAll: function () {
+
+		this.mask = 0;
+
 	}
 
 } );