diff options
author | Rider Linden <rider@lindenlab.com> | 2018-05-22 13:16:37 -0700 |
---|---|---|
committer | Rider Linden <rider@lindenlab.com> | 2018-05-22 13:16:37 -0700 |
commit | 3888de9439c20eb1698e16fb878a47d78cfdf85e (patch) | |
tree | 1d0b9b739f1429f1387934ce7c6a92cd61f1a857 /indra/newview/llphysicsmotion.cpp | |
parent | 656967b326c59a3966261cd75e256e3a7a27cc0a (diff) | |
parent | c70119ebabc4b06e2b0db02aea8c56e01fbc666e (diff) |
Merge
Diffstat (limited to 'indra/newview/llphysicsmotion.cpp')
-rw-r--r-- | indra/newview/llphysicsmotion.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index 08d734ddac..f48ce680fd 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -44,7 +44,9 @@ typedef std::map<std::string, std::string> controller_map_t; typedef std::map<std::string, F32> default_controller_map_t; #define MIN_REQUIRED_PIXEL_AREA_AVATAR_PHYSICS_MOTION 0.f -#define TIME_ITERATION_STEP 0.05f +// we use TIME_ITERATION_STEP_MAX in division operation, make sure this is a simple +// value and devision result won't end with repeated/recurring tail like 1.333(3) +#define TIME_ITERATION_STEP_MAX 0.05f // minimal step size will end up as 0.025 inline F64 llsgn(const F64 a) { @@ -480,7 +482,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time) if (!mParamDriver) return FALSE; - if (!mLastTime) + if (!mLastTime || mLastTime >= time) { mLastTime = time; return FALSE; @@ -561,14 +563,10 @@ BOOL LLPhysicsMotion::onUpdate(F32 time) // bounce at right (relatively) position. // Note: this doesn't look to be optimal, since it provides only "roughly same" behavior, but // irregularity at higher fps looks to be insignificant so it works good enough for low fps. - for (F32 time_iteration = 0; time_iteration <= time_delta; time_iteration += TIME_ITERATION_STEP) + U32 steps = (U32)(time_delta / TIME_ITERATION_STEP_MAX) + 1; + F32 time_iteration_step = time_delta / (F32)steps; //minimal step size ends up as 0.025 + for (U32 i = 0; i < steps; i++) { - F32 time_iteration_step = TIME_ITERATION_STEP; - if (time_iteration + TIME_ITERATION_STEP > time_delta) - { - time_iteration_step = time_delta-time_iteration; - } - // mPositon_local should be in normalized 0,1 range already. Just making sure... const F32 position_current_local = llclamp(mPosition_local, 0.0f, |