summaryrefslogtreecommitdiff
path: root/assets/javascripts/mx/extensions/mx.movements.js
diff options
context:
space:
mode:
authorJulie Lala <jules@okfoc.us>2014-04-17 10:17:09 -0400
committerJulie Lala <jules@okfoc.us>2014-04-17 10:17:09 -0400
commit6005be1d04dd02000889d8be2faaf62969c4421f (patch)
tree12c2151b606188bd02b656689928035c0561bf36 /assets/javascripts/mx/extensions/mx.movements.js
stowing UI stuff in empty branchui-mocks
Diffstat (limited to 'assets/javascripts/mx/extensions/mx.movements.js')
-rw-r--r--assets/javascripts/mx/extensions/mx.movements.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/assets/javascripts/mx/extensions/mx.movements.js b/assets/javascripts/mx/extensions/mx.movements.js
new file mode 100644
index 0000000..691ada7
--- /dev/null
+++ b/assets/javascripts/mx/extensions/mx.movements.js
@@ -0,0 +1,160 @@
+
+
+MX.Movements = function (cam, viewHeight, minimap) {
+
+ var moveForward,
+ moveLeft,
+ moveBackward,
+ moveRight,
+ turnLeft,
+ turnRight,
+ jumping = false
+
+ var v = 25,
+ vr = Math.PI * 0.015
+ jumpV = 30,
+ vx = vy = vz = 0
+
+ return {
+
+ init: function () {
+
+ document.addEventListener('keydown', function (e) {
+ $(".edit-image.menu,.edit-video.menu").hide()
+
+ switch ( e.keyCode ) {
+ case 38: // up
+ case 87: // w
+ moveForward = true
+ break
+
+ case 37: // left
+ case 65: // a
+ turnLeft = true
+ break
+
+ case 40: // down
+ case 83: // s
+ moveBackward = true
+ break
+
+ case 39: // right
+ case 68: // d
+ turnRight = true
+ break
+
+ case 32: // space
+ if (!jumping) vy += jumpV
+ jumping = true
+ break
+ }
+ })
+
+ document.addEventListener('keyup', function (e) {
+ $(".edit-image.menu,.edit-video.menu").hide()
+
+ switch ( e.keyCode ) {
+ case 38: // up
+ case 87: // w
+ moveForward = false
+ break
+
+ case 37: // left
+ case 65: // a
+ turnLeft = false
+ break
+
+ case 40: // down
+ case 83: // s
+ moveBackward = false
+ break
+
+ case 39: // right
+ case 68: // d
+ turnRight = false
+ break
+ }
+ })
+
+ var mouseX, mouseY, dx, dy, rotX, rotY, dragging = false
+ document.addEventListener('mousedown', function (e) {
+ $(".edit-image.menu,.edit-video.menu").hide()
+
+ mouseX = e.pageX
+ mouseY = e.pageY
+ rotX = cam.rotationX
+ rotY = cam.rotationY
+ dragging = true
+ })
+ document.addEventListener('mousemove', function (e) {
+ if (! dragging || app.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 = rotX - dy
+ minimap.update()
+ })
+ document.addEventListener('mouseup', function (e) {
+ app.dragging = dragging = false
+ })
+
+ window.addEventListener('blur', function(e){
+ $(".edit-image.menu,.edit-video.menu").hide()
+ moveForward = moveLeft= moveBackward = moveRight = turnLeft = turnRight = jumping = dragging = false
+ })
+
+ },
+
+ update: function () {
+
+ var ry = cam.rotationY
+
+ if (moveForward || moveBackward || moveRight || moveLeft || turnLeft || turnRight) {
+
+ vx = vz = 0
+
+ if (moveForward) {
+ vx += v * Math.cos(ry + Math.PI / 2)
+ vz += v * Math.sin(ry + Math.PI / 2)
+ }
+ if (moveBackward) {
+ vx -= v * Math.cos(ry + Math.PI / 2)
+ vz -= v * Math.sin(ry + Math.PI / 2)
+ }
+ if (moveLeft) {
+ vx -= v * Math.cos(ry)
+ vz -= v * Math.sin(ry)
+ }
+ if (moveRight) {
+ vx += v * Math.cos(ry)
+ vz += v * Math.sin(ry)
+ }
+
+ if (turnLeft) {
+ cam.rotationY += vr
+ }
+ if (turnRight) {
+ cam.rotationY -= vr
+ }
+
+ cam.x += vx
+ cam.z += vz
+
+ minimap.update()
+
+ }
+
+ vy -= 1
+
+ // update cam
+ cam.y += vy
+
+ if (cam.y <= viewHeight) {
+ cam.y = viewHeight
+ vy = 0
+ jumping = false
+ }
+
+ }
+ }
+}