diff options
Diffstat (limited to 'site/public/assets/javascripts/mx/extensions')
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 -} |
