summaryrefslogtreecommitdiff
path: root/site/public/assets/javascripts/mx/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'site/public/assets/javascripts/mx/extensions')
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.movements.js367
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.movementsMobile.js237
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.orbitCamera.js102
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.rotationControl.js265
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.scene.js165
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.scrubber.js191
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCamera.js130
-rw-r--r--site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCameraMobile.js225
8 files changed, 0 insertions, 1682 deletions
diff --git a/site/public/assets/javascripts/mx/extensions/mx.movements.js b/site/public/assets/javascripts/mx/extensions/mx.movements.js
deleted file mode 100644
index 9af2c8d..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.movements.js
+++ /dev/null
@@ -1,367 +0,0 @@
-
-
-MX.Movements = function (cam) {
-
- var moveForward,
- moveLeft,
- moveBackward,
- moveRight,
- moveUp,
- moveDown,
- turnLeft,
- turnRight,
- turnUp,
- turnDown,
- jumping = false,
- creeping = false,
- locked = false,
- gravity = false,
- rotationX_min = PI/-4,
- rotationX_max = PI/6
-
- var v = 12,
- vr = Math.PI * 0.012,
- jumpV = 23,
- vx = vy = vz = 0,
- creepFactor = 0.3
-
- var mouseX, mouseY, dx, dy, rotX, rotY, dragging = false
-
- var trackpad
-
- var DEFAULT_SCALE = 1.0, scale = DEFAULT_SCALE
-
- var pos = { x: 0, y: 0, z: 0, rotationX: 0, rotationY: 0 }
-
- $(document).one("keydown", function(){
- $("#keyhint").fadeOut(250);
- $('.reader #minimap').addClass('active');
- })
-
- function clampRotation( vr ) {
- if (Rooms.mover.noclip) {
- return clamp(vr, PI/-2, PI/2 )
- }
- else {
- return clamp(vr, PI/-4, PI/6 )
- }
- }
-
- var exports = {
-
- init: function () {
-
- trackpad = new wheel ({
- el: scene.el,
- update: exports.mousewheel,
- })
-
- document.addEventListener('keydown', exports.keydown)
- document.addEventListener('keyup', exports.keyup)
- document.addEventListener('mousedown', exports.mousedown)
- document.addEventListener('mousemove', exports.mousemove)
- document.addEventListener('mouseup', exports.mouseup)
- window.addEventListener('blur', exports.reset)
- window.addEventListener('focus', exports.reset)
- },
-
- keydown: function (e) {
- // console.log(e.keyCode)
- if (locked || e.altKey || e.metaKey || e.ctrlKey) {
- return
- }
- switch ( e.keyCode ) {
-
- case 16: // shift
- creeping = true
- break
-
- case 38: // up
- case 87: // w
- moveForward = true
- break
-
- case 65: // a
- moveLeft = true
- break
-
- case 40: // down
- case 83: // s
- moveBackward = true
- break
-
- case 68: // d
- moveRight = true
- break
-
- case 37: // left
- case 81: // q
- turnLeft = true
- break
-
- case 39: // right
- case 69: // e
- turnRight = true
- break
-
- case 82: // r
- turnUp = true
- break
-
- case 70: // f
- turnDown = true
- break
-
- case 32: // space
- if (gravity) {
- jumping = true
- vy = abs(vy) + jumpV * scale
- if (e.shiftKey) {
- vy *= -1
- }
- }
- else {
- if (e.shiftKey) {
- moveDown = true
- }
- else {
- moveUp = true
- }
- }
- break
-
- case 27: // esc
- if (Scenery.nextMedia) {
- Scenery.nextMedia = null
- app.tube('cancel-scenery')
- }
- else if (Scenery.nextWallpaper) {
- Scenery.nextWallpaper = null
- app.tube('cancel-wallpaper')
- }
- else if (app.controller.mediaViewer && app.controller.mediaViewer.$el.hasClass("active")) {
- app.controller.mediaViewer.hide()
- $(".inuse").removeClass("inuse")
- }
- else if (app.controller.colorControl && app.controller.colorControl.$el.hasClass('active')) {
- app.controller.colorControl.hide()
- $(".inuse").removeClass("inuse")
- }
- else if (app.controller.wallpaperPicker && app.controller.wallpaperPicker.$el.hasClass('active')) {
- app.controller.wallpaperPicker.hide()
- $(".inuse").removeClass("inuse")
- }
- else if (app.controller.presets && app.controller.presets.$el.hasClass('active')) {
- app.controller.presets.hide()
- $(".inuse").removeClass("inuse")
- }
- else {
- app.controller.toolbar.toggleMap()
- }
- break
-
- case 8: // backspace
- e.preventDefault()
- if (app.controller.mediaEditor.scenery) {
- app.controller.mediaEditor.scenery.remove()
- }
- else if (app.controller.textEditor.scenery) {
- app.controller.textEditor.scenery.remove()
- }
- }
- },
-
- keyup: function (e) {
- if (locked) return;
- switch ( e.keyCode ) {
-
- case 16: // shift
- creeping = false
- break
-
- case 38: // up
- case 87: // w
- moveForward = false
- break
-
- case 65: // a
- moveLeft = false
- break
-
- case 40: // down
- case 83: // s
- moveBackward = false
- break
-
- case 68: // d
- moveRight = false
- break
-
- case 37: // left
- case 81: // q
- turnLeft = false
- break
-
- case 39: // right
- case 69: // e
- turnRight = false
- break
-
- case 82: // r
- turnUp = false
- break
-
- case 70: // f
- turnDown = false
- break
-
- case 32: // space
- moveUp = moveDown = false
- break
-
-/*
- case 48: // 0
- cam.rotationX = 0
- cam.rotationY = 0
- cam.x = 0
- cam.y = viewHeight
- cam.z = 0
- break
-*/
- }
- },
-
- mousedown: function (e) {
- if (locked) return;
- mouseX = e.pageX
- mouseY = e.pageY
- rotX = cam.rotationX
- rotY = cam.rotationY
- dragging = true
- },
-
- mousemove: function (e) {
- if (locked || ! dragging) return
- var dx = (e.pageX - mouseX) / window.innerWidth * Math.PI/3
- var dy = (e.pageY - mouseY) / window.innerHeight * Math.PI/3
- cam.rotationY = rotY + dx
- cam.rotationX = clampRotation( rotX - dy )
- },
-
- mouseup: function (e) {
- dragging = false
- },
-
- reset: function(){
- moveForward = moveLeft = moveBackward = moveRight = moveUp = moveDown = turnLeft = turnRight = jumping = dragging = creeping = false
- },
-
- mousewheel: function (e, deltaY, deltaX) {
- if (e.shiftKey) {
- cam.rotationY -= deltaY / 150
- }
- else {
- pos.x += deltaY * Math.cos(cam.rotationY + Math.PI / 2) * 10
- pos.z += deltaY * Math.sin(cam.rotationY + Math.PI / 2) * 10
- app.tube("move", pos)
- }
- },
-
- update: function (dt) {
-
- if (locked) { return }
-
- var ry = cam.rotationY
- var s = creeping ? scale * creepFactor : scale
- var vrrrr = creeping ? vr * creepFactor * 5 : vr * 0.5
- var moving = moveForward || moveBackward || moveRight || moveLeft || moveUp || moveDown || turnLeft || turnRight || turnUp || turnDown
- vx = vz = 0
-
- var vv = v
-// vv *= dt / 100 * 8
-// s *= dt / 100 * 8
-// console.log(dt / 100 * 8)
-
- pos.x = cam.x
- pos.z = cam.z
-
- if (moving) {
-
- if (moveForward) {
- vx += vv * Math.cos(ry + Math.PI / 2) * s
- vz += vv * Math.sin(ry + Math.PI / 2) * s
- }
- if (moveBackward) {
- vx -= vv * Math.cos(ry + Math.PI / 2) * s
- vz -= vv * Math.sin(ry + Math.PI / 2) * s
- }
- if (moveLeft) {
- vx -= vv * Math.cos(ry) * s
- vz -= vv * Math.sin(ry) * s
- }
- if (moveRight) {
- vx += vv * Math.cos(ry) * s
- vz += vv * Math.sin(ry) * s
- }
- if (moveUp) {
- pos.y += vv * scale
- }
- if (moveDown) {
- pos.y -= vv * scale
- }
-
- if (turnUp) {
- cam.rotationX = clampRotation( cam.rotationX - vrrrr*s )
- }
- if (turnDown) {
- cam.rotationX = clampRotation( cam.rotationX + vrrrr*s )
- }
- if (turnLeft) {
- cam.rotationY += vrrrr*s
- }
- if (turnRight) {
- cam.rotationY -= vrrrr*s
- }
-
- pos.x += vx
- pos.z += vz
- }
-
- if (gravity) {
- vy -= 1 * scale
-
- pos.y += vy
-
- if (vy) {
- moving = true
- }
- if (pos.y <= viewHeight) {
- pos.y = viewHeight
- vy = 0
- jumping = false
- }
-
- var ceiling = (Rooms.mover.room ? Rooms.mover.room.height : 5000)
-
- if (pos.y >= ceiling-5) {
- vy = 0
- pos.y = ceiling-5
- }
- }
-
- if (moving) {
- app.tube("move", pos)
- }
- },
-
- lock: function(){ locked = true },
- unlock: function(){ locked = false },
- scale: function(n){ if (n) scale = n; return scale },
- resetScale: function(n){ scale = DEFAULT_SCALE },
- gravity: function(g){ return typeof g == "boolean" ? gravity = g : gravity },
- velocity: function(n){ v = clamp(n, 1, 50) },
- jumpVelocity: function(n){ jumpV = clamp(n, 1, 50) },
- }
-
- return exports
-}
diff --git a/site/public/assets/javascripts/mx/extensions/mx.movementsMobile.js b/site/public/assets/javascripts/mx/extensions/mx.movementsMobile.js
deleted file mode 100644
index 95b61d1..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.movementsMobile.js
+++ /dev/null
@@ -1,237 +0,0 @@
-
-MX.MobileMovements = function (cam) {
-
- var touching = true,
- moving = false,
- startTime = null,
- v = 12,
- vr = Math.PI * 0.012,
- vx = vy = vz = 0;
-
- var directionLocked = false,
- directionLockThreshold = 5
-
- var pos = { x: 0, y: viewHeight, z: 0, rotationX: 0, rotationY: 0 }
-
- var pointX, pointY, deltaX, deltaY, distX = 0, distY = 0, absDistX = 0, absDistY = 0, startTime
-
- var rotationX = 0, rotationY = 0, destRotationX = 0, destRotationY = 0
- var rotationSum = 0
- var rotationMedian = 0
- var orientationMax = 0
- var samples = 0
- var sampleThreshold = 120
- var lastAlpha
-
- var is_portrait
-
- var exports = {
-
- init: function () {
- exports.orientationchange()
-
- document.addEventListener("touchstart", exports.touchstart)
- document.addEventListener("touchmove", exports.touchmove)
- document.addEventListener("touchend", exports.touchend)
- window.addEventListener('orientationchange', exports.orientationchange)
- window.addEventListener("devicemotion", exports.devicemotion)
- window.addEventListener("deviceorientation", exports.deviceorientation)
- },
- touchstart: function(e){
- if (e.touches.length == 1) {
- touching = true
-
- startTime = Date.now()
-
- var point = event.touches[0]
- pointX = point.pageX
- pointY = point.pageY
- distX = distY = 0
- pos.x = cam.x
- pos.z = cam.z
- pos.rotationY = cam.rotationY
- }
- },
- touchmove: function(e){
- e.preventDefault()
- if (e.touches.length == 1) {
-
- var timestamp = Date.now()
- var point = event.touches[0]
- deltaX = point.pageX - pointX
- deltaY = point.pageY - pointY
-
- pointX = point.pageX
- pointY = point.pageY
-
- distX += deltaX
- distY += deltaY
- absDistX = abs(distX)
- absDistY = abs(distY)
- }
- },
- touchend: function(e){
- e.preventDefault()
- if (e.touches.length == 0) {
- touching = directionLocked = false
- var timestamp = Date.now()
- var duration = startTime - timestamp
- if (duration < 300) {
- }
- }
- },
- orientationchange: function(e){
- is_portrait = window.innerWidth < window.innerHeight
- if (is_portrait) {
- lastAlpha = 0
- }
- },
- devicemotion: function(e) {
- if (! is_portrait) return;
- var rotationBeta = e.rotationRate.alpha; // weird!
- rotationSum += rotationBeta;
- samples += 1;
- },
- deviceorientation: function (e) {
- if (! lastAlpha) { lastAlpha = e.alpha }
- is_portrait ? exports.portraitorientation(e) : exports.landscapeorientation(e)
- },
- portraitorientation: function(e) {
- // compass gives most accurate orientation in portrait mode
- var alpha, dx = 0, dy = 0
-
- if (e.webkitCompassHeading) {
- alpha = 180 - e.webkitCompassHeading;
- }
- else {
- alpha = 180 - e.alpha;
- }
-
- // android rotates in reverse
- if (is_android) {
- alpha = 360 - alpha
- }
-
- // use rotationRate to gauge if we've tilted the screen past vertical
- // for looking at ceiling
- if (e.beta > orientationMax) {
- orientationMax = e.beta
- rotationMedian = rotationSum
- }
-
- // this number was only going to 83 max.. not 90.. weird
- var beta = e.beta + 7;
-
- // if we've got enough motion data, we should be able to determine
- // if we've tilted backwards. otherwise, lock to the horizon.
- if (! is_android && samples > sampleThreshold) {
- dx = rotationSum > rotationMedian ? e.beta - 90 : 90 - e.beta
- }
- else {
- dx = 0
- }
-
- // avoid jumping around in a circle
- if (Math.abs(alpha - lastAlpha) < 100 || Math.abs(alpha - lastAlpha) > 300) {
- dy = alpha - lastAlpha
- lastAlpha = alpha
- }
-
- // avoid jumping around in a circle #2
- if (dy > 300) {
- dy -= 360
- } else if (dy < -300) {
- dy += 360
- }
-
- destRotationX = MX.toRad(dx)
- destRotationY += MX.toRad(dy)
- },
-
- landscapeorientation: function (e) {
- var dx, dy
-
- dx = e.gamma > 0 ? 90 - e.gamma : 90 + e.gamma
- dy = e.alpha - lastAlpha
- lastAlpha = e.alpha
-
- // avoid the sudden jump from 0 to -360
- if (dy > 300) {
- dy -= 360
- }
- else if (dy < -300) {
- dy += 360
- }
-
- destRotationX = dx > 45 ? 0 : MX.toRad(dx)
- destRotationY += MX.toRad(dy)
- },
-
- update: function () {
- var drx, dry
-
- dry = (destRotationY - rotationY) / 6
- drx = (destRotationX - rotationX) / 6
- rotationY += dry
- rotationX += drx
- cam.rotationY = pos.rotationY += dry
- cam.rotationX = pos.rotationX += drx
-
- if (distX || distY) {
- var oldDistY = absDistY, oldDistX = absDistX
- absDistY = avg(absDistY, 0, 5)
- var dy = (oldDistY - absDistY) * sign(distY) * 2
-
- absDistX = avg(absDistX, 0, 5)
- var dx = (oldDistX - absDistX) * sign(distX) * 2
-
- distY = sign(distY) * absDistY
- distX = sign(distX) * absDistX
-
- pos.x -= dy * Math.cos(pos.rotationY + Math.PI / 2)
- pos.z -= dy * Math.sin(pos.rotationY + Math.PI / 2)
- cam.rotationY = pos.rotationY += dx / (window.innerWidth) * Math.PI / 2
-
- app.tube("move", pos)
- }
- },
-
- lock: function(){ locked = true },
- unlock: function(){ locked = false },
- scale: function(n){ if (n) scale = n; return scale },
- resetScale: function(n){ scale = DEFAULT_SCALE },
- gravity: function(g){ return typeof g == "boolean" ? gravity = g : gravity },
- velocity: function(n){ v = clamp(n, 1, 50) },
- jumpVelocity: function(n){ jumpV = clamp(n, 1, 50) },
- }
-
- return exports
-}
-
-
-// function momentum (current, start, time, lowerMargin, wrapperSize, deceleration) {
-// var distance = current - start,
-// speed = Math.abs(distance) / time,
-// destination,
-// duration;
-//
-// deceleration = deceleration === undefined ? 0.0006 : deceleration;
-//
-// destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 );
-// duration = speed / deceleration;
-//
-// if ( destination < lowerMargin ) {
-// destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin;
-// distance = Math.abs(destination - current);
-// duration = distance / speed;
-// } else if ( destination > 0 ) {
-// destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0;
-// distance = Math.abs(current) + destination;
-// duration = distance / speed;
-// }
-//
-// return {
-// destination: Math.round(destination),
-// duration: duration
-// };
-// }
diff --git a/site/public/assets/javascripts/mx/extensions/mx.orbitCamera.js b/site/public/assets/javascripts/mx/extensions/mx.orbitCamera.js
deleted file mode 100644
index 6603ff4..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.orbitCamera.js
+++ /dev/null
@@ -1,102 +0,0 @@
-MX.OrbitCamera = function(opt){
- var exports = {}, bound = false
- exports.opt = opt = defaults(opt, {
- el: window, // object to bind events on
- camera: scene.camera, // camera object we'll be moving
- radius: 100,
- radiusRange: [ 10, 1000 ],
- rotationX: PI/2,
- rotationY: 0,
- center: { x: 0, y: 0, z: 0 },
- sensitivity: 10, // moving 1 pixel is like moving N radians
- wheelSensitivity: 10,
- ease: 10,
- })
- var rx, ry, radius, px, py, epsilon = 1e-10, dragging = false
- exports.init = function(){
- ry = opt.rotationY
- rx = opt.rotationX
- radius = opt.radius
- exports.wheel = new wheel({
- el: opt.el,
- update: function(e, delta){
- opt.radius = clamp( opt.radius + delta * opt.wheelSensitivity, opt.radiusRange[0], opt.radiusRange[1] )
- },
- })
- exports.bind()
- }
- exports.toggle = function(state){
- if (state) exports.bind()
- else exports.unbind()
- }
- exports.bind = function(){
- if (bound) return;
- bound = true
- opt.el.addEventListener("mousedown", down)
- window.addEventListener("mousemove", move)
- window.addEventListener("mouseup", up)
- exports.wheel.unlock()
- }
- exports.unbind = function(){
- if (! bound) return;
- bound = false
- opt.el.removeEventListener("mousedown", down)
- window.removeEventListener("mousemove", move)
- window.removeEventListener("mouseup", up)
- exports.wheel.lock()
- }
- function down (e) {
- px = e.pageX
- py = e.pageY
- dragging = true
- }
- function move (e) {
- if (! dragging) return
- exports.delta(px- e.pageX, py - e.pageY)
- px = e.pageX
- py = e.pageY
- }
- function up (e) {
- dragging = false
- }
- exports.delta = function(x,y){
- opt.rotationY += x/window.innerWidth * opt.sensitivity
- opt.rotationX = clamp( opt.rotationX + y/window.innerHeight * opt.sensitivity, 0, PI)
- }
- exports.zoom = function(r){
- opt.radius = r
- }
- exports.zoomDelta = function(r){
- opt.radius += r
- }
- exports.move = function(y, x){
- opt.rotationY = y
- if (typeof x == "number") { opt.rotationX = x }
- }
- exports.update = function(){
- if (abs(ry - opt.rotationY) > epsilon) {
- ry = avg(ry, opt.rotationY, opt.ease)
- }
- else {
- ry = opt.rotationY
- }
- if (abs(rx - opt.rotationX) > epsilon) {
- rx = avg(rx, opt.rotationX, opt.ease)
- }
- else {
- rx = opt.rotationX
- }
- if (abs(radius - opt.radius) > epsilon) {
- radius = avg(radius, opt.radius, opt.ease)
- }
- else {
- radius = opt.radius
- }
- opt.camera.x = opt.center.x + radius * sin(rx) * cos(ry)
- opt.camera.z = opt.center.y + radius * sin(rx) * sin(ry)
- opt.camera.y = opt.center.z + radius * cos(rx)
- opt.camera.rotationX = PI/2 - rx
- opt.camera.rotationY = ry + PI/2
- }
- return exports
-}
diff --git a/site/public/assets/javascripts/mx/extensions/mx.rotationControl.js b/site/public/assets/javascripts/mx/extensions/mx.rotationControl.js
deleted file mode 100644
index 9adb627..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.rotationControl.js
+++ /dev/null
@@ -1,265 +0,0 @@
-// Usage:
-//
-// var control = new MX.RotationControl()
-// control.init( object{MX.Object3D} [, listener{HTMLElement}] )
-//
-// In animation loop:
-//
-// control.update()
-//
-// The above code will register handler functions on `listener`
-// and will be updating `object`s rotationX and rotationY
-// If no `listener` is provided, will default to `object`s el.
-
-MX.RotationControl = function () {
-
- var object,
- locked = false
-
- var down = false,
- active = false,
- lastX,
- lastY
-
- var pointerLockPrefix =
- 'pointerLockElement' in document ? '' :
- 'mozPointerLockElement' in document ? 'moz' :
- 'webkitPointerLockElement' in document ? 'webkit' : null,
- hasPointerLock = !(pointerLockPrefix === null)
- pointerLockEnabled = false
-
- var pub = {
-
- sensitivity : .5,
- ease : 10,
- drag : true,
-
- inverseX : false,
- inverseY : false,
-
- disableX : false,
- disableY : false,
-
- rotationX : 0,
- rotationY : 0,
-
- upperBoundX : undefined,
- lowerBoundX : undefined,
-
- upperBoundY : undefined,
- lowerBoundY : undefined,
-
- usePreset: function (name) {
- var ops = presets[name]
- if (ops) {
- if (currentPreset && presets[currentPreset].teardown) {
- presets[currentPreset].teardown()
- }
- for (var op in ops) {
- if (op !== 'setup' && op !== 'teardown') {
- pub[op] = ops[op]
- }
- }
- if (op.setup) ops.setup()
- }
- }
- }
-
- var currentPreset
- var presets = {
- firstPerson: {
- drag: false,
- ease: 2,
- sensitivity: .18,
- inverseX: true,
- inverseY: true,
- upperBoundX: MX.rotationUnit === 'deg' ? 90 : Math.PI / 2,
- lowerBoundX: MX.rotationUnit === 'deg' ? -90 : -Math.PI / 2
- },
- skybox: {
- sensitivity: .18,
- inverseX: true,
- inverseY: true,
- upperBoundX: MX.rotationUnit === 'deg' ? 90 : Math.PI / 2,
- lowerBoundX: MX.rotationUnit === 'deg' ? -90 : -Math.PI / 2
- }
- }
-
- function init (obj, lis) {
- if (active) return
-
- object = obj
- pub.rotationX = object.rotationX
- pub.rotationY = object.rotationY
-
- if (lis instanceof HTMLElement) {
- listener = lis
- } else if (lis instanceof MX.Object3D) {
- listener = lis.el
- } else {
- listener = window.document
- }
-
- listener.addEventListener('mousedown', onDown)
- listener.addEventListener('mousemove', onMove)
- listener.addEventListener('mouseup', onUp)
- listener.addEventListener('touchstart', onDown)
- listener.addEventListener('touchmove', onMove)
- listener.addEventListener('touchend', onUp)
-
- active = true
- }
-
- function changeObject (obj) {
- object = obj
- pub.rotationX = object.rotationX
- pub.rotationY = object.rotationY
- }
-
- function changeListener (lis) {
- remove()
- active = false
- init(object, lis)
- if (pointerLockEnabled) {
- initPointerLock()
- }
- }
-
- function remove () {
- if (!active) return
- listener.removeEventListener('mousedown', onDown)
- listener.removeEventListener('mousemove', onMove)
- listener.removeEventListener('mouseup', onUp)
- listener.removeEventListener('touchstart', onDown)
- listener.removeEventListener('touchmove', onMove)
- listener.removeEventListener('touchend', onUp)
-
- if (hasPointerLock) {
- document.removeEventListener(pointerLockPrefix + 'pointerlockchange', onPointerLockChange)
- document.removeEventListener('mousemove', onPointerLockMove)
- document.body[pointerLockPrefix + (pointerLockPrefix ? 'E' : 'e') + 'xitPointerLock']()
- }
- active = false
- }
-
- function onDown (e) {
- e = normalizeEvent(e)
- if (!e) return
- down = true
- lastX = e.pageX
- lastY = e.pageY
- }
-
- function onMove (e) {
- if (e.type = 'touchmove') {
- e.preventDefault()
- }
- if (pub.drag && !down) return
- e = normalizeEvent(e)
- if (!e) return
- lastX = lastX || e.pageX
- lastY = lastY || e.pageY
- var dx = e.pageX - lastX,
- dy = e.pageY - lastY
- lastX = e.pageX
- lastY = e.pageY
- updateTarget(dx, dy)
- }
-
- function onUp () {
- down = false
- }
-
- function initPointerLock () {
-
- if (pointerLockEnabled) return
-
- document.addEventListener(pointerLockPrefix + 'pointerlockchange', onPointerLockChange)
- document.addEventListener('mousemove', onPointerLockMove)
-
- document.body[pointerLockPrefix + (pointerLockPrefix ? 'R' : 'r') + 'equestPointerLock']()
- }
-
- function onPointerLockChange () {
- var el = document.body
- if (document[pointerLockPrefix + (pointerLockPrefix ? 'P' : 'p') + 'ointerLockElement'] === el) {
- pointerLockEnabled = true
- } else {
- pointerLockEnabled = false
- }
- }
-
- function onPointerLockMove (e) {
- if (!pointerLockEnabled) return
- var dx = e[pointerLockPrefix + (pointerLockPrefix ? 'M' : 'm') + 'ovementX'],
- dy = e[pointerLockPrefix + (pointerLockPrefix ? 'M' : 'm') + 'ovementY']
- updateTarget(dx, dy)
- }
-
- function normalizeEvent (e) {
- if (e.touches) {
- return e.touches.length > 1 ? false : e.touches[0]
- } else {
- return e
- }
- }
-
- function updateTarget (dx, dy) {
- if (pub.inverseX) dx = -dx
- if (pub.inverseY) dy = -dy
- if (MX.rotationUnit !== 'deg') {
- dx = MX.toRad(dx)
- dy = MX.toRad(dy)
- }
-
- if (!pub.disableX) {
- pub.rotationX -= dy * pub.sensitivity
- if (pub.upperBoundX) pub.rotationX = Math.min(pub.rotationX, pub.upperBoundX)
- if (pub.lowerBoundX) pub.rotationX = Math.max(pub.rotationX, pub.lowerBoundX)
- }
-
- if (!pub.disableY) {
- pub.rotationY += dx * pub.sensitivity
- if (pub.upperBoundY) pub.rotationY = Math.min(pub.rotationY, pub.upperBoundY)
- if (pub.lowerBoundY) pub.rotationY = Math.max(pub.rotationY, pub.lowerBoundY)
- }
- }
-
- function update () {
- if (!object || locked) return
- var dx = pub.rotationX - object.rotationX,
- dy = pub.rotationY - object.rotationY
- if (Math.abs(dx) < 0.0001) {
- object.rotationX = pub.rotationX
- } else {
- object.rotationX += dx / pub.ease
- }
- if (Math.abs(dy) < 0.0001) {
- object.rotationY = pub.rotationY
- } else {
- object.rotationY += dy / pub.ease
- }
- }
-
- function lock () {
- locked = true
- }
-
- function unlock () {
- pub.rotationX = object.rotationX
- pub.rotationY = object.rotationY
- locked = false
- }
-
- pub.init = init
- pub.remove = remove
- pub.update = update
- pub.lock = lock
- pub.unlock = unlock
- pub.initPointerLock = initPointerLock
- pub.changeObject = changeObject
- pub.changeListener = changeListener
-
- return pub
-
-} \ No newline at end of file
diff --git a/site/public/assets/javascripts/mx/extensions/mx.scene.js b/site/public/assets/javascripts/mx/extensions/mx.scene.js
deleted file mode 100644
index 8f11fb0..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.scene.js
+++ /dev/null
@@ -1,165 +0,0 @@
-// NOTE
-//
-// This is not a fully functional 3d scene as you might expect.
-// The camera can only do pitch (rotationX) and yaw (rotationY), but no roll (rotationZ)
-// because I haven't implemented alternative euler orders or quaternions.
-//
-// For serious 3D scenes with more functionalities you should use
-// THREE.js with CSS3D Renderer.
-
-MX.Camera = MX.Object3D.extend({
-
- init: function(){
- this.el = null
- this.type = "Camera"
- },
-
- move: function(s){
- for (var i in s) {
- this[i] = s[i]
- }
- },
-
- toString: function(){
- var params = "x y z rotationX rotationY".split(" ")
- return this.__toString(params, "scene.camera.move")
- },
-
- getCameraEuler: function (target) {
- var dx = target.x - this.x,
- dy = target.y - this.y,
- dz = target.z - this.z
- r = {}
- r.y = Math.atan2(-dx, dz)
- r.x = Math.atan2(-dy, Math.sqrt(dx*dx + dz*dz))
- r.z = 0
- if (MX.rotationUnit === 'deg') {
- r.x = MX.toDeg(r.x)
- r.y = MX.toDeg(r.y)
- }
- return r
- }
-
-})
-
-MX.Scene = (function () {
-
- var add = MX.Object3D.prototype.add,
- remove = MX.Object3D.prototype.remove
-
- function Scene () {
-
- this.el = document.createElement('div')
- this.el.classList.add('mx-scene')
-
- var s = this.el.style
-
- s[MX.transformProp] = 'preserve-3d'
-
- s.webkitPerspectiveOrigin = '50% 50%'
- s.mozPerspectiveOrigin = '50% 50%'
- s.perspectiveOrigin = '50% 50%'
-
- s.webkitUserSelect = 'none'
- s.mozUserSelect = 'none'
- s.userSelect = 'none'
-
- s.overflow = 'hidden'
-
- this.inner = new MX.Object3D().addTo(this.el)
- this.inner.el.style.width = '0'
- this.inner.el.style.height = '0'
-
- var self = this
- var width, height, perspective
-
- Object.defineProperty(this, 'width', {
- get: function () {
- return width
- },
- set: function (val) {
- width = val
- self.el.style.width = val + 'px'
- }
- })
-
- Object.defineProperty(this, 'height', {
- get: function () {
- return height
- },
- set: function (val) {
- height = val
- self.el.style.height = val + 'px'
- }
- })
-
- Object.defineProperty(this, 'perspective', {
- get: function () {
- return perspective
- },
- set: function (val) {
- perspective = val
- self.el.style[MX.perspectiveProp] = val + 'px'
- self.inner.z = -val - self.camera.z
- self.inner.rotationOrigin.z = -val
- }
- })
-
- var cam = this.camera = new MX.Camera()
-
- this.inner.rotationOrigin = { x:0, y:0, z:0 }
-
- this.perspective = 0
- }
-
- Scene.prototype = {
-
- constructor: Scene,
-
- add: function () {
- add.apply(this.inner, arguments)
- return this
- },
-
- remove: function () {
- remove.apply(this.inner, arguments)
- return this
- },
-
- addTo: function (target) {
- if (typeof target === 'string') {
- target = document.querySelector(target)
- }
- if (target instanceof HTMLElement && target.appendChild) {
- target.appendChild(this.el)
- } else {
- console.warn('You can only add a Scene to an HTML element.')
- }
- return this
- },
-
- update: function () {
- // update inner based on camera
-
- var i = this.inner,
- c = this.camera
-
- c.update()
-
- i.z = -this.perspective - c.z
- i.x = -c.x
- i.y = -c.y
-
- i.rotationX = -c.rotationX
- i.rotationY = -c.rotationY
- //i.rotationZ = -c.rotationZ
-
- i.update()
- return this
- },
-
- }
-
- return Scene
-
-})() \ No newline at end of file
diff --git a/site/public/assets/javascripts/mx/extensions/mx.scrubber.js b/site/public/assets/javascripts/mx/extensions/mx.scrubber.js
deleted file mode 100644
index 54612f2..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.scrubber.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- Use the scrollwheel to tween between different points and orientations
-
- scrubber = new MX.Scrubber(cam, [
- {
- position: [0, viewHeight, -1000],
- rotation: [0, 0]
- },
- {
- position: [0, 1000, 1000],
- rotation: [0, Math.PI]
- },
- {
- position: [0, viewHeight, -1000],
- rotation: [0, 2*Math.PI]
- },
- {
- position: [0, viewHeight, -2000],
- rotation: [0, 0]
- }
- ])
-
- // in your animate function:
- scrubber.update()
-
-*/
-
-MX.Scrubber = function (obj, points) {
-
- obj = obj || {}
- points = points || {}
-
- var reversible = true, loop = false;
-
- var total = points.length * 100,
- distance = 0
- destination = 0,
- last_index = -1,
- last_name = null,
- locked = false,
- point_count = points.length + (loop+0)
-
- var avg_speed = scroll_avg_speed = 5,
- click_avg_speed = 20,
- webkit_ratio = 0.02
-
- if (points[0].position) {
- points.forEach(function(p){
- p.x = p.position[0]
- p.y = p.position[1]
- p.z = p.position[2]
- p.rotationX = p.rotation[0]
- p.rotationY = p.rotation[1]
- })
- }
-
- document.addEventListener('touchstart', next, false);
- document.addEventListener('mousedown', next, false);
- document.addEventListener('mousewheel', onDocumentMouseWheel, false);
- document.addEventListener('DOMMouseScroll', onDocumentMouseWheel, false);
- function onDocumentMouseWheel (e) {
-
- if (locked) return
-
- var delta = 0;
-
- // WebKit
- if ( event.wheelDeltaY ) {
- delta -= event.wheelDeltaY * webkit_ratio
- }
- // Opera / Explorer 9
- else if ( event.wheelDelta ) {
- delta -= event.wheelDelta * webkit_ratio
- }
- // Firefox
- else if ( event.detail ) {
- delta += event.detail * 2
- }
- if (! reversible && delta < 0) return;
-
- if (destination < total-100 || delta < 0) {
- e.preventDefault()
- }
- else {
- return
- }
-
- destination += delta
-
- avg_speed = scroll_avg_speed
- }
-
- function add_point(point){
- if (point.type == "Camera") {
- point = {
- position: [ point.x, point.y, point.z ],
- rotation: [ point.rotationX, point.rotationY ],
- callback: noop
- }
- }
- points.push(point)
- total = points.length * 100
- }
-
- function reset(){
- distance = destination = 0
- last_index = -1
- last_name = null
- }
-
- function next(){
- destination = ~~(destination/100) * 100
- destination += 100
- avg_speed = click_avg_speed
- }
-
- function update(){
- if (locked) return
-
- if (destination > total-100) destination = total-100
-
- distance = avg(distance, destination, avg_speed)
- var ratio = distance / total
-
- if (! loop) {
- if (ratio < 0) {
- destination = 0
- ratio = 0
- }
- else if (ratio > 1) {
- destination = total
- ratio = 1
- }
- }
-
- var diff = ratio * point_count
- var step = (distance % 100) / 100
- var src = ~~clamp(diff, 0, point_count-1)
- var halfway = ~~clamp(diff + 0.5, 0, point_count-1)
- var dest = ~~clamp(diff + 1, 0, point_count-1)
-
- if (halfway != last_index) {
- last_index = halfway
- if (points[last_index].name != last_name) {
- last_name = points[last_index].name
- }
- $("#info .active").removeClass("active")
- $("#info div[data-name='" + last_name + "']").addClass("active")
- points[halfway].callback && points[halfway].callback()
- }
-
- var ry0 = points[src].rotationY
- var ry1 = points[dest].rotationY
- if (abs(ry0 - ry1) == TWO_PI) {
- ry0 = ry1
- }
-
- obj.x = lerp(step, points[src].x, points[dest].x)
- obj.y = lerp(step, points[src].y, points[dest].y)
- obj.z = lerp(step, points[src].z, points[dest].z)
- obj.rotationX = lerp(step, points[src].rotationX, points[dest].rotationX)
- obj.rotationY = lerp(step, ry0, ry1)
- if (obj.rotationY > PI) { obj.rotationY -= TWO_PI }
- }
-
- var scrubber = {
- init: function(){
- app && app.movements && app.movements.lock()
- },
- lock: function(){
- app && app.movements && app.movements.unlock()
- locked = true
- },
- unlock: function(){
- app && app.movements && app.movements.lock()
- locked = false
- },
- step: function(n){
- distance = destination = n * 100
- },
- add_point: add_point,
- reset: reset,
- next: next,
- update: update,
-
- obj: obj,
- points: points
- }
-
- return scrubber;
-}
diff --git a/site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCamera.js b/site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCamera.js
deleted file mode 100644
index 28b1aac..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCamera.js
+++ /dev/null
@@ -1,130 +0,0 @@
-MX.OrbitCamera = function(opt){
- var exports = {}, bound = false
- exports.opt = opt = defaults(opt, {
- el: window, // object to bind events on
- camera: scene.camera, // camera object we'll be moving
- radius: 100,
- radiusRange: [ 10, 1000 ],
- rotationX: PI/2,
- rotationY: 0,
- center: { x: 0, y: 0, z: 0 },
- sensitivity: 10, // moving 1 pixel is like moving N radians
- wheelSensitivity: 10,
- ease: 10,
- wheelEase: 10,
- })
- var rx, ry, radius, px, py, epsilon = 1e-10
- exports.dragging = false
- exports.init = function(){
- ry = opt.rotationY
- rx = opt.rotationX
- radius = opt.radius
- exports.wheel = new wheel({
- el: opt.el,
- update: function(e, delta){
- opt.radius = clamp( opt.radius + delta * opt.wheelSensitivity, opt.radiusRange[0], opt.radiusRange[1] )
- },
- })
- exports.bind()
- }
- exports.toggle = function(state){
- if (state) exports.bind()
- else exports.unbind()
- }
- exports.bind = function(){
- if (bound) return;
- bound = true
- opt.el.addEventListener("mousedown", down)
- window.addEventListener("mousemove", move)
- window.addEventListener("mouseup", up)
- opt.el.addEventListener("touchstart", touch(down))
- window.addEventListener("touchmove", touch(move))
- window.addEventListener("touchend", touch(up))
- exports.wheel.unlock()
- }
- exports.unbind = function(){
- if (! bound) return;
- bound = false
- opt.el.removeEventListener("mousedown", down)
- window.removeEventListener("mousemove", move)
- window.removeEventListener("mouseup", up)
- exports.wheel.lock()
- }
- function cancelable (fn) {
- return function(e){
- e.preventDefault()
- fn(e)
- }
- }
- function touch (fn){
- return function(e){
- fn(e.touches[0])
- }
- }
- function down (e) {
- px = e.pageX
- py = e.pageY
- exports.dragging = true
- }
- function move (e) {
- if (! exports.dragging) return
- exports.delta(px- e.pageX, py - e.pageY)
- px = e.pageX
- py = e.pageY
- }
- function up (e) {
- exports.dragging = false
- }
- exports.delta = function(x,y){
- opt.rotationY += x/window.innerWidth * opt.sensitivity
- opt.rotationX = opt.rotationX + y/window.innerHeight * opt.sensitivity
- }
- exports.move = function(y, x){
- opt.rotationY = y
- if (typeof x == "number") { opt.rotationX = x }
- }
- exports.zoom = function(r){
- opt.radius = r
- }
- exports.setZoom = function(r){
- radius = opt.radius = r
- }
- exports.zoomPercent = function(n){
- opt.radius = lerp(n, opt.radiusRange[0], opt.radiusRange[1])
- }
- exports.zoomDelta = function(r){
- opt.radius += r
- }
- exports.pause = function(){
- var sy = sign(opt.rotationY-ry)
- var sx = sign(opt.rotationX-rx)
- opt.rotationY = ry + sy * 0.1
- opt.rotationX = rx + sx * 0.1
- }
- exports.update = function(){
- if (abs(ry - opt.rotationY) > epsilon) {
- ry = avg(ry, opt.rotationY, opt.ease)
- }
- else {
- ry = opt.rotationY
- }
- if (abs(rx - opt.rotationX) > epsilon) {
- rx = avg(rx, opt.rotationX, opt.ease)
- }
- else {
- rx = opt.rotationX
- }
- if (abs(radius - opt.radius) > epsilon) {
- radius = avg(radius, opt.radius, opt.wheelEase)
- }
- else {
- radius = opt.radius
- }
- opt.camera.x = opt.center.x + radius * sin(rx) * cos(ry)
- opt.camera.z = opt.center.y + radius * sin(rx) * sin(ry)
- opt.camera.y = opt.center.z + radius * cos(rx)
- opt.camera.rotationX = PI/2 - rx
- opt.camera.rotationY = ry + PI/2
- }
- return exports
-}
diff --git a/site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCameraMobile.js b/site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCameraMobile.js
deleted file mode 100644
index 510a002..0000000
--- a/site/public/assets/javascripts/mx/extensions/mx.unclampedOrbitCameraMobile.js
+++ /dev/null
@@ -1,225 +0,0 @@
-MX.OrbitCameraMobile = function(opt){
- var exports = {}, bound = false
- exports.opt = opt = defaults(opt, {
- el: window, // object to bind events on
- camera: scene.camera, // camera object we'll be moving
- radius: 100,
- radiusRange: [ 10, 1000 ],
- rotationX: PI/2,
- rotationY: 0,
- center: { x: 0, y: 0, z: 0 },
- sensitivity: 10, // moving 1 pixel is like moving N radians
- wheelSensitivity: 10,
- ease: 10,
- wheelEase: 10,
- })
- var rx, ry, radius, px, py, epsilon = 1e-10
- var rotationSum = 0
- var rotationMedian = 0
- var orientationMax = 0
- var samples = 0
- var sampleThreshold = 20
- var lastAlpha
-
- exports.dragging = false
- exports.init = function(){
- ry = opt.rotationY
- rx = opt.rotationX
- radius = opt.radius
- exports.wheel = new wheel({
- el: opt.el,
- update: function(e, delta){
- opt.radius = clamp( opt.radius + delta * opt.wheelSensitivity, opt.radiusRange[0], opt.radiusRange[1] )
- },
- })
- exports.bind()
-
- exports.orientationchange()
- }
- exports.toggle = function(state){
- if (state) exports.bind()
- else exports.unbind()
- }
- exports.bind = function(){
- if (bound) return;
- bound = true
- opt.el.addEventListener("touchstart", touch(down))
- window.addEventListener("touchmove", touch(move))
- window.addEventListener("touchend", touch(up))
-
- window.addEventListener('orientationchange', exports.orientationchange)
- window.addEventListener("devicemotion", exports.devicemotion)
- window.addEventListener("deviceorientation", exports.deviceorientation)
-
- exports.wheel.unlock()
- }
- exports.unbind = function(){
- if (! bound) return;
- bound = false
- exports.wheel.lock()
- }
- function cancelable (fn) {
- return function(e){
- e.preventDefault()
- fn(e)
- }
- }
- function touch (fn){
- return function(e){
- fn(e.touches[0])
- }
- }
- function down (e) {
- px = e.pageX
- py = e.pageY
- exports.dragging = true
- }
- function move (e) {
- if (! exports.dragging) return
- exports.delta(px- e.pageX, py - e.pageY)
- px = e.pageX
- py = e.pageY
- }
- function up (e) {
- exports.dragging = false
- }
-
- exports.orientationchange = function(e){
- is_portrait = window.innerWidth < window.innerHeight
- if (is_portrait) {
- lastAlpha = 0
- }
- }
- exports.devicemotion = function(e) {
- if (! is_portrait) return;
- var rotationBeta = e.rotationRate.alpha; // weird!
- rotationSum += rotationBeta;
- samples += 1;
- }
- exports.deviceorientation = function (e) {
- if (! lastAlpha) { lastAlpha = e.alpha }
- is_portrait ? exports.portraitorientation(e) : exports.landscapeorientation(e)
- }
- exports.portraitorientation = function(e) {
- // compass gives most accurate orientation in portrait mode
- var alpha, dx = 0, dy = 0
-
- if (e.webkitCompassHeading) {
- alpha = 180 - e.webkitCompassHeading;
- }
- else {
- alpha = 180 - e.alpha;
- }
-
- // android rotates in reverse
- if (is_android) {
- alpha = 360 - alpha
- }
-
- // use rotationRate to gauge if we've tilted the screen past vertical
- // for looking at ceiling
- if (e.beta > orientationMax) {
- orientationMax = e.beta
- rotationMedian = rotationSum
- }
-
- // this number was only going to 83 max.. not 90.. weird
- var beta = e.beta + 7;
-
- // if we've got enough motion data, we should be able to determine
- // if we've tilted backwards. otherwise, lock to the horizon.
- if (! is_android && samples > sampleThreshold) {
- dx = rotationSum > rotationMedian ? e.beta - 90 : 90 - e.beta
- }
- else {
- dx = 0
- }
-
- // avoid jumping around in a circle
- if (Math.abs(alpha - lastAlpha) < 100 || Math.abs(alpha - lastAlpha) > 300) {
- dy = alpha - lastAlpha
- lastAlpha = alpha
- }
-
- // avoid jumping around in a circle #2
- if (dy > 300) {
- dy -= 360
- } else if (dy < -300) {
- dy += 360
- }
- opt.rotationX = MX.toRad(dx * -5)
- opt.rotationY += MX.toRad(dy * 10)
- }
- exports.landscapeorientation = function (e) {
- var dx, dy
-
- dx = e.gamma > 0 ? 90 - e.gamma : 90 + e.gamma
- dy = e.alpha - lastAlpha
- lastAlpha = e.alpha
-
- // avoid the sudden jump from 0 to -360
- if (dy > 300) {
- dy -= 360
- }
- else if (dy < -300) {
- dy += 360
- }
-
- opt.rotationX = dx > 45 ? 0 : MX.toRad(dx)
- opt.rotationY += MX.toRad(dy)
- }
-
-
- exports.delta = function(x,y){
- opt.rotationY += x/window.innerWidth * opt.sensitivity
- opt.rotationX = opt.rotationX + y/window.innerHeight * opt.sensitivity
- }
- exports.move = function(y, x){
- opt.rotationY = y
- if (typeof x == "number") { opt.rotationX = x }
- }
- exports.zoom = function(r){
- opt.radius = r
- }
- exports.setZoom = function(r){
- radius = opt.radius = r
- }
- exports.zoomPercent = function(n){
- opt.radius = lerp(n, opt.radiusRange[0], opt.radiusRange[1])
- }
- exports.zoomDelta = function(r){
- opt.radius += r
- }
- exports.pause = function(){
- var sy = sign(opt.rotationY-ry)
- var sx = sign(opt.rotationX-rx)
- opt.rotationY = ry + sy * 0.1
- opt.rotationX = rx + sx * 0.1
- }
- exports.update = function(){
- if (abs(ry - opt.rotationY) > epsilon) {
- ry = avg(ry, opt.rotationY, opt.ease)
- }
- else {
- ry = opt.rotationY
- }
- if (abs(rx - opt.rotationX) > epsilon) {
- rx = avg(rx, opt.rotationX, opt.ease)
- }
- else {
- rx = opt.rotationX
- }
- if (abs(radius - opt.radius) > epsilon) {
- radius = avg(radius, opt.radius, opt.wheelEase)
- }
- else {
- radius = opt.radius
- }
- opt.camera.x = opt.center.x + radius * sin(rx) * cos(ry)
- opt.camera.z = opt.center.y + radius * sin(rx) * sin(ry)
- opt.camera.y = opt.center.z + radius * cos(rx)
- opt.camera.rotationX = PI/2 - rx
- opt.camera.rotationY = ry + PI/2
- }
- return exports
-}