diff --git a/examples/js/controls/PointerLockControls.js b/examples/js/controls/PointerLockControls.js index 21a0bb776ac43e2b0ac7179d98d7586874a6fa78..4b9f2993c100f990056f61b5f7b4d0fe44af7c4c 100644 --- a/examples/js/controls/PointerLockControls.js +++ b/examples/js/controls/PointerLockControls.js @@ -15,18 +15,6 @@ THREE.PointerLockControls = function ( camera ) { yawObject.position.y = 10; 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 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( 'keydown', onKeyDown, false ); - document.addEventListener( 'keyup', onKeyUp, false ); this.enabled = false; @@ -115,13 +41,6 @@ THREE.PointerLockControls = function ( camera ) { }; - this.isOnObject = function ( boolean ) { - - isOnObject = boolean; - canJump = boolean; - - }; - this.getDirection = function() { // 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; - - }; - }; diff --git a/examples/misc_controls_pointerlock.html b/examples/misc_controls_pointerlock.html index 9520c7af1de639444a259d5d5b670c906586fb5d..ed665ab4fc7bf64f5d9667101fcd58549905be16 100644 --- a/examples/misc_controls_pointerlock.html +++ b/examples/misc_controls_pointerlock.html @@ -96,6 +96,7 @@ if ( document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element ) { + controlsEnabled = true; controls.enabled = true; blocker.style.display = 'none'; @@ -174,6 +175,16 @@ init(); 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() { camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 ); @@ -188,6 +199,69 @@ controls = new THREE.PointerLockControls( camera ); 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 ); // floor @@ -274,20 +348,50 @@ 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 );