{"version":3,"sources":["webpack:///./src/plugins/GymoteRemote.js","webpack:///./node_modules/gymote/lib/gymote.js"],"names":["i","install","Vue","prototype","$mote","GymoteRemote","window","module","exports","modules","installedModules","__webpack_require__","moduleId","l","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","hasOwnProperty","p","s","LazyPoint","Point","LazyBrush","_LazyBrush2","_interopRequireDefault","_Point2","_LazyPoint2","obj","default","_createClass","defineProperties","target","props","length","descriptor","configurable","writable","Constructor","protoProps","staticProps","_Point3","_classCallCheck","instance","TypeError","_possibleConstructorReturn","self","ReferenceError","_Point","this","__proto__","getPrototypeOf","apply","arguments","subClass","superClass","constructor","setPrototypeOf","_inherits","point","x","y","angle","distance","angleRotated","Math","PI","sin","cos","diff","getDifferenceTo","sqrt","pow","atan2","GYRONORM_OPTIONS","EVENT","LAG_START","LAG_END","POINTER_MOVE","POINTER_UP","POINTER_DOWN","CALIBRATED","TOUCH","frequency","decimalCount","_GymoteScreen","_default","GymoteScreen","_Smoothing","_lazyBrush","_eventemitter","_settings","_typeof","iterator","_defineProperties","_assertThisInitialized","_setPrototypeOf","_EventEmitter","_this","isClicking","smoothX","smoothY","coordinates","touch","lastDataTimestamp","hasRemoteDelay","dataDelta","smoothing","min","round","next","buffer","intArray","Int16Array","now","Date","emit","_touchDataHandler","_pointerDataHandler","newCoordinates","getCoordinates","equalsTo","update","newTouch","EVENT_LAG_START","EVENT_LAG_END","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_POINTER_DOWN","EVENT_CALIBRATED","EVENT_TOUCH","Smoothing","amount","prev","prevRaw","input","force","smoothingOverwrite","abs","_ref","_ref$radius","radius","_ref$enabled","enabled","_ref$initialPoint","initialPoint","_isEnabled","pointer","brush","_hasMoved","toObject","newPointerPoint","_ref2","_ref2$both","both","getDistanceTo","getAngleTo","moveByAngle","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","_events","push","_eventsCount","clearEvent","EventEmitter","eventNames","events","names","slice","getOwnPropertySymbols","concat","listeners","handlers","ee","Array","listenerCount","a1","a2","a3","a4","a5","args","len","removeListener","undefined","j","on","removeAllListeners","off","prefixed","_Gyroscope","_gyroPlane","gyroscope","gyroplane","GyroPlane","width","height","lazy","ArrayBuffer","prevArray","shouldLoop","_onDataChange","requestPermission","hasGyroscope","loop","viewport","setScreenDimensions","setDistance","requestAnimationFrame","rounding","orientation","getOrientation","updateOrientation","getScreenCoordinates","e","init","_this$lazy$getBrushCo","getBrushCoordinates","set","offset","updateOffset","_gyronorm","Gyroscope","gyronorm","_hasGyroscope","_hasGyroscopeResolve","alpha","beta","_needsPermission","DeviceMotionEvent","then","response","isGranted","initGyroNorm","Promise","resolve","_this2","reject","_this3","isAvailable","deviceOrientationAvailable","start","catch","_this4","data","do","__WEBPACK_AMD_DEFINE_RESULT__","root","GyroNorm","GAME","WORLD","DEVICE_ORIENTATION","ACCELERATION","ACCELERATION_INCLUDING_GRAVITY","ROTATION_RATE","_interval","_calibrationValue","_gravityCoefficient","_isRunning","_isReady","_do","_dm","_frequency","_gravityNormalized","_orientationBase","_decimalCount","_logger","_screenAdjusted","options","rnd","number","snapShot","doSnapShot","getScreenAdjustedEuler","getFixedFrameEuler","accSnapShot","getScreenAdjustedAcceleration","accGraSnapShot","getScreenAdjustedAccelerationIncludingGravity","rotRateSnapShot","getScreenAdjustedRotationRate","alphaToSend","gamma","absolute","isAbsolute","dm","z","gx","gy","gz","log","err","message","code","gravityNormalized","orientationBase","logger","screenAdjusted","deviceOrientationPromise","FULLTILT","getDeviceOrientation","controller","deviceMotionPromise","getDeviceMotion","all","end","stop","callback","setInterval","clearInterval","normalizeGravity","flag","setHeadDirection","startLogging","stopLogging","_eventType","accelerationAvailable","accelerationIncludingGravityAvailable","rotationRateAvailable","isRunning","factory","a","b","isNaN","setTimeout","screen","callbacks","f","motion","g","h","k","active","q","DeviceOrientation","DeviceMotion","w","copy","setFromEuler","normalize","setFromRotationMatrix","elements","multiply","Quaternion","multiplyQuaternions","rotateX","rotateByAxisAngle","rotateY","rotateZ","RotationMatrix","Float32Array","identity","setFromQuaternion","multiplyMatrices","Euler","asin","alphaOffsetScreen","alphaOffsetDevice","type","removeEventListener","addEventListener","webkitCompassAccuracy","webkitCompassHeading","toString","listen","getFixedFrameQuaternion","getScreenAdjustedQuaternion","getFixedFrameMatrix","getScreenAdjustedMatrix","getLastRawEventData","ALPHA","BETA","GAMMA","acceleration","accelerationIncludingGravity","rotationRate","_GyroPlane2","_Orientation2","_vanillaVectors3d","_ref$width","DEFAULT_WIDTH","_ref$height","DEFAULT_HEIGHT","_distance","xCenter","yCenter","phoneZPos","screenPlane","Plane","Vector","xAxis","Line","yAxis","phoneLine","phoneLinePrime","rotateAroundLine","interSectionVector","getIntersectionWith","Orientation","_ref$alpha","_ref$beta","_ref$gamma","_ref3","_ref3$alpha","_ref3$beta","_ref3$gamma","_Vector2","_Line2","_Plane2","decimals","factor","getLength","axis","applyTransformationMatrix","toFixed","vector","n1","n2","n3","minus","l0","rotateAroundVector","plus","dx","dy","dz","timesScalar","isEqualTo","parseFloat","lPrime","rotate","line","p0","r1","r2","isLinearlyDependentOn","Error","cross","scalarProduct","DEFAULT_DISTANCE"],"mappings":"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","file":"js/chunk-3cbdef3e.568381e2.js","sourcesContent":["import { GymoteRemote } from 'gymote'\n\nexport default {\n install(Vue) {\n Vue.prototype.$mote = new GymoteRemote()\n }\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"gymote\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"gymote\"] = factory();\n\telse\n\t\troot[\"gymote\"] = factory();\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LazyPoint = exports.Point = exports.LazyBrush = undefined;\n\nvar _LazyBrush = __webpack_require__(8);\n\nvar _LazyBrush2 = _interopRequireDefault(_LazyBrush);\n\nvar _Point = __webpack_require__(2);\n\nvar _Point2 = _interopRequireDefault(_Point);\n\nvar _LazyPoint = __webpack_require__(1);\n\nvar _LazyPoint2 = _interopRequireDefault(_LazyPoint);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.LazyBrush = _LazyBrush2.default;\nexports.Point = _Point2.default;\nexports.LazyPoint = _LazyPoint2.default;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Point2 = __webpack_require__(2);\n\nvar _Point3 = _interopRequireDefault(_Point2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LazyPoint = function (_Point) {\n _inherits(LazyPoint, _Point);\n\n function LazyPoint() {\n _classCallCheck(this, LazyPoint);\n\n return _possibleConstructorReturn(this, (LazyPoint.__proto__ || Object.getPrototypeOf(LazyPoint)).apply(this, arguments));\n }\n\n _createClass(LazyPoint, [{\n key: 'update',\n\n /**\n * Update the x and y values\n *\n * @param {Point} point\n */\n value: function update(point) {\n this.x = point.x;\n this.y = point.y;\n }\n\n /**\n * Move the point to another position using an angle and distance\n *\n * @param {number} angle The angle in radians\n * @param {number} distance How much the point should be moved\n */\n\n }, {\n key: 'moveByAngle',\n value: function moveByAngle(angle, distance) {\n // Rotate the angle based on the browser coordinate system ([0,0] in the top left)\n var angleRotated = angle + Math.PI / 2;\n\n this.x = this.x + Math.sin(angleRotated) * distance, this.y = this.y - Math.cos(angleRotated) * distance;\n }\n\n /**\n * Check if this point is the same as another point\n *\n * @param {Point} point\n * @returns {boolean}\n */\n\n }, {\n key: 'equalsTo',\n value: function equalsTo(point) {\n return this.x === point.x && this.y === point.y;\n }\n\n /**\n * Get the difference for x and y axis to another point\n *\n * @param {Point} point\n * @returns {Point}\n */\n\n }, {\n key: 'getDifferenceTo',\n value: function getDifferenceTo(point) {\n return new _Point3.default(this.x - point.x, this.y - point.y);\n }\n\n /**\n * Calculate distance to another point\n *\n * @param {Point} point\n * @returns {Point}\n */\n\n }, {\n key: 'getDistanceTo',\n value: function getDistanceTo(point) {\n var diff = this.getDifferenceTo(point);\n\n return Math.sqrt(Math.pow(diff.x, 2) + Math.pow(diff.y, 2));\n }\n\n /**\n * Calculate the angle to another point\n *\n * @param {Point} point\n * @returns {Point}\n */\n\n }, {\n key: 'getAngleTo',\n value: function getAngleTo(point) {\n var diff = this.getDifferenceTo(point);\n\n return Math.atan2(diff.y, diff.x);\n }\n\n /**\n * Return a simple object with x and y properties\n *\n * @returns {object}\n */\n\n }, {\n key: 'toObject',\n value: function toObject() {\n return {\n x: this.x,\n y: this.y\n };\n }\n }]);\n\n return LazyPoint;\n}(_Point3.default);\n\nexports.default = LazyPoint;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Point =\n/**\n *\n * @param {number} x\n * @param {number} y\n */\nfunction Point(x, y) {\n _classCallCheck(this, Point);\n\n this.x = x;\n this.y = y;\n};\n\nexports.default = Point;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.GYRONORM_OPTIONS = exports.EVENT = void 0;\nvar EVENT = {\n LAG_START: 'lagstart',\n LAG_END: 'lagend',\n POINTER_MOVE: 'pointermove',\n POINTER_UP: 'pointerup',\n POINTER_DOWN: 'pointerdown',\n CALIBRATED: 'calibrated',\n TOUCH: 'touch'\n};\nexports.EVENT = EVENT;\nvar GYRONORM_OPTIONS = {\n frequency: 5,\n decimalCount: 7\n};\nexports.GYRONORM_OPTIONS = GYRONORM_OPTIONS;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(5);\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _GymoteScreen = _interopRequireDefault(__webpack_require__(6));\n\nvar _GymoteRemote = _interopRequireDefault(__webpack_require__(10));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @typedef {Object} DeviceOrientation\n * @property {number} alpha The alpha value.\n * @property {number} beta The beta value.\n */\n\n/**\n * @typedef {Object} ScreenPoint\n * @property {number} x The x coordinate.\n * @property {number} y The x coordinate.\n */\n\n/**\n * @module GymoteScreen\n */\n\n/**\n * @module GymoteRemote\n */\nvar _default = {\n GymoteRemote: _GymoteRemote.default,\n GymoteScreen: _GymoteScreen.default\n};\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _Smoothing = _interopRequireDefault(__webpack_require__(7));\n\nvar _lazyBrush = __webpack_require__(0);\n\nvar _eventemitter = _interopRequireDefault(__webpack_require__(9));\n\nvar _settings = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar GymoteScreen =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inherits(GymoteScreen, _EventEmitter);\n\n function GymoteScreen() {\n var _this;\n\n _classCallCheck(this, GymoteScreen);\n\n _this = _possibleConstructorReturn(this, (GymoteScreen.__proto__ || Object.getPrototypeOf(GymoteScreen)).call(this));\n _this.isClicking = false;\n _this.smoothX = new _Smoothing.default(0.3);\n _this.smoothY = new _Smoothing.default(0.3);\n _this.coordinates = new _lazyBrush.LazyPoint(0, 0);\n _this.touch = new _lazyBrush.LazyPoint(0, 0);\n _this.lastDataTimestamp = 0;\n _this.hasRemoteDelay = false;\n return _this;\n }\n /**\n * Get the smoothed coordinates from the last received remote message.\n * Depending on the given dataDelta, the smoothing is adjusted. With that,\n * when a small lag has happened, the pointer is not moved immediately to the\n * new position.\n *\n * @param {Number} x The new x coordinate from the remote.\n * @param {Number} y The new y coordinate from the remote.\n * @param {Number} dataDelta The delta in ms from the last message.\n */\n\n\n _createClass(GymoteScreen, [{\n key: \"getCoordinates\",\n value: function getCoordinates(x, y, dataDelta) {\n var smoothing = (200 - Math.min(dataDelta, 200)) / 300;\n return new _lazyBrush.Point(Math.round(this.smoothX.next(x, false, smoothing)), Math.round(this.smoothY.next(y, false, smoothing)));\n }\n /**\n * Received from the device of GymoteRemote. The message contains the pointer\n * coordinates, touch coordinates and a boolean indicating if the user is\n * clicking.\n *\n * The data is received as Uint8Array, but has been sent as Int16Array. So we\n * take the buffer of the typed array and create a new one with the correct\n * type.\n *\n * @param {ArrayBuffer} data The data from the Remote.\n */\n\n }, {\n key: \"handleRemoteData\",\n value: function handleRemoteData(buffer) {\n // Create a new array with the correct type.\n var intArray = new Int16Array(buffer); // Get and set the current timestamp.\n\n var now = Date.now();\n this.lastDataTimestamp = now; // Calculate the time delta.\n\n var dataDelta = now - this.lastDataTimestamp; // If the delta is above a threshold, emit the event once.\n\n if (dataDelta > 80) {\n if (!this.hasRemoteDelay) {\n this.emit(_settings.EVENT.LAG_START);\n this.hasRemoteDelay = true;\n }\n } else {\n if (this.hasRemoteDelay) {\n this.emit(_settings.EVENT.LAG_END);\n this.hasRemoteDelay = false;\n }\n }\n\n this._touchDataHandler(0, intArray[3] || 0);\n\n this._pointerDataHandler(intArray[0] || 0, intArray[1] || 0, (intArray[2] || 0) === 1, dataDelta);\n }\n /**\n * Handle incoming coordinate data for the pointer.\n *\n * @private\n * @param {number} x The new x coordinate of the remote.\n * @param {number} y The new y coordinate of the remote.\n * @param {boolean} isClicking If the pointer is clicking.\n * @param {number} dataDelta The time delta in ms since the last message.\n */\n\n }, {\n key: \"_pointerDataHandler\",\n value: function _pointerDataHandler(x, y, isClicking, dataDelta) {\n // Get the new coordinates.\n var newCoordinates = this.getCoordinates(x, y, dataDelta); // Only emit the pointermove event if the coordinates have actually changed.\n\n if (!this.coordinates.equalsTo(newCoordinates)) {\n this.emit(_settings.EVENT.POINTER_MOVE, newCoordinates);\n this.coordinates.update(newCoordinates);\n } // Check if isClicking has changed since the last time. If it has, then emit\n // the corresponding pointer event.\n\n\n if (isClicking !== this.isClicking) {\n if (isClicking) {\n this.emit(_settings.EVENT.POINTER_DOWN);\n } else {\n this.emit(_settings.EVENT.POINTER_UP);\n }\n\n this.isClicking = isClicking;\n }\n }\n /**\n * Handle incoming touch data.\n *\n * @private\n * @param {Number} x The x coordinates of the touchmove.\n * @param {Number} y The y coordinates of the touchmove.\n */\n\n }, {\n key: \"_touchDataHandler\",\n value: function _touchDataHandler(x, y) {\n var newTouch = new _lazyBrush.Point(x, y);\n\n if (!this.touch.equalsTo(newTouch)) {\n this.emit(_settings.EVENT.TOUCH, newTouch);\n this.touch.update(newTouch);\n }\n }\n }]);\n\n return GymoteScreen;\n}(_eventemitter.default);\n/**\n * The remote lag has exceeded the threshold.\n *\n * @member\n * @event GymoteScreen#lagstart\n */\n\n/**\n * @member\n * @type {string}\n */\n\n\nGymoteScreen.EVENT_LAG_START = _settings.EVENT.LAG_START;\n/**\n * The remote lag has returned below the threshold.\n *\n * @member\n * @event GymoteScreen#lagend\n */\n\n/**\n * @member\n * @type {string}\n */\n\nGymoteScreen.EVENT_LAG_END = _settings.EVENT.LAG_END;\n/**\n * The pointer has moved.\n *\n * @member\n * @event GymoteScreen#pointermove\n * @type {ScreenPoint}\n */\n\n/**\n * @member\n * @type {string}\n */\n\nGymoteScreen.EVENT_POINTER_MOVE = _settings.EVENT.POINTER_MOVE;\n/**\n * The pointer was released.\n *\n * @member\n * @event GymoteScreen#pointerup\n * @type {ScreenPoint}\n */\n\n/**\n * @member\n * @type {string}\n */\n\nGymoteScreen.EVENT_POINTER_UP = _settings.EVENT.POINTER_UP;\n/**\n * The pointer is pressing.\n *\n * @member\n * @event GymoteScreen#pointerdown\n * @type {ScreenPoint}\n */\n\n/**\n * @member\n * @type {string}\n */\n\nGymoteScreen.EVENT_POINTER_DOWN = _settings.EVENT.POINTER_DOWN;\n/**\n * The gyroscope has been calibrated.\n *\n * @member\n * @event GymoteScreen#calibrated\n */\n\n/**\n * @member\n * @type {string}\n */\n\nGymoteScreen.EVENT_CALIBRATED = _settings.EVENT.CALIBRATED;\n/**\n * The touch values have changed.\n *\n * @member\n * @event GymoteScreen#touch\n * @type {ScreenPoint}\n */\n\n/**\n * @member\n * @type {string}\n */\n\nGymoteScreen.EVENT_TOUCH = _settings.EVENT.TOUCH;\nvar _default = GymoteScreen;\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Slowly ease a value to a new value.\n */\nvar Smoothing =\n/*#__PURE__*/\nfunction () {\n function Smoothing(amount) {\n _classCallCheck(this, Smoothing);\n\n this.prev = 0;\n this.prevRaw = 0;\n this.smoothing = amount;\n }\n /**\n * Get the next eased value.\n *\n * @param {Number} input The input value\n * @param {Boolean} force If true, the value will be updated immediately.\n */\n\n\n _createClass(Smoothing, [{\n key: \"next\",\n value: function next(input, force, smoothingOverwrite) {\n var smoothing = smoothingOverwrite || this.smoothing;\n\n if (Math.abs(input - this.prev) > 0.1 || !force) {\n var value = this.prev + smoothing * (input - this.prev);\n this.prev = value;\n return value;\n } else {\n this.prev = input;\n return this.prev;\n }\n }\n }]);\n\n return Smoothing;\n}();\n\nexports.default = Smoothing;\nmodule.exports = exports.default;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _LazyPoint = __webpack_require__(1);\n\nvar _LazyPoint2 = _interopRequireDefault(_LazyPoint);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RADIUS_DEFAULT = 30;\n\nvar LazyBrush = function () {\n /**\n * constructor\n *\n * @param {object} settings\n * @param {number} settings.radius The radius for the lazy area\n * @param {boolean} settings.enabled\n */\n function LazyBrush() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$radius = _ref.radius,\n radius = _ref$radius === undefined ? RADIUS_DEFAULT : _ref$radius,\n _ref$enabled = _ref.enabled,\n enabled = _ref$enabled === undefined ? true : _ref$enabled,\n _ref$initialPoint = _ref.initialPoint,\n initialPoint = _ref$initialPoint === undefined ? { x: 0, y: 0 } : _ref$initialPoint;\n\n _classCallCheck(this, LazyBrush);\n\n this.radius = radius;\n this._isEnabled = enabled;\n\n this.pointer = new _LazyPoint2.default(initialPoint.x, initialPoint.y);\n this.brush = new _LazyPoint2.default(initialPoint.x, initialPoint.y);\n\n this.angle = 0;\n this.distance = 0;\n this._hasMoved = false;\n }\n\n /**\n * Enable lazy brush calculations.\n *\n */\n\n\n _createClass(LazyBrush, [{\n key: 'enable',\n value: function enable() {\n this._isEnabled = true;\n }\n\n /**\n * Disable lazy brush calculations.\n *\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n this._isEnabled = false;\n }\n\n /**\n * @returns {boolean}\n */\n\n }, {\n key: 'isEnabled',\n value: function isEnabled() {\n return this._isEnabled;\n }\n\n /**\n * Update the radius\n *\n * @param {number} radius\n */\n\n }, {\n key: 'setRadius',\n value: function setRadius(radius) {\n this.radius = radius;\n }\n\n /**\n * Return the current radius\n *\n * @returns {number}\n */\n\n }, {\n key: 'getRadius',\n value: function getRadius() {\n return this.radius;\n }\n\n /**\n * Return the brush coordinates as a simple object\n *\n * @returns {object}\n */\n\n }, {\n key: 'getBrushCoordinates',\n value: function getBrushCoordinates() {\n return this.brush.toObject();\n }\n\n /**\n * Return the pointer coordinates as a simple object\n *\n * @returns {object}\n */\n\n }, {\n key: 'getPointerCoordinates',\n value: function getPointerCoordinates() {\n return this.pointer.toObject();\n }\n\n /**\n * Return the brush as a LazyPoint\n *\n * @returns {LazyPoint}\n */\n\n }, {\n key: 'getBrush',\n value: function getBrush() {\n return this.brush;\n }\n\n /**\n * Return the pointer as a LazyPoint\n *\n * @returns {LazyPoint}\n */\n\n }, {\n key: 'getPointer',\n value: function getPointer() {\n return this.pointer;\n }\n\n /**\n * Return the angle between pointer and brush\n *\n * @returns {number} Angle in radians\n */\n\n }, {\n key: 'getAngle',\n value: function getAngle() {\n return this.angle;\n }\n\n /**\n * Return the distance between pointer and brush\n *\n * @returns {number} Distance in pixels\n */\n\n }, {\n key: 'getDistance',\n value: function getDistance() {\n return this.distance;\n }\n\n /**\n * Return if the previous update has moved the brush.\n *\n * @returns {boolean} Whether the brush moved previously.\n */\n\n }, {\n key: 'brushHasMoved',\n value: function brushHasMoved() {\n return this._hasMoved;\n }\n\n /**\n * Updates the pointer point and calculates the new brush point.\n *\n * @param {Point} newPointerPoint\n * @param {Object} options\n * @param {Boolean} options.both Force update pointer and brush\n * @returns {Boolean} Whether any of the two points changed\n */\n\n }, {\n key: 'update',\n value: function update(newPointerPoint) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$both = _ref2.both,\n both = _ref2$both === undefined ? false : _ref2$both;\n\n this._hasMoved = false;\n if (this.pointer.equalsTo(newPointerPoint) && !both) {\n return false;\n }\n\n this.pointer.update(newPointerPoint);\n\n if (both) {\n this._hasMoved = true;\n this.brush.update(newPointerPoint);\n return true;\n }\n\n if (this._isEnabled) {\n this.distance = this.pointer.getDistanceTo(this.brush);\n this.angle = this.pointer.getAngleTo(this.brush);\n\n if (this.distance > this.radius) {\n this.brush.moveByAngle(this.angle, this.distance - this.radius);\n this._hasMoved = true;\n }\n } else {\n this.distance = 0;\n this.angle = 0;\n this.brush.update(newPointerPoint);\n this._hasMoved = true;\n }\n\n return true;\n }\n }]);\n\n return LazyBrush;\n}();\n\nexports.default = LazyBrush;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif (true) {\n module.exports = EventEmitter;\n}\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _Gyroscope = _interopRequireDefault(__webpack_require__(11));\n\nvar _gyroPlane = __webpack_require__(14);\n\nvar _lazyBrush = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar GymoteRemote =\n/*#__PURE__*/\nfunction () {\n function GymoteRemote() {\n _classCallCheck(this, GymoteRemote);\n\n this.gyroscope = new _Gyroscope.default();\n this.gyroplane = new _gyroPlane.GyroPlane({\n width: 1280,\n height: 900,\n distance: 1280\n });\n this.lazy = new _lazyBrush.LazyBrush({\n radius: 2,\n enabled: true\n });\n this.isClicking = false;\n this.touch = {\n x: 0,\n y: 0\n };\n this.buffer = new ArrayBuffer(8);\n this.intArray = new Int16Array(this.buffer, 0, 4);\n this.prevArray = new Int16Array(4);\n this.shouldLoop = false;\n\n this._onDataChange = function () {};\n }\n /**\n * if the device requires user permission to access DeviceMotion events, this\n * will trigger the dialog asking the user for permission. Promise is\n * resolved once access has been granted or rejected.\n *\n * @returns {Promise} True if permission has been granted or is not\n * required by device.\n */\n\n\n _createClass(GymoteRemote, [{\n key: \"requestGyroscopePermission\",\n value: function requestGyroscopePermission() {\n return this.gyroscope.requestPermission();\n }\n /**\n * Check if the device has a gyroscope and it can be accessed.\n *\n * @returns {Promise}\n */\n\n }, {\n key: \"deviceHasGyroscope\",\n value: function deviceHasGyroscope() {\n return this.gyroscope.hasGyroscope();\n }\n /**\n * Start the data loop when the connected event is emitted.\n */\n\n }, {\n key: \"start\",\n value: function start() {\n this.shouldLoop = true;\n this.loop();\n }\n /**\n * Stop the data loop.\n */\n\n }, {\n key: \"stop\",\n value: function stop() {\n this.shouldLoop = false;\n }\n /**\n * Received from GymoteScreen when the viewport of the screen device changes.\n *\n * @param {string} message The received message containing the stringified\n * viewport object.\n */\n\n }, {\n key: \"updateScreenViewport\",\n value: function updateScreenViewport(viewport) {\n this.gyroplane.setScreenDimensions(viewport);\n }\n /**\n * Received from GymoteScreen when the distance has changed.\n *\n * @param {string} message The received message containing the numeric\n * distance.\n */\n\n }, {\n key: \"updateScreenDistance\",\n value: function updateScreenDistance(distance) {\n this.gyroplane.setDistance(distance);\n }\n /**\n * The requestAnimationFrame loop for gathering data from the gyroscope and\n * this instance's state.\n */\n\n }, {\n key: \"loop\",\n value: function loop() {\n if (!this.shouldLoop) {\n return;\n }\n\n window.requestAnimationFrame(this.loop.bind(this)); // When not clicking the orientation values can be rounded more, so that\n // less messages are sent.\n\n var rounding = this.isClicking ? 100 : 25;\n var orientation = this.gyroscope.getOrientation(rounding);\n this.gyroplane.updateOrientation(orientation);\n\n try {\n var coordinates = this.gyroplane.getScreenCoordinates();\n this.lazy.update(coordinates);\n } catch (e) {\n this.gyroplane.init();\n } // Get the lazy coordinates.\n\n\n var _this$lazy$getBrushCo = this.lazy.getBrushCoordinates(),\n x = _this$lazy$getBrushCo.x,\n y = _this$lazy$getBrushCo.y; // Set the new values to the array.\n\n\n this.intArray.set([Math.round(x), Math.round(y), this.isClicking ? 1 : 0, Math.round(this.touch.y)], 0); // Only send the data if it actually has changed.\n\n if (this.prevArray[0] !== this.intArray[0] || this.prevArray[1] !== this.intArray[1] || this.prevArray[2] !== this.intArray[2] || this.prevArray[3] !== this.intArray[3]) {\n this._onDataChange(this.buffer);\n\n this.prevArray.set(this.intArray, 0);\n }\n }\n /**\n * Updates isClicking.\n *\n * @param {boolean} isClicking\n */\n\n }, {\n key: \"updateClick\",\n value: function updateClick(isClicking) {\n this.isClicking = isClicking;\n }\n /**\n * Update the touch coordinates.\n *\n * @param {object} touch The touch position.\n * @param {number} touch.x The x coordinate of the touch.\n * @param {number} touch.y The y coordinate of the touch.\n */\n\n }, {\n key: \"updateTouch\",\n value: function updateTouch(touch) {\n this.touch = touch;\n }\n /**\n * Get the current orientation values and use them as the offset for further\n * calculations. This will result in the pointer being centered in the middle\n * of the viewport.\n */\n\n }, {\n key: \"calibrate\",\n value: function calibrate() {\n var offset = this.gyroscope.getOrientation();\n this.gyroplane.updateOffset(offset);\n }\n }]);\n\n return GymoteRemote;\n}();\n\nvar _default = GymoteRemote;\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _gyronorm = _interopRequireDefault(__webpack_require__(12));\n\nvar _settings = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n__webpack_require__(13);\n/**\n * Initializes GyroNorm for reading the orientation from the gyroscope.\n *\n * @private\n * @class\n */\n\n\nvar Gyroscope =\n/*#__PURE__*/\nfunction () {\n function Gyroscope() {\n _classCallCheck(this, Gyroscope);\n\n this.gyronorm = new _gyronorm.default();\n this._hasGyroscope = null;\n this._hasGyroscopeResolve = null;\n this.alpha = 0;\n this.beta = 0;\n this._needsPermission = !!window.DeviceMotionEvent && typeof window.DeviceMotionEvent.requestPermission === 'function';\n }\n\n _createClass(Gyroscope, [{\n key: \"needsPermission\",\n value: function needsPermission() {\n return this._needsPermission;\n }\n }, {\n key: \"requestPermission\",\n value: function requestPermission() {\n var _this = this;\n\n if (!this._needsPermission) {\n return Promise.resolve(true);\n }\n\n return window.DeviceMotionEvent.requestPermission().then(function (response) {\n var isGranted = response === 'granted';\n\n if (isGranted) {\n _this.initGyroNorm();\n }\n\n return isGranted;\n });\n }\n }, {\n key: \"hasGyroscope\",\n value: function hasGyroscope() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n if (_this2._hasGyroscope !== null) {\n return resolve(_this2._hasGyroscope);\n }\n\n _this2._hasGyroscopeResolve = resolve;\n });\n }\n /**\n * Initialize GyroNorm.\n */\n\n }, {\n key: \"initGyroNorm\",\n value: function initGyroNorm() {\n var _this3 = this;\n\n this.gyronorm.init(_settings.GYRONORM_OPTIONS).then(function () {\n var _this3$gyronorm$isAva = _this3.gyronorm.isAvailable(),\n deviceOrientationAvailable = _this3$gyronorm$isAva.deviceOrientationAvailable;\n\n if (deviceOrientationAvailable) {\n _this3._hasGyroscope = true;\n\n _this3.start();\n } else {\n _this3._hasGyroscope = false;\n }\n\n if (_this3._hasGyroscopeResolve) {\n _this3._hasGyroscopeResolve(_this3._hasGyroscope);\n }\n }).catch(function () {\n _this3._hasGyroscope = false;\n\n if (_this3._hasGyroscopeResolve) {\n _this3._hasGyroscopeResolve(_this3._hasGyroscope);\n }\n });\n }\n /**\n * Start reading the values from the gyroscope and store them continously.\n */\n\n }, {\n key: \"start\",\n value: function start() {\n var _this4 = this;\n\n this.gyronorm.start(function (data) {\n _this4.alpha = data.do.alpha;\n _this4.beta = data.do.beta;\n });\n }\n /**\n * Return the rounded device orientation values.\n *\n * @param {Number} rounding The rounding precision.\n * @returns {DeviceOrientation} The orientation.\n */\n\n }, {\n key: \"getOrientation\",\n value: function getOrientation() {\n var rounding = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return {\n alpha: Math.round(this.alpha * rounding) / rounding,\n beta: Math.round(this.beta * rounding) / rounding\n };\n }\n }]);\n\n return Gyroscope;\n}();\n\nvar _default = Gyroscope;\nexports.default = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_RESULT__;/**\n* JavaScript project for accessing and normalizing the accelerometer and gyroscope data on mobile devices\n*\n* @author Doruk Eker \n* @copyright Doruk Eker \n* @version 2.0.4\n* @license MIT License | http://opensource.org/licenses/MIT\n*/\n\n(function(root, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n return (root.GyroNorm = factory());\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(this, function() {\n /* Constants */\n var GAME = 'game';\n var WORLD = 'world';\n var DEVICE_ORIENTATION = 'deviceorientation';\n var ACCELERATION = 'acceleration';\n var ACCELERATION_INCLUDING_GRAVITY = 'accelerationinludinggravity';\n var ROTATION_RATE = 'rotationrate';\n\n /*-------------------------------------------------------*/\n /* PRIVATE VARIABLES */\n\n var _interval = null; // Timer to return values\n var _isCalibrating = false; // Flag if calibrating\n var _calibrationValue = 0; // Alpha offset value\n var _gravityCoefficient = 0; // Coefficient to normalze gravity related values\n var _isRunning = false; // Boolean value if GyroNorm is tracking\n var _isReady = false; // Boolean value if GyroNorm is is initialized\n\n var _do = null; // Object to store the device orientation values\n var _dm = null; // Object to store the device motion values\n\n /* OPTIONS */\n var _frequency = 50; // Frequency for the return data in milliseconds\n var _gravityNormalized = true; // Flag if to normalize gravity values\n var _orientationBase = GAME; // Can be GyroNorm.GAME or GyroNorm.WORLD. GyroNorm.GAME returns orientation values with respect to the head direction of the device. GyroNorm.WORLD returns the orientation values with respect to the actual north direction of the world.\n var _decimalCount = 2; // Number of digits after the decimals point for the return values\n var _logger = null; // Function to callback on error. There is no default value. It can only be set by the user on gn.init()\n var _screenAdjusted = false; // If set to true it will return screen adjusted values. (e.g. On a horizontal orientation of a mobile device, the head would be one of the sides, instead of the actual head of the device.)\n\n var _values = {\n do: {\n alpha: 0,\n beta: 0,\n gamma: 0,\n absolute: false\n },\n dm: {\n x: 0,\n y: 0,\n z: 0,\n gx: 0,\n gy: 0,\n gz: 0,\n alpha: 0,\n beta: 0,\n gamma: 0\n }\n }\n\n /*-------------------------------------------------------*/\n /* PUBLIC FUNCTIONS */\n\n /*\n *\n * Constructor function\n *\n */\n\n var GyroNorm = function(options) {}\n\n /* Constants */\n GyroNorm.GAME = GAME;\n GyroNorm.WORLD = WORLD;\n GyroNorm.DEVICE_ORIENTATION = DEVICE_ORIENTATION;\n GyroNorm.ACCELERATION = ACCELERATION;\n GyroNorm.ACCELERATION_INCLUDING_GRAVITY = ACCELERATION_INCLUDING_GRAVITY;\n GyroNorm.ROTATION_RATE = ROTATION_RATE;\n\n /*\n *\n * Initialize GyroNorm instance function\n *\n * @param object options - values are as follows. If set in the init function they overwrite the default option values\n * @param int options.frequency\n * @param boolean options.gravityNormalized\n * @param boolean options.orientationBase\n * @param boolean options.decimalCount\n * @param function options.logger\n * @param function options.screenAdjusted\n *\n */\n\n GyroNorm.prototype.init = function(options) {\n // Assign options that are passed with the constructor function\n if (options && options.frequency) _frequency = options.frequency;\n if (options && options.gravityNormalized) _gravityNormalized = options.gravityNormalized;\n if (options && options.orientationBase) _orientationBase = options.orientationBase;\n if (options && options.decimalCount) _decimalCount = options.decimalCount;\n if (options && options.logger) _logger = options.logger;\n if (options && options.screenAdjusted) _screenAdjusted = options.screenAdjusted;\n\n var deviceOrientationPromise = new FULLTILT.getDeviceOrientation({ 'type': _orientationBase }).then(function(controller) {\n _do = controller;\n });\n\n var deviceMotionPromise = new FULLTILT.getDeviceMotion().then(function(controller) {\n _dm = controller;\n // Set gravity coefficient\n _gravityCoefficient = (_dm.getScreenAdjustedAccelerationIncludingGravity().z > 0) ? -1 : 1;\n });\n\n return Promise.all([deviceOrientationPromise, deviceMotionPromise]).then(function() {\n _isReady = true;\n });\n }\n\n /*\n *\n * Stops all the tracking and listening on the window objects\n *\n */\n GyroNorm.prototype.end = function() {\n try {\n _isReady = false;\n this.stop();\n _dm.stop();\n _do.stop();\n } catch(err){\n log(err);\n }\n }\n\n /*\n *\n * Starts tracking the values\n *\n * @param function callback - Callback function to read the values\n *\n */\n GyroNorm.prototype.start = function(callback) {\n if (!_isReady) {\n log({ message: 'GyroNorm is not initialized yet. First call the \"init()\" function.', code: 1 });\n return;\n }\n\n _interval = setInterval(function() {\n callback(snapShot());\n }, _frequency);\n _isRunning = true;\n }\n\n /*\n *\n * Stops tracking the values\n *\n */\n GyroNorm.prototype.stop = function() {\n if (_interval) {\n clearInterval(_interval);\n _isRunning = false;\n }\n }\n\n /*\n *\n * Toggles if to normalize gravity related values\n *\n * @param boolean flag\n *\n */\n GyroNorm.prototype.normalizeGravity = function(flag) {\n _gravityNormalized = (flag) ? true : false;\n }\n\n\n /*\n *\n * Sets the current head direction as alpha = 0\n * Can only be used if device orientation is being tracked, values are not screen adjusted, value type is GyroNorm.EULER and orientation base is GyroNorm.GAME\n *\n * @return: If head direction is set successfully returns true, else false\n *\n */\n GyroNorm.prototype.setHeadDirection = function() {\n if (_screenAdjusted || _orientationBase === WORLD) {\n return false;\n }\n\n _calibrationValue = _do.getFixedFrameEuler().alpha;\n return true;\n }\n\n /*\n *\n * Sets the log function\n *\n */\n GyroNorm.prototype.startLogging = function(logger) {\n if (logger) {\n _logger = logger;\n }\n }\n\n /*\n *\n * Sets the log function to null which stops the logging\n *\n */\n GyroNorm.prototype.stopLogging = function() {\n _logger = null;\n }\n\n /*\n *\n * Returns if certain type of event is available on the device\n *\n * @param string _eventType - possible values are \"deviceorientation\" , \"devicemotion\" , \"compassneedscalibration\"\n *\n * @return true if event is available false if not\n *\n */\n GyroNorm.prototype.isAvailable = function(_eventType) {\n\n var doSnapShot = _do.getScreenAdjustedEuler();\n var accSnapShot = _dm.getScreenAdjustedAcceleration();\n var accGraSnapShot = _dm.getScreenAdjustedAccelerationIncludingGravity();\n var rotRateSnapShot = _dm.getScreenAdjustedRotationRate();\n\n switch (_eventType) {\n case DEVICE_ORIENTATION:\n return ((doSnapShot.alpha && doSnapShot.alpha !== null) && (doSnapShot.beta && doSnapShot.beta !== null) && (doSnapShot.gamma && doSnapShot.gamma !== null));\n break;\n\n case ACCELERATION:\n return (accSnapShot && accSnapShot.x && accSnapShot.y && accSnapShot.z);\n break;\n\n case ACCELERATION_INCLUDING_GRAVITY:\n return (accGraSnapShot && accGraSnapShot.x && accGraSnapShot.y && accGraSnapShot.z);\n break;\n\n case ROTATION_RATE:\n return (rotRateSnapShot && rotRateSnapShot.alpha && rotRateSnapShot.beta && rotRateSnapShot.gamma);\n break;\n\n default:\n return {\n deviceOrientationAvailable: ((doSnapShot.alpha && doSnapShot.alpha !== null) && (doSnapShot.beta && doSnapShot.beta !== null) && (doSnapShot.gamma && doSnapShot.gamma !== null)),\n accelerationAvailable: (accSnapShot && accSnapShot.x && accSnapShot.y && accSnapShot.z),\n accelerationIncludingGravityAvailable: (accGraSnapShot && accGraSnapShot.x && accGraSnapShot.y && accGraSnapShot.z),\n rotationRateAvailable: (rotRateSnapShot && rotRateSnapShot.alpha && rotRateSnapShot.beta && rotRateSnapShot.gamma)\n }\n break;\n }\n }\n\n /*\n *\n * Returns boolean value if the GyroNorm is running\n *\n */\n GyroNorm.prototype.isRunning = function() {\n return _isRunning;\n }\n\n /*-------------------------------------------------------*/\n /* PRIVATE FUNCTIONS */\n\n /*\n *\n * Utility function to round with digits after the decimal point\n *\n * @param float number - the original number to round\n *\n */\n function rnd(number) {\n return Math.round(number * Math.pow(10, _decimalCount)) / Math.pow(10, _decimalCount);\n }\n\n /*\n *\n * Starts calibration\n *\n */\n function calibrate() {\n _isCalibrating = true;\n _calibrationValues = new Array();\n }\n\n /*\n *\n * Takes a snapshot of the current deviceo orientaion and device motion values\n *\n */\n function snapShot() {\n var doSnapShot = {};\n\n if (_screenAdjusted) {\n doSnapShot = _do.getScreenAdjustedEuler();\n } else {\n doSnapShot = _do.getFixedFrameEuler();\n }\n\n var accSnapShot = _dm.getScreenAdjustedAcceleration();\n var accGraSnapShot = _dm.getScreenAdjustedAccelerationIncludingGravity();\n var rotRateSnapShot = _dm.getScreenAdjustedRotationRate();\n\n var alphaToSend = 0;\n\n if (_orientationBase === GAME) {\n alphaToSend = doSnapShot.alpha - _calibrationValue;\n alphaToSend = (alphaToSend < 0) ? (360 - Math.abs(alphaToSend)) : alphaToSend;\n } else {\n alphaToSend = doSnapShot.alpha;\n }\n\n var snapShot = {\n do: {\n alpha: rnd(alphaToSend),\n beta: rnd(doSnapShot.beta),\n gamma: rnd(doSnapShot.gamma),\n absolute: _do.isAbsolute()\n },\n dm: {\n x: rnd(accSnapShot.x),\n y: rnd(accSnapShot.y),\n z: rnd(accSnapShot.z),\n gx: rnd(accGraSnapShot.x),\n gy: rnd(accGraSnapShot.y),\n gz: rnd(accGraSnapShot.z),\n alpha: rnd(rotRateSnapShot.alpha),\n beta: rnd(rotRateSnapShot.beta),\n gamma: rnd(rotRateSnapShot.gamma)\n }\n };\n\n // Normalize gravity\n if (_gravityNormalized) {\n snapShot.dm.gx *= _gravityCoefficient;\n snapShot.dm.gy *= _gravityCoefficient;\n snapShot.dm.gz *= _gravityCoefficient;\n }\n\n return snapShot;\n }\n\n\n /*\n *\n * Starts listening to orientation event on the window object\n *\n */\n function log(err) {\n if (_logger) {\n if (typeof(err) == 'string') {\n err = { message: err, code: 0 }\n }\n _logger(err);\n }\n }\n\n return GyroNorm;\n}));\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n/*! Full Tilt v0.7 / http://github.com/richtr/Full-Tilt */\n!function(a){function b(a){return a=+a,0===a||isNaN(a)?a:a>0?1:-1}function c(a){var b=new Promise(function(b,c){var d=function(e){setTimeout(function(){a&&a.data?b():e>=20?c():d(++e)},50)};d(0)});return b}function d(){o=n?(a.screen.orientation.angle||0)*j:(a.orientation||0)*j}function e(a){l.orientation.data=a;for(var b in l.orientation.callbacks)l.orientation.callbacks[b].call(this)}function f(a){l.motion.data=a;for(var b in l.motion.callbacks)l.motion.callbacks[b].call(this)}if(void 0===a.FULLTILT||null===a.FULLTILT){var g=Math.PI,h=g/2,i=2*g,j=g/180,k=180/g,l={orientation:{active:!1,callbacks:[],data:void 0},motion:{active:!1,callbacks:[],data:void 0}},m=!1,n=a.screen&&a.screen.orientation&&void 0!==a.screen.orientation.angle&&null!==a.screen.orientation.angle?!0:!1,o=(n?a.screen.orientation.angle:a.orientation||0)*j,p=h,q=g,r=i/3,s=-h,t={};t.version=\"0.5.3\",t.getDeviceOrientation=function(a){var b=new Promise(function(b,d){var e=new t.DeviceOrientation(a);e.start();var f=new c(l.orientation);f.then(function(){b(e)})[\"catch\"](function(){e.stop(),d(\"DeviceOrientation is not supported\")})});return b},t.getDeviceMotion=function(a){var b=new Promise(function(b,d){var e=new t.DeviceMotion(a);e.start();var f=new c(l.motion);f.then(function(){b(e)})[\"catch\"](function(){e.stop(),d(\"DeviceMotion is not supported\")})});return b},t.Quaternion=function(a,c,d,e){var f;this.set=function(a,b,c,d){this.x=a||0,this.y=b||0,this.z=c||0,this.w=d||1},this.copy=function(a){this.x=a.x,this.y=a.y,this.z=a.z,this.w=a.w},this.setFromEuler=function(){var a,b,c,d,e,f,g,h,i,k,l,m;return function(n){return n=n||{},c=(n.alpha||0)*j,a=(n.beta||0)*j,b=(n.gamma||0)*j,f=c/2,d=a/2,e=b/2,g=Math.cos(d),h=Math.cos(e),i=Math.cos(f),k=Math.sin(d),l=Math.sin(e),m=Math.sin(f),this.set(k*h*i-g*l*m,g*l*i+k*h*m,g*h*m+k*l*i,g*h*i-k*l*m),this.normalize(),this}}(),this.setFromRotationMatrix=function(){var a;return function(c){return a=c.elements,this.set(.5*Math.sqrt(1+a[0]-a[4]-a[8])*b(a[7]-a[5]),.5*Math.sqrt(1-a[0]+a[4]-a[8])*b(a[2]-a[6]),.5*Math.sqrt(1-a[0]-a[4]+a[8])*b(a[3]-a[1]),.5*Math.sqrt(1+a[0]+a[4]+a[8])),this}}(),this.multiply=function(a){return f=t.Quaternion.prototype.multiplyQuaternions(this,a),this.copy(f),this},this.rotateX=function(a){return f=t.Quaternion.prototype.rotateByAxisAngle(this,[1,0,0],a),this.copy(f),this},this.rotateY=function(a){return f=t.Quaternion.prototype.rotateByAxisAngle(this,[0,1,0],a),this.copy(f),this},this.rotateZ=function(a){return f=t.Quaternion.prototype.rotateByAxisAngle(this,[0,0,1],a),this.copy(f),this},this.normalize=function(){return t.Quaternion.prototype.normalize(this)},this.set(a,c,d,e)},t.Quaternion.prototype={constructor:t.Quaternion,multiplyQuaternions:function(){var a=new t.Quaternion;return function(b,c){var d=b.x,e=b.y,f=b.z,g=b.w,h=c.x,i=c.y,j=c.z,k=c.w;return a.set(d*k+g*h+e*j-f*i,e*k+g*i+f*h-d*j,f*k+g*j+d*i-e*h,g*k-d*h-e*i-f*j),a}}(),normalize:function(a){var b=Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z+a.w*a.w);return 0===b?(a.x=0,a.y=0,a.z=0,a.w=1):(b=1/b,a.x*=b,a.y*=b,a.z*=b,a.w*=b),a},rotateByAxisAngle:function(){var a,b,c=new t.Quaternion,d=new t.Quaternion;return function(e,f,g){return a=(g||0)/2,b=Math.sin(a),d.set((f[0]||0)*b,(f[1]||0)*b,(f[2]||0)*b,Math.cos(a)),c=t.Quaternion.prototype.multiplyQuaternions(e,d),t.Quaternion.prototype.normalize(c)}}()},t.RotationMatrix=function(a,b,c,d,e,f,g,h,i){var k;this.elements=new Float32Array(9),this.identity=function(){return this.set(1,0,0,0,1,0,0,0,1),this},this.set=function(a,b,c,d,e,f,g,h,i){this.elements[0]=a||1,this.elements[1]=b||0,this.elements[2]=c||0,this.elements[3]=d||0,this.elements[4]=e||1,this.elements[5]=f||0,this.elements[6]=g||0,this.elements[7]=h||0,this.elements[8]=i||1},this.copy=function(a){this.elements[0]=a.elements[0],this.elements[1]=a.elements[1],this.elements[2]=a.elements[2],this.elements[3]=a.elements[3],this.elements[4]=a.elements[4],this.elements[5]=a.elements[5],this.elements[6]=a.elements[6],this.elements[7]=a.elements[7],this.elements[8]=a.elements[8]},this.setFromEuler=function(){var a,b,c,d,e,f,g,h,i;return function(k){return k=k||{},c=(k.alpha||0)*j,a=(k.beta||0)*j,b=(k.gamma||0)*j,d=Math.cos(a),e=Math.cos(b),f=Math.cos(c),g=Math.sin(a),h=Math.sin(b),i=Math.sin(c),this.set(f*e-i*g*h,-d*i,e*i*g+f*h,e*i+f*g*h,f*d,i*h-f*e*g,-d*h,g,d*e),this.normalize(),this}}(),this.setFromQuaternion=function(){var a,b,c,d;return function(e){return a=e.w*e.w,b=e.x*e.x,c=e.y*e.y,d=e.z*e.z,this.set(a+b-c-d,2*(e.x*e.y-e.w*e.z),2*(e.x*e.z+e.w*e.y),2*(e.x*e.y+e.w*e.z),a-b+c-d,2*(e.y*e.z-e.w*e.x),2*(e.x*e.z-e.w*e.y),2*(e.y*e.z+e.w*e.x),a-b-c+d),this}}(),this.multiply=function(a){return k=t.RotationMatrix.prototype.multiplyMatrices(this,a),this.copy(k),this},this.rotateX=function(a){return k=t.RotationMatrix.prototype.rotateByAxisAngle(this,[1,0,0],a),this.copy(k),this},this.rotateY=function(a){return k=t.RotationMatrix.prototype.rotateByAxisAngle(this,[0,1,0],a),this.copy(k),this},this.rotateZ=function(a){return k=t.RotationMatrix.prototype.rotateByAxisAngle(this,[0,0,1],a),this.copy(k),this},this.normalize=function(){return t.RotationMatrix.prototype.normalize(this)},this.set(a,b,c,d,e,f,g,h,i)},t.RotationMatrix.prototype={constructor:t.RotationMatrix,multiplyMatrices:function(){var a,b,c=new t.RotationMatrix;return function(d,e){return a=d.elements,b=e.elements,c.set(a[0]*b[0]+a[1]*b[3]+a[2]*b[6],a[0]*b[1]+a[1]*b[4]+a[2]*b[7],a[0]*b[2]+a[1]*b[5]+a[2]*b[8],a[3]*b[0]+a[4]*b[3]+a[5]*b[6],a[3]*b[1]+a[4]*b[4]+a[5]*b[7],a[3]*b[2]+a[4]*b[5]+a[5]*b[8],a[6]*b[0]+a[7]*b[3]+a[8]*b[6],a[6]*b[1]+a[7]*b[4]+a[8]*b[7],a[6]*b[2]+a[7]*b[5]+a[8]*b[8]),c}}(),normalize:function(a){var b=a.elements,c=b[0]*b[4]*b[8]-b[0]*b[5]*b[7]-b[1]*b[3]*b[8]+b[1]*b[5]*b[6]+b[2]*b[3]*b[7]-b[2]*b[4]*b[6];return b[0]/=c,b[1]/=c,b[2]/=c,b[3]/=c,b[4]/=c,b[5]/=c,b[6]/=c,b[7]/=c,b[8]/=c,a.elements=b,a},rotateByAxisAngle:function(){var a,b,c=new t.RotationMatrix,d=new t.RotationMatrix,e=!1;return function(f,g,h){return d.identity(),e=!1,a=Math.sin(h),b=Math.cos(h),1===g[0]&&0===g[1]&&0===g[2]?(e=!0,d.elements[4]=b,d.elements[5]=-a,d.elements[7]=a,d.elements[8]=b):1===g[1]&&0===g[0]&&0===g[2]?(e=!0,d.elements[0]=b,d.elements[2]=a,d.elements[6]=-a,d.elements[8]=b):1===g[2]&&0===g[0]&&0===g[1]&&(e=!0,d.elements[0]=b,d.elements[1]=-a,d.elements[3]=a,d.elements[4]=b),e?(c=t.RotationMatrix.prototype.multiplyMatrices(f,d),c=t.RotationMatrix.prototype.normalize(c)):c=f,c}}()},t.Euler=function(a,b,c){this.set=function(a,b,c){this.alpha=a||0,this.beta=b||0,this.gamma=c||0},this.copy=function(a){this.alpha=a.alpha,this.beta=a.beta,this.gamma=a.gamma},this.setFromRotationMatrix=function(){var a,b,c,d;return function(e){a=e.elements,a[8]>0?(b=Math.atan2(-a[1],a[4]),c=Math.asin(a[7]),d=Math.atan2(-a[6],a[8])):a[8]<0?(b=Math.atan2(a[1],-a[4]),c=-Math.asin(a[7]),c+=c>=0?-g:g,d=Math.atan2(a[6],-a[8])):a[6]>0?(b=Math.atan2(-a[1],a[4]),c=Math.asin(a[7]),d=-h):a[6]<0?(b=Math.atan2(a[1],-a[4]),c=-Math.asin(a[7]),c+=c>=0?-g:g,d=-h):(b=Math.atan2(a[3],a[0]),c=a[7]>0?h:-h,d=0),0>b&&(b+=i),b*=k,c*=k,d*=k,this.set(b,c,d)}}(),this.setFromQuaternion=function(){var a,b,c;return function(d){var e=d.w*d.w,f=d.x*d.x,j=d.y*d.y,l=d.z*d.z,m=e+f+j+l,n=d.w*d.x+d.y*d.z,o=1e-6;if(n>(.5-o)*m)a=2*Math.atan2(d.y,d.w),b=h,c=0;else if((-.5+o)*m>n)a=-2*Math.atan2(d.y,d.w),b=-h,c=0;else{var p=e-f+j-l,q=2*(d.w*d.z-d.x*d.y),r=e-f-j+l,s=2*(d.w*d.y-d.x*d.z);r>0?(a=Math.atan2(q,p),b=Math.asin(2*n/m),c=Math.atan2(s,r)):(a=Math.atan2(-q,-p),b=-Math.asin(2*n/m),b+=0>b?g:-g,c=Math.atan2(-s,-r))}0>a&&(a+=i),a*=k,b*=k,c*=k,this.set(a,b,c)}}(),this.rotateX=function(a){return t.Euler.prototype.rotateByAxisAngle(this,[1,0,0],a),this},this.rotateY=function(a){return t.Euler.prototype.rotateByAxisAngle(this,[0,1,0],a),this},this.rotateZ=function(a){return t.Euler.prototype.rotateByAxisAngle(this,[0,0,1],a),this},this.set(a,b,c)},t.Euler.prototype={constructor:t.Euler,rotateByAxisAngle:function(){var a=new t.RotationMatrix;return function(b,c,d){return a.setFromEuler(b),a=t.RotationMatrix.prototype.rotateByAxisAngle(a,c,d),b.setFromRotationMatrix(a),b}}()},t.DeviceOrientation=function(b){this.options=b||{};var c=0,d=200,e=0,f=10;if(this.alphaOffsetScreen=0,this.alphaOffsetDevice=void 0,\"game\"===this.options.type){var g=function(b){return null!==b.alpha&&(this.alphaOffsetDevice=new t.Euler(b.alpha,0,0),this.alphaOffsetDevice.rotateZ(-o),++e>=f)?void a.removeEventListener(\"deviceorientation\",g,!1):void(++c>=d&&a.removeEventListener(\"deviceorientation\",g,!1))}.bind(this);a.addEventListener(\"deviceorientation\",g,!1)}else if(\"world\"===this.options.type){var h=function(b){return b.absolute!==!0&&void 0!==b.webkitCompassAccuracy&&null!==b.webkitCompassAccuracy&&+b.webkitCompassAccuracy>=0&&+b.webkitCompassAccuracy<50&&(this.alphaOffsetDevice=new t.Euler(b.webkitCompassHeading,0,0),this.alphaOffsetDevice.rotateZ(o),this.alphaOffsetScreen=o,++e>=f)?void a.removeEventListener(\"deviceorientation\",h,!1):void(++c>=d&&a.removeEventListener(\"deviceorientation\",h,!1))}.bind(this);a.addEventListener(\"deviceorientation\",h,!1)}},t.DeviceOrientation.prototype={constructor:t.DeviceOrientation,start:function(b){b&&\"[object Function]\"==Object.prototype.toString.call(b)&&l.orientation.callbacks.push(b),m||(n?a.screen.orientation.addEventListener(\"change\",d,!1):a.addEventListener(\"orientationchange\",d,!1)),l.orientation.active||(a.addEventListener(\"deviceorientation\",e,!1),l.orientation.active=!0)},stop:function(){l.orientation.active&&(a.removeEventListener(\"deviceorientation\",e,!1),l.orientation.active=!1)},listen:function(a){this.start(a)},getFixedFrameQuaternion:function(){var a=new t.Euler,b=new t.RotationMatrix,c=new t.Quaternion;return function(){var d=l.orientation.data||{alpha:0,beta:0,gamma:0},e=d.alpha;return this.alphaOffsetDevice&&(b.setFromEuler(this.alphaOffsetDevice),b.rotateZ(-this.alphaOffsetScreen),a.setFromRotationMatrix(b),a.alpha<0&&(a.alpha+=360),a.alpha%=360,e-=a.alpha),a.set(e,d.beta,d.gamma),c.setFromEuler(a),c}}(),getScreenAdjustedQuaternion:function(){var a;return function(){return a=this.getFixedFrameQuaternion(),a.rotateZ(-o),a}}(),getFixedFrameMatrix:function(){var a=new t.Euler,b=new t.RotationMatrix;return function(){var c=l.orientation.data||{alpha:0,beta:0,gamma:0},d=c.alpha;return this.alphaOffsetDevice&&(b.setFromEuler(this.alphaOffsetDevice),b.rotateZ(-this.alphaOffsetScreen),a.setFromRotationMatrix(b),a.alpha<0&&(a.alpha+=360),a.alpha%=360,d-=a.alpha),a.set(d,c.beta,c.gamma),b.setFromEuler(a),b}}(),getScreenAdjustedMatrix:function(){var a;return function(){return a=this.getFixedFrameMatrix(),a.rotateZ(-o),a}}(),getFixedFrameEuler:function(){var a,b=new t.Euler;return function(){return a=this.getFixedFrameMatrix(),b.setFromRotationMatrix(a),b}}(),getScreenAdjustedEuler:function(){var a,b=new t.Euler;return function(){return a=this.getScreenAdjustedMatrix(),b.setFromRotationMatrix(a),b}}(),isAbsolute:function(){return l.orientation.data&&l.orientation.data.absolute===!0?!0:!1},getLastRawEventData:function(){return l.orientation.data||{}},ALPHA:\"alpha\",BETA:\"beta\",GAMMA:\"gamma\"},t.DeviceMotion=function(a){this.options=a||{}},t.DeviceMotion.prototype={constructor:t.DeviceMotion,start:function(b){b&&\"[object Function]\"==Object.prototype.toString.call(b)&&l.motion.callbacks.push(b),m||(n?a.screen.orientation.addEventListener(\"change\",d,!1):a.addEventListener(\"orientationchange\",d,!1)),l.motion.active||(a.addEventListener(\"devicemotion\",f,!1),l.motion.active=!0)},stop:function(){l.motion.active&&(a.removeEventListener(\"devicemotion\",f,!1),l.motion.active=!1)},listen:function(a){this.start(a)},getScreenAdjustedAcceleration:function(){var a=l.motion.data&&l.motion.data.acceleration?l.motion.data.acceleration:{x:0,y:0,z:0},b={};switch(o){case p:b.x=-a.y,b.y=a.x;break;case q:b.x=-a.x,b.y=-a.y;break;case r:case s:b.x=a.y,b.y=-a.x;break;default:b.x=a.x,b.y=a.y}return b.z=a.z,b},getScreenAdjustedAccelerationIncludingGravity:function(){var a=l.motion.data&&l.motion.data.accelerationIncludingGravity?l.motion.data.accelerationIncludingGravity:{x:0,y:0,z:0},b={};switch(o){case p:b.x=-a.y,b.y=a.x;break;case q:b.x=-a.x,b.y=-a.y;break;case r:case s:b.x=a.y,b.y=-a.x;break;default:b.x=a.x,b.y=a.y}return b.z=a.z,b},getScreenAdjustedRotationRate:function(){var a=l.motion.data&&l.motion.data.rotationRate?l.motion.data.rotationRate:{alpha:0,beta:0,gamma:0},b={};switch(o){case p:b.beta=-a.gamma,b.gamma=a.beta;break;case q:b.beta=-a.beta,b.gamma=-a.gamma;break;case r:case s:b.beta=a.gamma,b.gamma=-a.beta;break;default:b.beta=a.beta,b.gamma=a.gamma}return b.alpha=a.alpha,b},getLastRawEventData:function(){return l.motion.data||{}}},a.FULLTILT=t}}(window);\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.GyroPlane = undefined;\n\nvar _GyroPlane = __webpack_require__(15);\n\nvar _GyroPlane2 = _interopRequireDefault(_GyroPlane);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.GyroPlane = _GyroPlane2.default;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _Orientation = __webpack_require__(16);\n\nvar _Orientation2 = _interopRequireDefault(_Orientation);\n\nvar _vanillaVectors3d = __webpack_require__(17);\n\nvar _settings = __webpack_require__(21);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar GyroPlane = function () {\n function GyroPlane() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n distance = _ref.distance,\n _ref$width = _ref.width,\n width = _ref$width === undefined ? _settings.DEFAULT_WIDTH : _ref$width,\n _ref$height = _ref.height,\n height = _ref$height === undefined ? _settings.DEFAULT_HEIGHT : _ref$height;\n\n _classCallCheck(this, GyroPlane);\n\n this.width = width;\n this.height = height;\n\n this._distance = distance;\n\n this.orientation = new _Orientation2.default();\n this.offset = new _Orientation2.default();\n\n this.init();\n }\n\n _createClass(GyroPlane, [{\n key: 'init',\n value: function init() {\n var xCenter = this.xCenter;\n var yCenter = this.yCenter;\n var phoneZPos = this.phoneZPos;\n\n this.screenPlane = new _vanillaVectors3d.Plane(new _vanillaVectors3d.Vector(0, 0, 0), new _vanillaVectors3d.Vector(this.width, 0, 0), new _vanillaVectors3d.Vector(0, this.height, 0));\n\n this.xAxis = new _vanillaVectors3d.Line(new _vanillaVectors3d.Vector(xCenter - 100, yCenter, phoneZPos), new _vanillaVectors3d.Vector(xCenter + 100, yCenter, phoneZPos));\n\n this.yAxis = new _vanillaVectors3d.Line(new _vanillaVectors3d.Vector(xCenter, yCenter - 100, phoneZPos), new _vanillaVectors3d.Vector(xCenter, yCenter + 100, phoneZPos));\n\n this.phoneLine = new _vanillaVectors3d.Line(new _vanillaVectors3d.Vector(xCenter, yCenter, phoneZPos), new _vanillaVectors3d.Vector(xCenter, yCenter, phoneZPos / 2));\n }\n }, {\n key: 'setScreenDimensions',\n value: function setScreenDimensions(_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n\n this.width = width;\n this.height = height;\n\n this.init();\n }\n }, {\n key: 'setDistance',\n value: function setDistance(distance) {\n this._distance = distance;\n\n this.init();\n }\n }, {\n key: 'updateOffset',\n value: function updateOffset(orientation) {\n this.offset.update(orientation);\n }\n }, {\n key: 'updateOrientation',\n value: function updateOrientation(orientation) {\n this.orientation.update(orientation);\n }\n }, {\n key: 'getScreenCoordinates',\n value: function getScreenCoordinates() {\n var orientation = this.orientation.getDifferenceTo(this.offset);\n\n var phoneLinePrime = this.phoneLine.rotateAroundLine(this.yAxis, orientation.alpha).rotateAroundLine(this.xAxis, 180 - orientation.beta);\n\n var interSectionVector = this.screenPlane.getIntersectionWith(phoneLinePrime);\n\n return {\n x: Math.round(interSectionVector.x),\n y: Math.round(interSectionVector.y)\n };\n }\n }, {\n key: 'xCenter',\n get: function get() {\n return this.width / 2;\n }\n }, {\n key: 'yCenter',\n get: function get() {\n return this.height / 2;\n }\n }, {\n key: 'phoneZPos',\n get: function get() {\n return this._distance ? this._distance : this.width * 1;\n }\n }]);\n\n return GyroPlane;\n}();\n\nexports.default = GyroPlane;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Orientation = function () {\n function Orientation() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$alpha = _ref.alpha,\n alpha = _ref$alpha === undefined ? 0 : _ref$alpha,\n _ref$beta = _ref.beta,\n beta = _ref$beta === undefined ? 0 : _ref$beta,\n _ref$gamma = _ref.gamma,\n gamma = _ref$gamma === undefined ? 0 : _ref$gamma;\n\n _classCallCheck(this, Orientation);\n\n this.alpha = alpha;\n this.beta = beta;\n this.gamma = gamma;\n }\n\n _createClass(Orientation, [{\n key: \"update\",\n value: function update(_ref2) {\n var alpha = _ref2.alpha,\n beta = _ref2.beta,\n gamma = _ref2.gamma;\n\n if (alpha) this.alpha = alpha;\n if (beta) this.beta = beta;\n if (gamma) this.gamma = gamma;\n }\n }, {\n key: \"getDifferenceTo\",\n value: function getDifferenceTo() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$alpha = _ref3.alpha,\n alpha = _ref3$alpha === undefined ? 0 : _ref3$alpha,\n _ref3$beta = _ref3.beta,\n beta = _ref3$beta === undefined ? 0 : _ref3$beta,\n _ref3$gamma = _ref3.gamma,\n gamma = _ref3$gamma === undefined ? 0 : _ref3$gamma;\n\n return {\n alpha: 0 - this.alpha + alpha,\n beta: this.beta - beta,\n gamma: this.gamma - gamma\n };\n }\n }]);\n\n return Orientation;\n}();\n\nexports.default = Orientation;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Plane = exports.Line = exports.Vector = undefined;\n\nvar _Vector = __webpack_require__(18);\n\nvar _Vector2 = _interopRequireDefault(_Vector);\n\nvar _Line = __webpack_require__(19);\n\nvar _Line2 = _interopRequireDefault(_Line);\n\nvar _Plane = __webpack_require__(20);\n\nvar _Plane2 = _interopRequireDefault(_Plane);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Vector = _Vector2.default;\nexports.Line = _Line2.default;\nexports.Plane = _Plane2.default;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Number of decimals used for calculations\n * @type {number}\n */\nvar decimals = 15;\n\nvar Vector = function () {\n /**\n *\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\n function Vector(x, y, z) {\n _classCallCheck(this, Vector);\n\n //\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n /**\n * Adds one vector to another\n * @param {Vector} b\n * @return {Vector}\n */\n\n\n _createClass(Vector, [{\n key: 'plus',\n value: function plus(b) {\n return new Vector( //\n this.x + b.x, this.y + b.y, this.z + b.z);\n }\n\n /**\n * Subtracts one vector from another\n * @param {Vector} b\n * @return {Vector}\n */\n\n }, {\n key: 'minus',\n value: function minus(b) {\n return new Vector( //\n this.x - b.x, this.y - b.y, this.z - b.z);\n }\n\n /**\n * Multiplies this vector with a scalar\n * @param {number} s\n * @return {Vector}\n */\n\n }, {\n key: 'timesScalar',\n value: function timesScalar(s) {\n return new Vector( //\n this.x * s, this.y * s, this.z * s);\n }\n\n /**\n * Calculates the cross product of this and another vector\n * @param {Vector} b\n * @return {Vector}\n */\n\n }, {\n key: 'cross',\n value: function cross(b) {\n return new Vector(this.y * b.z - this.z * b.y, this.z * b.x - this.x * b.z, this.x * b.y - this.y * b.x);\n }\n\n /**\n * Calculates the scalar product of this and another vector\n * @param {Vector} b\n * @return {number}\n */\n\n }, {\n key: 'scalarProduct',\n value: function scalarProduct(b) {\n return this.x * b.x + this.y * b.y + this.z * b.z;\n }\n\n /**\n * Calculates the length of this vector\n * @return {number}\n */\n\n }, {\n key: 'getLength',\n\n\n /**\n * Calculates the length of this vector\n * @return {number}\n */\n value: function getLength() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n\n /**\n * Normalizes this vector, i.e. transforms it so its length will be 1\n * @return {Vector}\n */\n\n }, {\n key: 'normalize',\n value: function normalize() {\n var factor = 1 / this.getLength();\n\n return new Vector(this.x * factor, this.y * factor, this.z * factor);\n }\n\n /**\n * Rotate this vector around a given axis (x, y or z) in a given angle\n * @param axis\n * @param angle\n * @return {Vector}\n */\n\n }, {\n key: 'rotate',\n value: function rotate(axis, angle) {\n angle = angle / 180 * Math.PI; // Degrees to radians\n\n var sin = Math.sin(angle);\n var cos = Math.cos(angle);\n\n return this.applyTransformationMatrix([[('x' === axis ? 1 : cos).toFixed(decimals), ('z' === axis ? sin : 0).toFixed(decimals), ('y' === axis ? -1 * sin : 0).toFixed(decimals)], [('z' === axis ? -1 * sin : 0).toFixed(decimals), ('y' === axis ? 1 : cos).toFixed(decimals), ('x' === axis ? sin : 0).toFixed(decimals)], [('y' === axis ? sin : 0).toFixed(decimals), ('x' === axis ? -1 * sin : 0).toFixed(decimals), ('z' === axis ? 1 : cos).toFixed(decimals)]]);\n }\n\n /**\n * Rotates this vector around a line (represented by its normal vector) by a given angle\n * @param {Vector} vector\n * @param {number} angle\n * @return {Vector}\n */\n\n }, {\n key: 'rotateAroundVector',\n value: function rotateAroundVector(vector, angle) {\n var n1 = vector.x;\n var n2 = vector.y;\n var n3 = vector.z;\n\n angle = angle / 180 * Math.PI; // Degrees to radians\n\n var sin = Math.sin(angle);\n var cos = Math.cos(angle);\n\n return this.applyTransformationMatrix([[n1 * n1 * (1 - cos) + cos, n2 * n1 * (1 - cos) + n3 * sin, n3 * n1 * (1 - cos) - n2 * sin], [n1 * n2 * (1 - cos) - n3 * sin, n2 * n2 * (1 - cos) + cos, n3 * n2 * (1 - cos) + n1 * sin], [n1 * n3 * (1 - cos) + n2 * sin, n2 * n3 * (1 - cos) - n1 * sin, n3 * n3 * (1 - cos) + cos]]);\n }\n\n /**\n *\n * @param {Line} axis\n * @param {number} angle\n * @return {Vector}\n */\n\n }, {\n key: 'rotateAroundLine',\n value: function rotateAroundLine(axis, angle) {\n var n = axis.l.normalize();\n\n // Move vector through 0/0/0, rotate, and move back again\n return this.minus(axis.l0).rotateAroundVector(n, angle).plus(axis.l0);\n }\n\n /**\n * Checks if b is multiple of this vector\n * @param {Vector} b\n * @return {boolean}\n */\n\n }, {\n key: 'isLinearlyDependentOn',\n value: function isLinearlyDependentOn(b) {\n // Same\n if (this.x === b.x && this.y === b.y && this.z === b.z) {\n return true;\n }\n\n // Factors of each, if one of those can\n var dx = this.x / b.x;\n var dy = this.y / b.y;\n var dz = this.z / b.z;\n\n // All factors are the same\n if (dx === dy && dy === dz && dx === dz) {\n return true;\n }\n\n // One factor can produce this vector\n if (b.timesScalar(dx).isEqualTo(this) || b.timesScalar(dy).isEqualTo(this) || b.timesScalar(dz).isEqualTo(this)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Checks if another vector is the same as this\n * @param {Vector} b\n * @return {boolean}\n */\n\n }, {\n key: 'isEqualTo',\n value: function isEqualTo(b) {\n return this.x === b.x && this.y === b.y && this.z === b.z;\n }\n\n /**\n *\n * @param {Array>} m\n * @return {Vector}\n */\n\n }, {\n key: 'applyTransformationMatrix',\n value: function applyTransformationMatrix(m) {\n return new Vector(parseFloat((m[0][0] * this.x + m[1][0] * this.y + m[2][0] * this.z).toFixed(decimals)), parseFloat((m[0][1] * this.x + m[1][1] * this.y + m[2][1] * this.z).toFixed(decimals)), parseFloat((m[0][2] * this.x + m[1][2] * this.y + m[2][2] * this.z).toFixed(decimals)));\n }\n }, {\n key: 'length',\n get: function get() {\n return this.getLength();\n }\n }]);\n\n return Vector;\n}();\n\nexports.default = Vector;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Line = function () {\n /**\n * A line given by two vectors\n * @param {Vector} l0 Base vector\n * @param {Vector} l Direction vector\n */\n function Line(l0, l) {\n _classCallCheck(this, Line);\n\n this.l0 = l0;\n this.l = l.minus(l0); // Direction vector\n this.lPrime = l; // We might need it further down, though\n }\n\n /**\n * Rotates a line by two given angles\n * @param {number} alpha\n * @param {number} beta\n */\n\n\n _createClass(Line, [{\n key: 'rotate',\n value: function rotate(alpha, beta) {\n if (alpha > 0) {\n this.l = this.l.rotate('x', alpha);\n }\n\n if (beta > 0) {\n this.l = this.l.rotate('z', beta);\n }\n }\n\n /**\n * Rotates a line by another line\n * @param line\n * @param angle\n * @return {Line}\n */\n\n }, {\n key: 'rotateAroundLine',\n value: function rotateAroundLine(line, angle) {\n return new Line(this.l0.rotateAroundLine(line, angle), this.lPrime.rotateAroundLine(line, angle));\n }\n }]);\n\n return Line;\n}();\n\nexports.default = Line;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Plane = function () {\n /**\n * A plane, described by three vectors that form it\n * @param {Vector} p0\n * @param {Vector} a\n * @param {Vector} b\n */\n function Plane(p0, a, b) {\n _classCallCheck(this, Plane);\n\n var r1 = a.minus(p0); // First direction vector\n var r2 = b.minus(p0); // Second direction vector\n\n if (r1.isLinearlyDependentOn(r2)) {\n throw new Error('Cannot create plane, r1 and r2 are linearly dependent');\n }\n\n // Normal form\n this.n = r2.cross(r1); // Normal vector\n this.p0 = p0;\n }\n\n /**\n * Calculates an intersection with a line\n * @param {Line} line\n * @return {null|Vector}\n */\n\n\n _createClass(Plane, [{\n key: 'getIntersectionWith',\n value: function getIntersectionWith(line) {\n var a = this.p0.minus(line.l0).scalarProduct(this.n);\n var b = line.l.scalarProduct(this.n);\n\n // If a is 0 = line is parallel, if b is 0 = line is on the plane\n if (0 === a || 0 === b) {\n return null;\n }\n\n var d = a / b;\n\n return line.l.timesScalar(d).plus(line.l0);\n }\n }]);\n\n return Plane;\n}();\n\nexports.default = Plane;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar DEFAULT_DISTANCE = exports.DEFAULT_DISTANCE = 1;\nvar DEFAULT_WIDTH = exports.DEFAULT_WIDTH = 1620;\nvar DEFAULT_HEIGHT = exports.DEFAULT_HEIGHT = 900;\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=gymote.js.map"],"sourceRoot":""}