From 726c2fc8717c4dc48570d99ac3cac7178e4aaf3e Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Thu, 31 Dec 2020 18:01:38 +0100 Subject: [PATCH] framerate-independent vr aiming --- control.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/control.cpp b/control.cpp index d5f85fb6..48e0b843 100644 --- a/control.cpp +++ b/control.cpp @@ -801,6 +801,10 @@ EX void mainloopiter() { #if CAP_VR if(vrhr::active()) { + static int lastticks = ticks; + ld t = (ticks - lastticks) * shiftmul / 400; + lastticks = ticks; + rug::using_rugview urv; dynamicval ds(didsomething, didsomething); using namespace vrhr; @@ -809,19 +813,19 @@ EX void mainloopiter() { transmatrix T = hmd_at * inverse(hmd_ref_at); T = - cspin(0, 2, -vraim_x * camera_speed / 20) * - cspin(1, 2, vraim_y * camera_speed / 20) * - cpush(0, -vrgo_x * camera_speed / 20) * - cpush(2, -vrgo_y * camera_speed / 20) * + cspin(0, 2, -vraim_x * camera_speed * t) * + cspin(1, 2, vraim_y * camera_speed * t) * + cpush(0, -vrgo_x * camera_speed * t) * + cpush(2, -vrgo_y * camera_speed * t) * T; hmd_ref_at = inverse(T) * hmd_at; } else if(in_perspective_v()) { - if(vraim_x) full_rotate_camera(0, -vraim_x / 20); - if(vraim_y) full_rotate_camera(1, vraim_y / 20); - if(vrgo_y) full_forward_camera(-vrgo_y / 20); - if(vrgo_x) full_strafe_camera(-vrgo_x / 20); + if(vraim_x) full_rotate_camera(0, -vraim_x * t); + if(vraim_y) full_rotate_camera(1, vraim_y * t); + if(vrgo_y) full_forward_camera(-vrgo_y * t); + if(vrgo_x) full_strafe_camera(-vrgo_x * t); } } #endif