{"version":3,"sources":["jsdelivr-header.js","/npm/matrix-camera-controller@2.1.4/matrix.js"],"names":[],"mappings":"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","file":"/npm/matrix-camera-controller@2.1.4/matrix.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/matrix-camera-controller@2.1.4/matrix.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict'\n\nvar bsearch   = require('binary-search-bounds')\nvar m4interp  = require('mat4-interpolate')\nvar invert44  = require('gl-mat4/invert')\nvar rotateX   = require('gl-mat4/rotateX')\nvar rotateY   = require('gl-mat4/rotateY')\nvar rotateZ   = require('gl-mat4/rotateZ')\nvar lookAt    = require('gl-mat4/lookAt')\nvar translate = require('gl-mat4/translate')\nvar scale     = require('gl-mat4/scale')\nvar normalize = require('gl-vec3/normalize')\n\nvar DEFAULT_CENTER = [0,0,0]\n\nmodule.exports = createMatrixCameraController\n\nfunction MatrixCameraController(initialMatrix) {\n  this._components    = initialMatrix.slice()\n  this._time          = [0]\n  this.prevMatrix     = initialMatrix.slice()\n  this.nextMatrix     = initialMatrix.slice()\n  this.computedMatrix = initialMatrix.slice()\n  this.computedInverse = initialMatrix.slice()\n  this.computedEye    = [0,0,0]\n  this.computedUp     = [0,0,0]\n  this.computedCenter = [0,0,0]\n  this.computedRadius = [0]\n  this._limits        = [-Infinity, Infinity]\n}\n\nvar proto = MatrixCameraController.prototype\n\nproto.recalcMatrix = function(t) {\n  var time = this._time\n  var tidx = bsearch.le(time, t)\n  var mat = this.computedMatrix\n  if(tidx < 0) {\n    return\n  }\n  var comps = this._components\n  if(tidx === time.length-1) {\n    var ptr = 16*tidx\n    for(var i=0; i<16; ++i) {\n      mat[i] = comps[ptr++]\n    }\n  } else {\n    var dt = (time[tidx+1] - time[tidx])\n    var ptr = 16*tidx\n    var prev = this.prevMatrix\n    var allEqual = true\n    for(var i=0; i<16; ++i) {\n      prev[i] = comps[ptr++]\n    }\n    var next = this.nextMatrix\n    for(var i=0; i<16; ++i) {\n      next[i] = comps[ptr++]\n      allEqual = allEqual && (prev[i] === next[i])\n    }\n    if(dt < 1e-6 || allEqual) {\n      for(var i=0; i<16; ++i) {\n        mat[i] = prev[i]\n      }\n    } else {\n      m4interp(mat, prev, next, (t - time[tidx])/dt)\n    }\n  }\n\n  var up = this.computedUp\n  up[0] = mat[1]\n  up[1] = mat[5]\n  up[2] = mat[9]\n  normalize(up, up)\n\n  var imat = this.computedInverse\n  invert44(imat, mat)\n  var eye = this.computedEye\n  var w = imat[15]\n  eye[0] = imat[12]/w\n  eye[1] = imat[13]/w\n  eye[2] = imat[14]/w\n\n  var center = this.computedCenter\n  var radius = Math.exp(this.computedRadius[0])\n  for(var i=0; i<3; ++i) {\n    center[i] = eye[i] - mat[2+4*i] * radius\n  }\n}\n\nproto.idle = function(t) {\n  if(t < this.lastT()) {\n    return\n  }\n  var mc = this._components\n  var ptr = mc.length-16\n  for(var i=0; i<16; ++i) {\n    mc.push(mc[ptr++])\n  }\n  this._time.push(t)\n}\n\nproto.flush = function(t) {\n  var idx = bsearch.gt(this._time, t) - 2\n  if(idx < 0) {\n    return\n  }\n  this._time.splice(0, idx)\n  this._components.splice(0, 16*idx)\n}\n\nproto.lastT = function() {\n  return this._time[this._time.length-1]\n}\n\nproto.lookAt = function(t, eye, center, up) {\n  this.recalcMatrix(t)\n  eye    = eye || this.computedEye\n  center = center || DEFAULT_CENTER\n  up     = up || this.computedUp\n  this.setMatrix(t, lookAt(this.computedMatrix, eye, center, up))\n  var d2 = 0.0\n  for(var i=0; i<3; ++i) {\n    d2 += Math.pow(center[i] - eye[i], 2)\n  }\n  d2 = Math.log(Math.sqrt(d2))\n  this.computedRadius[0] = d2\n}\n\nproto.rotate = function(t, yaw, pitch, roll) {\n  this.recalcMatrix(t)\n  var mat = this.computedInverse\n  if(yaw)   rotateY(mat, mat, yaw)\n  if(pitch) rotateX(mat, mat, pitch)\n  if(roll)  rotateZ(mat, mat, roll)\n  this.setMatrix(t, invert44(this.computedMatrix, mat))\n}\n\nvar tvec = [0,0,0]\n\nproto.pan = function(t, dx, dy, dz) {\n  tvec[0] = -(dx || 0.0)\n  tvec[1] = -(dy || 0.0)\n  tvec[2] = -(dz || 0.0)\n  this.recalcMatrix(t)\n  var mat = this.computedInverse\n  translate(mat, mat, tvec)\n  this.setMatrix(t, invert44(mat, mat))\n}\n\nproto.translate = function(t, dx, dy, dz) {\n  tvec[0] = dx || 0.0\n  tvec[1] = dy || 0.0\n  tvec[2] = dz || 0.0\n  this.recalcMatrix(t)\n  var mat = this.computedMatrix\n  translate(mat, mat, tvec)\n  this.setMatrix(t, mat)\n}\n\nproto.setMatrix = function(t, mat) {\n  if(t < this.lastT()) {\n    return\n  }\n  this._time.push(t)\n  for(var i=0; i<16; ++i) {\n    this._components.push(mat[i])\n  }\n}\n\nproto.setDistance = function(t, d) {\n  this.computedRadius[0] = d\n}\n\nproto.setDistanceLimits = function(a,b) {\n  var lim = this._limits\n  lim[0] = a\n  lim[1] = b\n}\n\nproto.getDistanceLimits = function(out) {\n  var lim = this._limits\n  if(out) {\n    out[0] = lim[0]\n    out[1] = lim[1]\n    return out\n  }\n  return lim\n}\n\nfunction createMatrixCameraController(options) {\n  options = options || {}\n  var matrix = options.matrix || \n              [1,0,0,0,\n               0,1,0,0,\n               0,0,1,0,\n               0,0,0,1]\n  return new MatrixCameraController(matrix)\n}\n"]}