From eb9c83cda3fd4b8f1ffa12c2543336112afac7eb Mon Sep 17 00:00:00 2001 From: Kyler Eastridge Date: Mon, 28 Jul 2025 02:51:19 +0100 Subject: Initial limit look at distance code --- indra/newview/app_settings/settings.xml | 22 ++++++++++++++++++++++ indra/newview/llhudeffectlookat.cpp | 26 +++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) 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 @@ Value 1 + LimitLookAtHints + + Comment + Whether or not to clamp the look at targets around the avatar head before sending + Persist + 1 + Type + Boolean + Value + 1 + + LimitLookAtHintsDistance + + Comment + Distance to limit look at target to + Persist + 1 + Type + F32 + Value + 4 + 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 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 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 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 -- cgit v1.2.3