Initial limit look at distance code
parent
82477c484d
commit
eb9c83cda3
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue