From 5f4ec676a6450ed646ace440ef4bee70fce7b8a5 Mon Sep 17 00:00:00 2001 From: milek7 Date: Sun, 27 Jan 2019 13:00:24 +0100 Subject: [PATCH] apply lerp also to walk speed --- Camera.cpp | 12 +++++++++--- keyboardinput.cpp | 6 +++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Camera.cpp b/Camera.cpp index 28405e8a..7a09b48a 100644 --- a/Camera.cpp +++ b/Camera.cpp @@ -73,10 +73,14 @@ TCamera::OnCommand( command_data const &Command ) { 30.0 : 1.0 ); + // threshold position on stick between walk lerp and walk/run lerp + auto const stickthreshold = 2.0 / 3.0; + // left-right auto const movexparam { Command.param1 }; - // 2/3rd of the stick range enables walk speed, past that we lerp between walk and run speed - auto const movex { walkspeed + ( std::max( 0.0, std::abs( movexparam ) - 0.65 ) / 0.35 ) * std::max( 0.0, movespeed - walkspeed ) }; + // 2/3rd of the stick range lerps walk speed, past that we lerp between max walk and run speed + auto const movex { walkspeed * std::min(std::abs(movexparam) * (1.0 / stickthreshold), 1.0) + + ( std::max( 0.0, std::abs( movexparam ) - stickthreshold ) / (1.0 - stickthreshold) ) * std::max( 0.0, movespeed - walkspeed ) }; m_moverate.x = ( movexparam > 0.0 ? movex * speedmultiplier : @@ -85,7 +89,9 @@ TCamera::OnCommand( command_data const &Command ) { // forward-back double const movezparam { Command.param2 }; - auto const movez { walkspeed + ( std::max( 0.0, std::abs( movezparam ) - 0.65 ) / 0.35 ) * std::max( 0.0, movespeed - walkspeed ) }; + auto const movez { walkspeed * std::min(std::abs(movezparam) * (1.0 / stickthreshold), 1.0) + + ( std::max( 0.0, std::abs( movezparam ) - stickthreshold ) / (1.0 - stickthreshold) ) * std::max( 0.0, movespeed - walkspeed ) }; + // NOTE: z-axis is flipped given world coordinate system m_moverate.z = ( movezparam > 0.0 ? -movez * speedmultiplier : diff --git a/keyboardinput.cpp b/keyboardinput.cpp index dcb79db2..a095c2fa 100644 --- a/keyboardinput.cpp +++ b/keyboardinput.cpp @@ -228,12 +228,12 @@ keyboard_input::poll() { glm::vec2 const movementhorizontal { // x-axis - ( Global.shiftState ? 1.f : 0.5f ) * + ( Global.shiftState ? 1.f : (2.0f / 3.0f) ) * ( input::keys[ m_bindingscache.left ] != GLFW_RELEASE ? -1.f : input::keys[ m_bindingscache.right ] != GLFW_RELEASE ? 1.f : 0.f ), // z-axis - ( Global.shiftState ? 1.f : 0.5f ) * + ( Global.shiftState ? 1.f : (2.0f / 3.0f) ) * ( input::keys[ m_bindingscache.forward ] != GLFW_RELEASE ? 1.f : input::keys[ m_bindingscache.back ] != GLFW_RELEASE ? -1.f : 0.f ) }; @@ -254,7 +254,7 @@ keyboard_input::poll() { float const movementvertical { // y-axis - ( Global.shiftState ? 1.f : 0.5f ) * + ( Global.shiftState ? 1.f : (2.0f / 3.0f) ) * ( input::keys[ m_bindingscache.up ] != GLFW_RELEASE ? 1.f : input::keys[ m_bindingscache.down ] != GLFW_RELEASE ? -1.f : 0.f ) };