From eb54fccff7bb6e6c8eacdb460b4647f70bd9bffd Mon Sep 17 00:00:00 2001
From: andreykproductengine <andreykproductengine@lindenlab.com>
Date: Mon, 28 Oct 2019 19:34:40 +0200
Subject: [PATCH] SL-6109 Better running

---
 indra/newview/llviewerinput.cpp | 68 +++++++++++++++++++++++----------
 1 file changed, 48 insertions(+), 20 deletions(-)

diff --git a/indra/newview/llviewerinput.cpp b/indra/newview/llviewerinput.cpp
index 8df66b4ce9a..50618350be8 100644
--- a/indra/newview/llviewerinput.cpp
+++ b/indra/newview/llviewerinput.cpp
@@ -650,15 +650,22 @@ bool start_gesture( EKeystate s )
 
 bool run_forward(EKeystate s)
 {
-    if (KEYSTATE_DOWN == s)
+    if (KEYSTATE_UP != s)
     {
-        gAgent.setAlwaysRun();
-        gAgent.setRunning();
-        gAgent.sendWalkRun(true);
+        if (gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_FORWARD)
+        {
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_FORWARD;
+        }
+        if (!gAgent.getRunning())
+        {
+            gAgent.setRunning();
+            gAgent.sendWalkRun(true);
+        }
     }
     else if(KEYSTATE_UP == s)
     {
-        gAgent.clearAlwaysRun();
+        if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_FORWARD)
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
         gAgent.clearRunning();
         gAgent.sendWalkRun(false);
     }
@@ -668,15 +675,22 @@ bool run_forward(EKeystate s)
 
 bool run_backward(EKeystate s)
 {
-    if (KEYSTATE_DOWN == s)
+    if (KEYSTATE_UP != s)
     {
-        gAgent.setAlwaysRun();
-        gAgent.setRunning();
-        gAgent.sendWalkRun(true);
+        if (gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_BACKWARD)
+        {
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_BACKWARD;
+        }
+        if (!gAgent.getRunning())
+        {
+            gAgent.setRunning();
+            gAgent.sendWalkRun(true);
+        }
     }
     else if (KEYSTATE_UP == s)
     {
-        gAgent.clearAlwaysRun();
+        if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_BACKWARD)
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
         gAgent.clearRunning();
         gAgent.sendWalkRun(false);
     }
@@ -686,15 +700,22 @@ bool run_backward(EKeystate s)
 
 bool run_left(EKeystate s)
 {
-    if (KEYSTATE_DOWN == s)
+    if (KEYSTATE_UP != s)
     {
-        gAgent.setAlwaysRun();
-        gAgent.setRunning();
-        gAgent.sendWalkRun(true);
+        if (gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_SLIDELEFT)
+        {
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_SLIDELEFT;
+        }
+        if (!gAgent.getRunning())
+        {
+            gAgent.setRunning();
+            gAgent.sendWalkRun(true);
+        }
     }
     else if (KEYSTATE_UP == s)
     {
-        gAgent.clearAlwaysRun();
+        if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_SLIDELEFT)
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
         gAgent.clearRunning();
         gAgent.sendWalkRun(false);
     }
@@ -704,15 +725,22 @@ bool run_left(EKeystate s)
 
 bool run_right(EKeystate s)
 {
-    if (KEYSTATE_DOWN == s)
+    if (KEYSTATE_UP != s)
     {
-        gAgent.setAlwaysRun();
-        gAgent.setRunning();
-        gAgent.sendWalkRun(true);
+        if (gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_SLIDERIGHT)
+        {
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_SLIDERIGHT;
+            if (!gAgent.getRunning())
+            {
+                gAgent.setRunning();
+                gAgent.sendWalkRun(true);
+            }
+        }
     }
     else if (KEYSTATE_UP == s)
     {
-        gAgent.clearAlwaysRun();
+        if (gAgent.mDoubleTapRunMode == LLAgent::DOUBLETAP_SLIDERIGHT)
+            gAgent.mDoubleTapRunMode = LLAgent::DOUBLETAP_NONE;
         gAgent.clearRunning();
         gAgent.sendWalkRun(false);
     }
-- 
GitLab