Browse Source

Decouple PointerLockControls from its example.

Ulysse Carion 10 years ago
parent
commit
5afaec7d70
2 changed files with 112 additions and 130 deletions
  1. 0 122
      examples/js/controls/PointerLockControls.js
  2. 112 8
      examples/misc_controls_pointerlock.html

+ 0 - 122
examples/js/controls/PointerLockControls.js

@@ -15,18 +15,6 @@ THREE.PointerLockControls = function ( camera ) {
 	yawObject.position.y = 10;
 	yawObject.position.y = 10;
 	yawObject.add( pitchObject );
 	yawObject.add( pitchObject );
 
 
-	var moveForward = false;
-	var moveBackward = false;
-	var moveLeft = false;
-	var moveRight = false;
-
-	var isOnObject = false;
-	var canJump = false;
-
-	var prevTime = performance.now();
-
-	var velocity = new THREE.Vector3();
-
 	var PI_2 = Math.PI / 2;
 	var PI_2 = Math.PI / 2;
 
 
 	var onMouseMove = function ( event ) {
 	var onMouseMove = function ( event ) {
@@ -43,69 +31,7 @@ THREE.PointerLockControls = function ( camera ) {
 
 
 	};
 	};
 
 
-	var onKeyDown = function ( event ) {
-
-		switch ( event.keyCode ) {
-
-			case 38: // up
-			case 87: // w
-				moveForward = true;
-				break;
-
-			case 37: // left
-			case 65: // a
-				moveLeft = true; break;
-
-			case 40: // down
-			case 83: // s
-				moveBackward = true;
-				break;
-
-			case 39: // right
-			case 68: // d
-				moveRight = true;
-				break;
-
-			case 32: // space
-				if ( canJump === true ) velocity.y += 350;
-				canJump = false;
-				break;
-
-		}
-
-	};
-
-	var onKeyUp = function ( event ) {
-
-		switch( event.keyCode ) {
-
-			case 38: // up
-			case 87: // w
-				moveForward = false;
-				break;
-
-			case 37: // left
-			case 65: // a
-				moveLeft = false;
-				break;
-
-			case 40: // down
-			case 83: // s
-				moveBackward = false;
-				break;
-
-			case 39: // right
-			case 68: // d
-				moveRight = false;
-				break;
-
-		}
-
-	};
-
 	document.addEventListener( 'mousemove', onMouseMove, false );
 	document.addEventListener( 'mousemove', onMouseMove, false );
-	document.addEventListener( 'keydown', onKeyDown, false );
-	document.addEventListener( 'keyup', onKeyUp, false );
 
 
 	this.enabled = false;
 	this.enabled = false;
 
 
@@ -115,13 +41,6 @@ THREE.PointerLockControls = function ( camera ) {
 
 
 	};
 	};
 
 
-	this.isOnObject = function ( boolean ) {
-
-		isOnObject = boolean;
-		canJump = boolean;
-
-	};
-
 	this.getDirection = function() {
 	this.getDirection = function() {
 
 
 		// assumes the camera itself is not rotated
 		// assumes the camera itself is not rotated
@@ -141,45 +60,4 @@ THREE.PointerLockControls = function ( camera ) {
 
 
 	}();
 	}();
 
 
-	this.update = function () {
-
-		if ( scope.enabled === false ) return;
-
-		var time = performance.now();
-		var delta = ( time - prevTime ) / 1000;
-
-		velocity.x -= velocity.x * 10.0 * delta;
-		velocity.z -= velocity.z * 10.0 * delta;
-
-		velocity.y -= 9.8 * 100.0 * delta; // 100.0 = mass
-
-		if ( moveForward ) velocity.z -= 400.0 * delta;
-		if ( moveBackward ) velocity.z += 400.0 * delta;
-
-		if ( moveLeft ) velocity.x -= 400.0 * delta;
-		if ( moveRight ) velocity.x += 400.0 * delta;
-
-		if ( isOnObject === true ) {
-
-			velocity.y = Math.max( 0, velocity.y );
-
-		}
-
-		yawObject.translateX( velocity.x * delta );
-		yawObject.translateY( velocity.y * delta ); 
-		yawObject.translateZ( velocity.z * delta );
-
-		if ( yawObject.position.y < 10 ) {
-
-			velocity.y = 0;
-			yawObject.position.y = 10;
-
-			canJump = true;
-
-		}
-
-		prevTime = time;
-
-	};
-
 };
 };

+ 112 - 8
examples/misc_controls_pointerlock.html

@@ -96,6 +96,7 @@
 
 
 					if ( document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element ) {
 					if ( document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element ) {
 
 
+						controlsEnabled = true;
 						controls.enabled = true;
 						controls.enabled = true;
 
 
 						blocker.style.display = 'none';
 						blocker.style.display = 'none';
@@ -174,6 +175,16 @@
 			init();
 			init();
 			animate();
 			animate();
 
 
+			var controlsEnabled = false;
+
+			var moveForward = false;
+			var moveBackward = false;
+			var moveLeft = false;
+			var moveRight = false;
+
+			var prevTime = performance.now();
+			var velocity = new THREE.Vector3();
+
 			function init() {
 			function init() {
 
 
 				camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 );
 				camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 );
@@ -188,6 +199,69 @@
 				controls = new THREE.PointerLockControls( camera );
 				controls = new THREE.PointerLockControls( camera );
 				scene.add( controls.getObject() );
 				scene.add( controls.getObject() );
 
 
+				var onKeyDown = function ( event ) {
+
+					switch ( event.keyCode ) {
+
+						case 38: // up
+						case 87: // w
+							moveForward = true;
+							break;
+
+						case 37: // left
+						case 65: // a
+							moveLeft = true; break;
+
+						case 40: // down
+						case 83: // s
+							moveBackward = true;
+							break;
+
+						case 39: // right
+						case 68: // d
+							moveRight = true;
+							break;
+
+						case 32: // space
+							if ( canJump === true ) velocity.y += 350;
+							canJump = false;
+							break;
+
+					}
+
+				};
+
+				var onKeyUp = function ( event ) {
+
+					switch( event.keyCode ) {
+
+						case 38: // up
+						case 87: // w
+							moveForward = false;
+							break;
+
+						case 37: // left
+						case 65: // a
+							moveLeft = false;
+							break;
+
+						case 40: // down
+						case 83: // s
+							moveBackward = false;
+							break;
+
+						case 39: // right
+						case 68: // d
+							moveRight = false;
+							break;
+
+					}
+
+				};
+
+				document.addEventListener( 'keydown', onKeyDown, false );
+				document.addEventListener( 'keyup', onKeyUp, false );
+
 				raycaster = new THREE.Raycaster( new THREE.Vector3(), new THREE.Vector3( 0, - 1, 0 ), 0, 10 );
 				raycaster = new THREE.Raycaster( new THREE.Vector3(), new THREE.Vector3( 0, - 1, 0 ), 0, 10 );
 
 
 				// floor
 				// floor
@@ -274,20 +348,50 @@
 
 
 				requestAnimationFrame( animate );
 				requestAnimationFrame( animate );
 
 
-				controls.isOnObject( false );
+				if ( controlsEnabled ) {
+					raycaster.ray.origin.copy( controls.getObject().position );
+					raycaster.ray.origin.y -= 10;
 
 
-				raycaster.ray.origin.copy( controls.getObject().position );
-				raycaster.ray.origin.y -= 10;
+					var intersections = raycaster.intersectObjects( objects );
 
 
-				var intersections = raycaster.intersectObjects( objects );
+					var isOnObject = intersections.length > 0;
 
 
-				if ( intersections.length > 0 ) {
+					var time = performance.now();
+					var delta = ( time - prevTime ) / 1000;
 
 
-					controls.isOnObject( true );
+					velocity.x -= velocity.x * 10.0 * delta;
+					velocity.z -= velocity.z * 10.0 * delta;
 
 
-				}
+					velocity.y -= 9.8 * 100.0 * delta; // 100.0 = mass
+
+					if ( moveForward ) velocity.z -= 400.0 * delta;
+					if ( moveBackward ) velocity.z += 400.0 * delta;
+
+					if ( moveLeft ) velocity.x -= 400.0 * delta;
+					if ( moveRight ) velocity.x += 400.0 * delta;
+
+					if ( isOnObject === true ) {
+						velocity.y = Math.max( 0, velocity.y );
+
+						canJump = true;
+					}
+
+					controls.getObject().translateX( velocity.x * delta );
+					controls.getObject().translateY( velocity.y * delta );
+					controls.getObject().translateZ( velocity.z * delta );
+
+					if ( controls.getObject().position.y < 10 ) {
+
+						velocity.y = 0;
+						controls.getObject().position.y = 10;
+
+						canJump = true;
 
 
-				controls.update();
+					}
+
+					prevTime = time;
+
+				}
 
 
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );