Better calculation of time remaining in span for track animator (from SL-10465)
parent
801ce79b72
commit
ce40f88ecb
|
|
@ -519,6 +519,7 @@ public:
|
|||
inline void setIgnoreTimeDeltaThreshold(bool val) { mIgnoreTimeDelta = val; }
|
||||
inline bool getIgnoreTimeDeltaThreshold() const { return mIgnoreTimeDelta; }
|
||||
|
||||
inline void setTimeSpent(LLSettingsBase::Seconds time) { mTimeSpent = time; }
|
||||
protected:
|
||||
LLSettingsBase::BlendFactor calculateBlend(const LLSettingsBase::TrackPosition& spanpos, const LLSettingsBase::TrackPosition& spanlen) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -170,6 +170,20 @@ namespace
|
|||
return llclamp(position, 0.0f, 1.0f);
|
||||
}
|
||||
|
||||
inline LLSettingsBase::BlendFactor convert_time_to_blend_factor(const LLSettingsBase::Seconds& time, const LLSettingsBase::Seconds& len, LLSettingsDay::CycleTrack_t &track)
|
||||
{
|
||||
LLSettingsBase::TrackPosition position = convert_time_to_position(time, len);
|
||||
LLSettingsDay::TrackBound_t bounds(get_bounding_entries(track, position));
|
||||
|
||||
LLSettingsBase::TrackPosition spanlength(get_wrapping_distance((*bounds.first).first, (*bounds.second).first));
|
||||
if (position < (*bounds.first).first)
|
||||
position += 1.0;
|
||||
|
||||
LLSettingsBase::TrackPosition start = position - (*bounds.first).first;
|
||||
|
||||
return static_cast<LLSettingsBase::BlendFactor>(start / spanlength);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
class LLTrackBlenderLoopingTime : public LLSettingsBlenderTimeDelta
|
||||
{
|
||||
|
|
@ -186,12 +200,14 @@ namespace
|
|||
// must happen prior to getBoundingEntries call...
|
||||
mTrackNo = selectTrackNumber(trackno);
|
||||
|
||||
LLSettingsDay::TrackBound_t initial = getBoundingEntries(getAdjustedNow());
|
||||
LLSettingsBase::Seconds now(getAdjustedNow());
|
||||
LLSettingsDay::TrackBound_t initial = getBoundingEntries(now);
|
||||
|
||||
mInitial = (*initial.first).second;
|
||||
mFinal = (*initial.second).second;
|
||||
mBlendSpan = getSpanTime(initial);
|
||||
|
||||
initializeTarget(now);
|
||||
setOnFinished([this](const LLSettingsBlender::ptr_t &){ onFinishedSpan(); });
|
||||
}
|
||||
|
||||
|
|
@ -248,6 +264,16 @@ namespace
|
|||
return bounds;
|
||||
}
|
||||
|
||||
void initializeTarget(LLSettingsBase::Seconds time)
|
||||
{
|
||||
LLSettingsBase::BlendFactor blendf(convert_time_to_blend_factor(time, mCycleLength, mDay->getCycleTrack(mTrackNo)));
|
||||
|
||||
blendf = llclamp(blendf, 0.0, 0.999);
|
||||
setTimeSpent(LLSettingsBase::Seconds(blendf * mBlendSpan));
|
||||
|
||||
setBlendFactor(blendf);
|
||||
}
|
||||
|
||||
LLSettingsBase::Seconds getAdjustedNow() const
|
||||
{
|
||||
LLSettingsBase::Seconds now(LLDate::now().secondsSinceEpoch());
|
||||
|
|
|
|||
Loading…
Reference in New Issue