summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/mx/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/mx/extensions')
-rw-r--r--public/assets/javascripts/mx/extensions/mx.movements.js4
-rw-r--r--public/assets/javascripts/mx/extensions/mx.movementsMobile.js124
2 files changed, 127 insertions, 1 deletions
diff --git a/public/assets/javascripts/mx/extensions/mx.movements.js b/public/assets/javascripts/mx/extensions/mx.movements.js
index 191088f..3b7d3e2 100644
--- a/public/assets/javascripts/mx/extensions/mx.movements.js
+++ b/public/assets/javascripts/mx/extensions/mx.movements.js
@@ -149,7 +149,8 @@ MX.Movements = function (cam) {
case 32: // space
moveUp = moveDown = false
break
-
+
+/*
case 48: // 0
cam.rotationX = 0
cam.rotationY = 0
@@ -157,6 +158,7 @@ MX.Movements = function (cam) {
cam.y = viewHeight
cam.z = 0
break
+*/
}
})
diff --git a/public/assets/javascripts/mx/extensions/mx.movementsMobile.js b/public/assets/javascripts/mx/extensions/mx.movementsMobile.js
new file mode 100644
index 0000000..994c8d7
--- /dev/null
+++ b/public/assets/javascripts/mx/extensions/mx.movementsMobile.js
@@ -0,0 +1,124 @@
+
+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
+
+ return {
+
+ init: function () {
+ document.addEventListener("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
+ }
+ })
+ document.addEventListener("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)
+ }
+ })
+ document.addEventListener("touchend", function(e){
+ e.preventDefault()
+ if (e.touches.length == 0) {
+ touching = directionLocked = false
+ var timestamp = Date.now()
+ var duration = startTime - timestamp
+ if (duration < 300) {
+ }
+ }
+ })
+ },
+
+ update: function () {
+ 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)
+ pos.rotationY += dx / (window.innerWidth) * Math.PI / 2
+ cam.rotationY = pos.rotationY
+
+ 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) },
+ }
+
+}
+
+
+// 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
+// };
+// }