summaryrefslogtreecommitdiff
path: root/indra/llinventory/llsettingsbase.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llinventory/llsettingsbase.h')
-rw-r--r--indra/llinventory/llsettingsbase.h78
1 files changed, 53 insertions, 25 deletions
diff --git a/indra/llinventory/llsettingsbase.h b/indra/llinventory/llsettingsbase.h
index 06c1e6231e..aebb3ddc5a 100644
--- a/indra/llinventory/llsettingsbase.h
+++ b/indra/llinventory/llsettingsbase.h
@@ -266,39 +266,24 @@ public:
typedef boost::signals2::signal<void(const ptr_t )> finish_signal_t;
typedef boost::signals2::connection connection_t;
- static const F64Seconds DEFAULT_THRESHOLD;
-
LLSettingsBlender(const LLSettingsBase::ptr_t &target,
- const LLSettingsBase::ptr_t &initsetting, const LLSettingsBase::ptr_t &endsetting, F64Seconds seconds) :
+ const LLSettingsBase::ptr_t &initsetting, const LLSettingsBase::ptr_t &endsetting, F64 span = 1.0) :
+ mOnFinished(),
mTarget(target),
mInitial(initsetting),
- mFinal(endsetting),
- mSeconds(seconds),
- mOnFinished(),
- mLastUpdate(0.0f),
- mTimeSpent(0.0f)
+ mFinal(endsetting)
{
+ if (mInitial)
mTarget->replaceSettings(mInitial->getSettings());
- mTimeStart = F64Seconds(LLDate::now().secondsSinceEpoch());
- mLastUpdate = mTimeStart;
}
- ~LLSettingsBlender() {}
+ virtual ~LLSettingsBlender() {}
- void reset( LLSettingsBase::ptr_t &initsetting, const LLSettingsBase::ptr_t &endsetting, F64Seconds seconds )
+ virtual void reset( LLSettingsBase::ptr_t &initsetting, const LLSettingsBase::ptr_t &endsetting, F64 span = 1.0)
{
mInitial = initsetting;
mFinal = endsetting;
- mSeconds = seconds;
mTarget->replaceSettings(mInitial->getSettings());
- mTimeStart.value(LLDate::now().secondsSinceEpoch());
- mLastUpdate = mTimeStart;
- mTimeSpent.value(0.0f);
- }
-
- connection_t setOnFinished(const finish_signal_t::slot_type &onfinished)
- {
- return mOnFinished.connect(onfinished);
}
LLSettingsBase::ptr_t getTarget() const
@@ -316,17 +301,60 @@ public:
return mFinal;
}
- void update(F64Seconds time);
+ connection_t setOnFinished(const finish_signal_t::slot_type &onfinished)
+ {
+ return mOnFinished.connect(onfinished);
+ }
+
+ virtual void update(F64 blendf);
+ virtual F64 setPosition(F64 blendf);
+
+protected:
+ void triggerComplete();
+
+ finish_signal_t mOnFinished;
-private:
LLSettingsBase::ptr_t mTarget;
LLSettingsBase::ptr_t mInitial;
LLSettingsBase::ptr_t mFinal;
- F64Seconds mSeconds;
- finish_signal_t mOnFinished;
+};
+
+class LLSettingsBlenderTimeDelta : public LLSettingsBlender
+{
+public:
+ LLSettingsBlenderTimeDelta(const LLSettingsBase::ptr_t &target,
+ const LLSettingsBase::ptr_t &initsetting, const LLSettingsBase::ptr_t &endsetting, F64Seconds seconds) :
+ LLSettingsBlender(target, initsetting, endsetting, seconds.value()),
+ mBlendSpan(seconds),
+ mLastUpdate(0.0f),
+ mTimeSpent(0.0f)
+ {
+ mTimeStart = F64Seconds(LLDate::now().secondsSinceEpoch());
+ mLastUpdate = mTimeStart;
+ }
+
+ virtual ~LLSettingsBlenderTimeDelta()
+ {
+ }
+
+ virtual void reset(LLSettingsBase::ptr_t &initsetting, const LLSettingsBase::ptr_t &endsetting, F64 span = 1.0) override
+ {
+ LLSettingsBlender::reset(initsetting, endsetting, span);
+
+ mBlendSpan.value(span);
+ mTimeStart.value(LLDate::now().secondsSinceEpoch());
+ mLastUpdate = mTimeStart;
+ mTimeSpent.value(0.0f);
+ }
+
+ virtual void update(F64 timedelta) override;
+
+protected:
+ F64Seconds mBlendSpan;
F64Seconds mLastUpdate;
F64Seconds mTimeSpent;
F64Seconds mTimeStart;
};
+
#endif