UNPKG

@hughsk/fulltilt

Version:

Standalone device orientation + device motion normalization and conversion library

163 lines (110 loc) 3.79 kB
///// FULLTILT.DeviceMotion ////// FULLTILT.DeviceMotion = function (options) { this.options = options || {}; // placeholder object since no options are currently supported }; FULLTILT.DeviceMotion.prototype = { constructor: FULLTILT.DeviceMotion, start: function ( callback ) { if ( callback && Object.prototype.toString.call( callback ) == '[object Function]' ) { sensors.motion.callbacks.push( callback ); } if( !screenActive ) { if ( hasScreenOrientationAPI ) { window.screen.orientation.addEventListener( 'change', handleScreenOrientationChange, false ); } else { window.addEventListener( 'orientationchange', handleScreenOrientationChange, false ); } } if ( !sensors.motion.active ) { window.addEventListener( 'devicemotion', handleDeviceMotionChange, false ); sensors.motion.active = true; } }, stop: function () { if ( sensors.motion.active ) { window.removeEventListener( 'devicemotion', handleDeviceMotionChange, false ); sensors.motion.active = false; } }, listen: function( callback ) { this.start( callback ); }, getScreenAdjustedAcceleration: function () { var accData = sensors.motion.data && sensors.motion.data.acceleration ? sensors.motion.data.acceleration : { x: 0, y: 0, z: 0 }; var screenAccData = {}; switch ( screenOrientationAngle ) { case SCREEN_ROTATION_90: screenAccData.x = - accData.y; screenAccData.y = accData.x; break; case SCREEN_ROTATION_180: screenAccData.x = - accData.x; screenAccData.y = - accData.y; break; case SCREEN_ROTATION_270: case SCREEN_ROTATION_MINUS_90: screenAccData.x = accData.y; screenAccData.y = - accData.x; break; default: // SCREEN_ROTATION_0 screenAccData.x = accData.x; screenAccData.y = accData.y; break; } screenAccData.z = accData.z; return screenAccData; }, getScreenAdjustedAccelerationIncludingGravity: function () { var accGData = sensors.motion.data && sensors.motion.data.accelerationIncludingGravity ? sensors.motion.data.accelerationIncludingGravity : { x: 0, y: 0, z: 0 }; var screenAccGData = {}; switch ( screenOrientationAngle ) { case SCREEN_ROTATION_90: screenAccGData.x = - accGData.y; screenAccGData.y = accGData.x; break; case SCREEN_ROTATION_180: screenAccGData.x = - accGData.x; screenAccGData.y = - accGData.y; break; case SCREEN_ROTATION_270: case SCREEN_ROTATION_MINUS_90: screenAccGData.x = accGData.y; screenAccGData.y = - accGData.x; break; default: // SCREEN_ROTATION_0 screenAccGData.x = accGData.x; screenAccGData.y = accGData.y; break; } screenAccGData.z = accGData.z; return screenAccGData; }, getScreenAdjustedRotationRate: function () { var rotRateData = sensors.motion.data && sensors.motion.data.rotationRate ? sensors.motion.data.rotationRate : { alpha: 0, beta: 0, gamma: 0 }; var screenRotRateData = {}; switch ( screenOrientationAngle ) { case SCREEN_ROTATION_90: screenRotRateData.beta = - rotRateData.gamma; screenRotRateData.gamma = rotRateData.beta; break; case SCREEN_ROTATION_180: screenRotRateData.beta = - rotRateData.beta; screenRotRateData.gamma = - rotRateData.gamma; break; case SCREEN_ROTATION_270: case SCREEN_ROTATION_MINUS_90: screenRotRateData.beta = rotRateData.gamma; screenRotRateData.gamma = - rotRateData.beta; break; default: // SCREEN_ROTATION_0 screenRotRateData.beta = rotRateData.beta; screenRotRateData.gamma = rotRateData.gamma; break; } screenRotRateData.alpha = rotRateData.alpha; return screenRotRateData; }, getLastRawEventData: function () { return sensors.motion.data || {}; } };