if( keycode == keyb.up OR keycode == keyb.w, copy(walkaround.forward, keypressed); , keycode == keyb.down OR keycode == keyb.s, copy(walkaround.backward, keypressed); , keycode == keyb.left OR keycode == keyb.a, copy(walkaround.left, keypressed); , keycode == keyb.right OR keycode == keyb.d, copy(walkaround.right, keypressed); , keycode == keyb.shift, copy(walkaround.faster, keypressed); , keycode == keyb.ctrl, copy(walkaround.strafe, keypressed); , keycode == keyb.q, copy(walkaround.up, keypressed); , keycode == keyb.y OR keycode == keyb.z, copy(walkaround.down, keypressed); ); 0.3) dx = 0; // too fast changes are probably no swipes if (Math.abs(dz) > 0.3) dz = 0; if (controlmode == 0) // rotate { rx += touchpad_rotate_speed * dx; } else // move { vx += touchpad_move_speed * ( dx*lz2 + dz*lx2); vz += touchpad_move_speed * (-dx*lx2 + dz*lz2); } } } else { // joystick - direct control if (controlmode == 0) // rotate { if (Math.abs(axes[0]) > 0.2) { rx = joystick_rotate_speed * axes[0]; } } else // move { // ignore too small values, some vr-controllers, e.g. Windows MR ones, are constantly reporting small wrong values if ( Math.abs(axes[0]) > 0.2 ) wx += joystick_move_speed * axes[0]; if ( Math.abs(axes[1]) > 0.2 ) wz -= joystick_move_speed * axes[1]; } } } } } var wl = Math.sqrt(wx*wx + wz*wz); if (wl > 0) { // normalize the moving speed wl = speed / wl; if (walkaround.faster > 0) wl *= 3; wx *= wl; wz *= wl; if (wx) { vx += wx*lz2; vz -= wx*lx2; } if (wz) { if (krpano.depthmap_movemode == "flying") { vx += wz*lx3; vz += wz*lz3; vy += wz*ly3; } else { vx += wz*lx2; vz += wz*lz2; } } } if (wy) { vy -= 0.5*speed*wy; } krpano.view.tx += vx; krpano.view.ty += vy; krpano.view.tz += vz; if (rx != 0) { krpano.webvr.hlookatoffset += rx; } }); ]]>