summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOz Linden <oz@lindenlab.com>2011-04-07 12:55:12 -0400
committerOz Linden <oz@lindenlab.com>2011-04-07 12:55:12 -0400
commitef8ce5bf5eb3325dec8a51d27ca01ddab47f183c (patch)
treef1ad2e9d551a3be4fe0abb68816d8c0dd9294fe4
parent0a802ae351153008b40d42106c866836d0ee4954 (diff)
SH-1319: Fix for disappearing torso sections on avatars
-rw-r--r--indra/newview/llphysicsmotion.cpp24
-rw-r--r--indra/newview/llpolymorph.cpp10
2 files changed, 30 insertions, 4 deletions
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp
index acf8973f03..254fa5c33f 100644
--- a/indra/newview/llphysicsmotion.cpp
+++ b/indra/newview/llphysicsmotion.cpp
@@ -472,7 +472,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
const F32 behavior_gain = getParamValue("Gain");
const F32 behavior_damping = getParamValue("Damping");
const F32 behavior_drag = getParamValue("Drag");
- const BOOL physics_test = gSavedSettings.getBOOL("AvatarPhysicsTest");
+ const BOOL physics_test = gSavedSettings.getBOOL("AvatarPhysicsTest") && gAgent.isGodlike();
F32 behavior_maxeffect = getParamValue("MaxEffect");
if (physics_test)
@@ -583,9 +583,25 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
velocity_new_local = 0;
}
+ // Check for NaN values. A NaN value is detected if the variables doesn't equal itself.
+ // If NaN, then reset everything.
+ if ((mPosition_local != mPosition_local) ||
+ (mVelocity_local != mVelocity_local) ||
+ (position_new_local != position_new_local))
+ {
+ position_new_local = 0;
+ position_current_local = 0;
+ position_user_local = 0;
+ mVelocity_local = 0;
+ mVelocityJoint_local = 0;
+ mAccelerationJoint_local = 0;
+ mPosition_local = 0;
+ mPosition_world = LLVector3(0,0,0);
+ }
+
const F32 position_new_local_clamped = llclamp(position_new_local,
- min_val,
- max_val);
+ min_val,
+ max_val);
LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamDriver);
llassert_always(driver_param);
@@ -613,7 +629,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
//
// End calculate new params
////////////////////////////////////////////////////////////////////////////////
-
+
////////////////////////////////////////////////////////////////////////////////
// Conditionally update the visual params
//
diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp
index 5a67fd482a..36f8c8d13e 100644
--- a/indra/newview/llpolymorph.cpp
+++ b/indra/newview/llpolymorph.cpp
@@ -490,6 +490,16 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )
mLastSex = avatar_sex;
+ // Check for NaN condition (NaN is detected if a variable doesn't equal itself.
+ if (mCurWeight != mCurWeight)
+ {
+ mCurWeight = 0.0;
+ }
+ if (mLastWeight != mLastWeight)
+ {
+ mLastWeight = mCurWeight+.001;
+ }
+
// perform differential update of morph
F32 delta_weight = ( getSex() & avatar_sex ) ? (mCurWeight - mLastWeight) : (getDefaultWeight() - mLastWeight);
// store last weight