123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- var PointerLockControls = function ( camera ) {
- var scope = this;
- var pitchObject = new THREE.Object3D();
- pitchObject.add( camera );
- var yawObject = new THREE.Object3D();
- 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 velocity = new THREE.Vector3();
- var PI_2 = Math.PI / 2;
- var onMouseMove = function ( event ) {
- if ( scope.enabled === false ) return;
- var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
- var movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;
- yawObject.rotation.y -= movementX * 0.002;
- pitchObject.rotation.x -= movementY * 0.002;
- pitchObject.rotation.x = Math.max( - PI_2, Math.min( PI_2, pitchObject.rotation.x ) );
- };
- 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 += 10;
- 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: // a
- 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;
- this.getObject = function () {
- return yawObject;
- };
- this.isOnObject = function ( boolean ) {
- isOnObject = boolean;
- canJump = boolean;
- };
- this.update = function ( delta ) {
- if ( scope.enabled === false ) return;
- delta *= 0.1;
- velocity.x += ( - velocity.x ) * 0.08 * delta;
- velocity.z += ( - velocity.z ) * 0.08 * delta;
- velocity.y -= 0.25 * delta;
- if ( moveForward ) velocity.z -= 0.12 * delta;
- if ( moveBackward ) velocity.z += 0.12 * delta;
- if ( moveLeft ) velocity.x -= 0.12 * delta;
- if ( moveRight ) velocity.x += 0.12 * delta;
- if ( isOnObject === true ) {
- velocity.y = Math.max( 0, velocity.y );
- }
- yawObject.translateX( velocity.x );
- yawObject.translateY( velocity.y );
- yawObject.translateZ( velocity.z );
- if ( yawObject.position.y < 10 ) {
- velocity.y = 0;
- yawObject.position.y = 10;
- canJump = true;
- }
- };
- };
|