summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/mx/extensions/mx.movements.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/mx/extensions/mx.movements.js')
-rw-r--r--public/assets/javascripts/mx/extensions/mx.movements.js406
1 files changed, 247 insertions, 159 deletions
diff --git a/public/assets/javascripts/mx/extensions/mx.movements.js b/public/assets/javascripts/mx/extensions/mx.movements.js
index 669a7f4..3e34c1b 100644
--- a/public/assets/javascripts/mx/extensions/mx.movements.js
+++ b/public/assets/javascripts/mx/extensions/mx.movements.js
@@ -16,193 +16,281 @@ MX.Movements = function (cam) {
creeping = false,
locked = false,
gravity = false,
- rotationX_min = PI/-2,
- rotationX_max = PI/2
+ rotationX_min = PI/-4,
+ rotationX_max = PI/6
var v = 12,
- vr = Math.PI * 0.012,
+ vr = Math.PI * 0.018,
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 }
- return {
+ $(document).one("keydown", function(){
+ $("#keyhint").fadeOut(250);
+ $('.reader #minimap').addClass('active');
+ })
- init: function () {
+ function clampRotation( vr ) {
+ if (window.Rooms && Rooms.mover.noclip) {
+ return clamp(vr, PI/-2, PI/2 )
+ }
+ else {
+ return clamp(vr, PI/-4, PI/6 )
+ }
+ }
- document.addEventListener('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
+ 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 38: // up
+ case 87: // w
+ moveForward = true
+ break
- case 37: // left
- case 65: // a
- moveLeft = true
- break
+ case 65: // a
+ moveLeft = true
+ break
- case 40: // down
- case 83: // s
- moveBackward = true
- break
+ case 40: // down
+ case 83: // s
+ moveBackward = true
+ break
- case 39: // right
- case 68: // d
- moveRight = true
- break
+ case 68: // d
+ moveRight = true
+ break
- case 81: // q
- turnLeft = true
- break
-
- case 69: // e
- turnRight = true
- break
-
- case 82: // r
- turnUp = 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 70: // f
+ turnDown = true
+ break
- case 32: // space
- if (gravity) {
- jumping = true
- vy = abs(vy) + jumpV * scale
- if (e.shiftKey) {
- vy *= -1
- }
+ case 32: // space
+ if (gravity) {
+ jumping = true
+ vy = abs(vy) + jumpV * scale
+ if (e.shiftKey) {
+ vy *= -1
+ }
+ }
+ else {
+ if (e.shiftKey) {
+ moveDown = true
}
else {
- if (e.shiftKey) {
- moveDown = true
- }
- else {
- moveUp = true
- }
+ moveUp = true
}
- break
+ }
+ break
- case 27: // esc
- map.toggle()
- 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 if (Rooms.shapesMode) {
+ // don't show map in editor for now..
+ }
+ else {
+ app.controller.toolbar.toggleMap()
+ }
+ break
+
+ case 8: // backspace
+ e.preventDefault()
+ if (app.controller.sculptureEditor && app.controller.sculptureEditor.sculpture) {
+ app.controller.sculptureEditor.sculpture.remove()
+ }
+ else if (app.controller.mediaEditor && app.controller.mediaEditor.scenery) {
+ app.controller.mediaEditor.scenery.remove()
+ }
+ else if (app.controller.textEditor && app.controller.textEditor.scenery) {
+ app.controller.textEditor.scenery.remove()
+ }
+ }
+ },
- document.addEventListener('keyup', function (e) {
- if (locked) return;
- switch ( e.keyCode ) {
-
- case 16: // shift
- creeping = false
- break
+ 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 38: // up
+ case 87: // w
+ moveForward = false
+ break
- case 37: // left
- case 65: // a
- moveLeft = false
- break
+ case 65: // a
+ moveLeft = false
+ break
- case 40: // down
- case 83: // s
- moveBackward = false
- break
+ case 40: // down
+ case 83: // s
+ moveBackward = false
+ break
- case 39: // right
- case 68: // d
- moveRight = false
- break
+ case 68: // d
+ moveRight = false
+ break
- case 81: // q
- turnLeft = false
- break
-
- case 69: // e
- turnRight = 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 82: // r
+ turnUp = false
+ break
- case 70: // f
- turnDown = false
- break
+ case 70: // f
+ turnDown = false
+ break
- case 32: // space
- moveUp = moveDown = 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
+ case 48: // 0
+ movements.center()
+ break
*/
- }
- })
-
- var mouseX, mouseY, dx, dy, rotX, rotY, dragging = false
- document.addEventListener('mousedown', function (e) {
- if (locked) return;
- mouseX = e.pageX
- mouseY = e.pageY
- rotX = cam.rotationX
- rotY = cam.rotationY
- dragging = true
- })
-
- document.addEventListener('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 = clamp( rotX - dy, rotationX_min, rotationX_max )
- })
-
- document.addEventListener('mouseup', function (e) {
- dragging = false
- })
-
- window.addEventListener('blur', reset)
- window.addEventListener('focus', reset)
- function reset(){
- moveForward = moveLeft = moveBackward = moveRight = moveUp = moveDown = turnLeft = turnRight = jumping = dragging = creeping = false
}
+ },
+
+ center: function(){
+ cam.rotationX = 0
+ cam.rotationY = 0
+ cam.x = 0
+ cam.y = viewHeight
+ cam.z = 0
+ },
+ 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 () {
+ update: function (dt) {
- if (locked) return;
+ if (locked) { return }
var ry = cam.rotationY
var s = creeping ? scale * creepFactor : scale
- var vrrrr = creeping ? vr * creepFactor * 5 : vr
+ 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
@@ -210,33 +298,33 @@ MX.Movements = function (cam) {
if (moving) {
if (moveForward) {
- vx += v * Math.cos(ry + Math.PI / 2) * s
- vz += v * Math.sin(ry + Math.PI / 2) * s
+ vx += vv * Math.cos(ry + Math.PI / 2) * s
+ vz += vv * Math.sin(ry + Math.PI / 2) * s
}
if (moveBackward) {
- vx -= v * Math.cos(ry + Math.PI / 2) * s
- vz -= v * Math.sin(ry + Math.PI / 2) * s
+ vx -= vv * Math.cos(ry + Math.PI / 2) * s
+ vz -= vv * Math.sin(ry + Math.PI / 2) * s
}
if (moveLeft) {
- vx -= v * Math.cos(ry) * s
- vz -= v * Math.sin(ry) * s
+ vx -= vv * Math.cos(ry) * s
+ vz -= vv * Math.sin(ry) * s
}
if (moveRight) {
- vx += v * Math.cos(ry) * s
- vz += v * Math.sin(ry) * s
+ vx += vv * Math.cos(ry) * s
+ vz += vv * Math.sin(ry) * s
}
if (moveUp) {
- pos.y += v * scale
+ pos.y += vv * scale
}
if (moveDown) {
- pos.y -= v * scale
+ pos.y -= vv * scale
}
if (turnUp) {
- cam.rotationX = clamp( cam.rotationX - vrrrr*s, rotationX_min, rotationX_max)
+ cam.rotationX = clampRotation( cam.rotationX - vrrrr*s )
}
if (turnDown) {
- cam.rotationX = clamp( cam.rotationX + vrrrr*s, rotationX_min, rotationX_max)
+ cam.rotationX = clampRotation( cam.rotationX + vrrrr*s )
}
if (turnLeft) {
cam.rotationY += vrrrr*s
@@ -261,15 +349,13 @@ MX.Movements = function (cam) {
pos.y = viewHeight
vy = 0
jumping = false
- vz = vz || 1
}
- var ceiling = (Rooms.mover.room ? Rooms.mover.room.height : 5000)
+ var ceiling = ((window.Rooms && Rooms.mover.room) ? Rooms.mover.room.height : 5000)
- if (pos.y >= ceiling) {
+ if (pos.y >= ceiling-5) {
vy = 0
- pos.y = ceiling
- vz = vz || 1
+ pos.y = ceiling-5
}
}
@@ -286,4 +372,6 @@ MX.Movements = function (cam) {
velocity: function(n){ v = clamp(n, 1, 50) },
jumpVelocity: function(n){ jumpV = clamp(n, 1, 50) },
}
+
+ return exports
}