summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorKyler Eastridge <felix.wolfz@gmail.com>2025-07-28 02:51:19 +0100
committerAndrey Kleshchev <117672381+akleshchev@users.noreply.github.com>2025-07-29 20:12:46 +0300
commiteb9c83cda3fd4b8f1ffa12c2543336112afac7eb (patch)
tree2b786789c9b2bb8c5f3d0a0bc2697e213511d86e /indra
parent82477c484d5f605c44074c277230ea8d1a993fa2 (diff)
Initial limit look at distance code
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/app_settings/settings.xml22
-rw-r--r--indra/newview/llhudeffectlookat.cpp26
2 files changed, 47 insertions, 1 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c416944a24..531aa9984c 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16267,5 +16267,27 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>LimitLookAtHints</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether or not to clamp the look at targets around the avatar head before sending</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>LimitLookAtHintsDistance</key>
+ <map>
+ <key>Comment</key>
+ <string>Distance to limit look at target to</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <integer>4</integer>
+ </map>
</map>
</llsd>
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index 845a003500..f726ef1354 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -37,6 +37,7 @@
#include "lldrawable.h"
#include "llviewerobjectlist.h"
#include "llviewercontrol.h"
+#include "llvoavatarself.h"
#include "llrendersphere.h"
#include "llselectmgr.h"
#include "llglheaders.h"
@@ -390,7 +391,7 @@ void LLHUDEffectLookAt::setTargetPosGlobal(const LLVector3d &target_pos_global)
// setLookAt()
// called by agent logic to set look at behavior locally, and propagate to sim
//-----------------------------------------------------------------------------
-bool LLHUDEffectLookAt::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position)
+bool LLHUDEffectLookAt::setLookAt(ELookAtType target_type, LLViewerObject* object, LLVector3 position)
{
static LLCachedControl<bool> enable_lookat_hints(gSavedSettings, "EnableLookAtHints", true);
if (!enable_lookat_hints)
@@ -415,6 +416,29 @@ bool LLHUDEffectLookAt::setLookAt(ELookAtType target_type, LLViewerObject *objec
return false;
}
+ static LLCachedControl<bool> limit_lookat_hints(gSavedSettings, "LimitLookAtHints", true);
+ // Don't affect the look at if object is gAgentAvatarp (cursor head follow)
+ if (limit_lookat_hints && object != gAgentAvatarp)
+ {
+ // If it is a object
+ if (object)
+ {
+ position += object->getRenderPosition();
+ object = NULL;
+ }
+
+ LLVector3 agentHeadPosition = gAgentAvatarp->mHeadp->getWorldPosition();
+ float dist = (float)dist_vec(agentHeadPosition, position);
+
+ static LLCachedControl<F32> limit_lookat_hints_distance(gSavedSettings, "LimitLookAtHintsDistance", 2.0f);
+ if (dist > limit_lookat_hints_distance)
+ {
+ LLVector3 headOffset = position - agentHeadPosition;
+ headOffset *= limit_lookat_hints_distance / dist;
+ position.setVec(agentHeadPosition + headOffset);
+ }
+ }
+
F32 current_time = mTimer.getElapsedTimeF32();
// type of lookat behavior or target object has changed