summaryrefslogtreecommitdiff
path: root/indra/newview/llselectmgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llselectmgr.cpp')
-rw-r--r--indra/newview/llselectmgr.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 39f3cd4196..262c9a4515 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -6570,7 +6570,8 @@ bool LLSelectMgr::selectionMove(const LLVector3& displ,
if (update_position)
{
// calculate the distance of the object closest to the camera origin
- F32 min_dist = 1e+30f;
+ F32 min_dist_squared = F32_MAX; // value will be overridden in the loop
+
LLVector3 obj_pos;
for (LLObjectSelection::root_iterator it = getSelection()->root_begin();
it != getSelection()->root_end(); ++it)
@@ -6578,20 +6579,22 @@ bool LLSelectMgr::selectionMove(const LLVector3& displ,
obj_pos = (*it)->getObject()->getPositionEdit();
F32 obj_dist_squared = dist_vec_squared(obj_pos, LLViewerCamera::getInstance()->getOrigin());
- if (obj_dist_squared < min_dist)
+ if (obj_dist_squared < min_dist_squared)
{
- min_dist = obj_dist_squared;
+ min_dist_squared = obj_dist_squared;
}
}
- // since the above uses squared values, take the square root.
- min_dist = sqrt(min_dist);
+
+ // get the non-squared edition for use below
+ // note the use of fsqrtf, this was used in the definition of dist_vec() and is therefore re-used here
+ F32 min_dist = fsqrtf(min_dist_squared);
// factor the distance inside the displacement vector. This will get us
// equally visible movements for both close and far away selections.
- min_dist = sqrt(min_dist) / 2;
- displ_global.setVec(displ.mV[0]*min_dist,
- displ.mV[1]*min_dist,
- displ.mV[2]*min_dist);
+ F32 min_dist_factored = sqrt(min_dist) / 2;
+ displ_global.setVec(displ.mV[0]*min_dist_factored,
+ displ.mV[1]*min_dist_factored,
+ displ.mV[2]*min_dist_factored);
// equates to: Displ_global = Displ * M_cam_axes_in_global_frame
displ_global = LLViewerCamera::getInstance()->rotateToAbsolute(displ_global);