summaryrefslogtreecommitdiff
path: root/indra/llinventory
diff options
context:
space:
mode:
authorRider Linden <rider@lindenlab.com>2018-05-24 13:11:33 -0700
committerRider Linden <rider@lindenlab.com>2018-05-24 13:11:33 -0700
commitfa4ac065cb332c8c90fb59eeff0b983a1fd56691 (patch)
tree61bdaf3c09b2ff9041dd9d7ff23abcb127f85f5f /indra/llinventory
parentfbaa01d9a0c63386f13f0e43437c69f700950fd6 (diff)
Enable sky changes with altitude.
Diffstat (limited to 'indra/llinventory')
-rw-r--r--indra/llinventory/llsettingsbase.cpp13
-rw-r--r--indra/llinventory/llsettingsbase.h22
-rw-r--r--indra/llinventory/llsettingsdaycycle.h2
-rw-r--r--indra/llinventory/llsettingssky.h2
-rw-r--r--indra/llinventory/llsettingswater.h2
5 files changed, 37 insertions, 4 deletions
diff --git a/indra/llinventory/llsettingsbase.cpp b/indra/llinventory/llsettingsbase.cpp
index f870ec8904..411eaff8e3 100644
--- a/indra/llinventory/llsettingsbase.cpp
+++ b/indra/llinventory/llsettingsbase.cpp
@@ -547,8 +547,11 @@ F64 LLSettingsBlender::setPosition(F64 blendf)
}
blendf = llclamp(blendf, 0.0, 1.0);
- //_WARNS("LAPRAS") << "blending at " << (blendf * 100.0f) << "%" << LL_ENDL;
mTarget->replaceSettings(mInitial->getSettings());
+ if (mIsTrivial || (blendf == 0.0))
+ { // this is a trivial blend. Results will be identical to the initial.
+ return blendf;
+ }
mTarget->blend(mFinal, blendf);
return blendf;
@@ -562,6 +565,11 @@ void LLSettingsBlender::triggerComplete()
}
//-------------------------------------------------------------------------
+F64 LLSettingsBlenderTimeDelta::calculateBlend(F64 spanpos, F64 spanlen) const
+{
+ return fmod(spanpos, spanlen) / spanlen;
+}
+
void LLSettingsBlenderTimeDelta::update(F64 timedelta)
{
mTimeSpent += F64Seconds(timedelta);
@@ -572,8 +580,7 @@ void LLSettingsBlenderTimeDelta::update(F64 timedelta)
return;
}
- F64 blendf = fmod(mTimeSpent.value(), mBlendSpan.value()) / mBlendSpan.value();
-
+ F64 blendf = calculateBlend(mTimeSpent.value(), mBlendSpan.value());
// Note no clamp here.
setPosition(blendf);
diff --git a/indra/llinventory/llsettingsbase.h b/indra/llinventory/llsettingsbase.h
index d00e340b4b..71358d6a49 100644
--- a/indra/llinventory/llsettingsbase.h
+++ b/indra/llinventory/llsettingsbase.h
@@ -166,6 +166,8 @@ public:
virtual bool validate();
+ virtual ptr_t buildDerivedClone() = 0;
+
class Validator
{
public:
@@ -269,10 +271,15 @@ public:
mOnFinished(),
mTarget(target),
mInitial(initsetting),
- mFinal(endsetting)
+ mFinal(endsetting),
+ mIsTrivial(false)
{
if (mInitial)
mTarget->replaceSettings(mInitial->getSettings());
+
+ if (!mFinal)
+ mFinal = mInitial;
+ mIsTrivial = (mFinal == mInitial);
}
virtual ~LLSettingsBlender() {}
@@ -280,8 +287,16 @@ public:
virtual void reset( LLSettingsBase::ptr_t &initsetting, const LLSettingsBase::ptr_t &endsetting, F64 /*span*/ = 1.0)
{
// note: the 'span' reset parameter is unused by the base class.
+ if (!mInitial)
+ LL_WARNS("BLENDER") << "Reseting blender with empty initial setting. Expect badness in the future." << LL_ENDL;
+
mInitial = initsetting;
mFinal = endsetting;
+
+ if (!mFinal)
+ mFinal = mInitial;
+ mIsTrivial = (mFinal == mInitial);
+
mTarget->replaceSettings(mInitial->getSettings());
}
@@ -308,6 +323,8 @@ public:
virtual void update(F64 blendf);
virtual F64 setPosition(F64 blendf);
+ virtual void switchTrack(S32 trackno, F64 position = -1.0) { /*NoOp*/ }
+
protected:
void triggerComplete();
@@ -316,6 +333,7 @@ protected:
LLSettingsBase::ptr_t mTarget;
LLSettingsBase::ptr_t mInitial;
LLSettingsBase::ptr_t mFinal;
+ bool mIsTrivial;
};
class LLSettingsBlenderTimeDelta : public LLSettingsBlender
@@ -349,6 +367,8 @@ public:
virtual void update(F64 timedelta) override;
protected:
+ F64 calculateBlend(F64 spanpos, F64 spanlen) const;
+
F64Seconds mBlendSpan;
F64Seconds mLastUpdate;
F64Seconds mTimeSpent;
diff --git a/indra/llinventory/llsettingsdaycycle.h b/indra/llinventory/llsettingsdaycycle.h
index 9a89031aed..336a00f386 100644
--- a/indra/llinventory/llsettingsdaycycle.h
+++ b/indra/llinventory/llsettingsdaycycle.h
@@ -114,6 +114,8 @@ public:
virtual validation_list_t getValidationList() const override;
static validation_list_t validationList();
+ virtual LLSettingsBase::ptr_t buildDerivedClone() override { return buildClone(); }
+
protected:
LLSettingsDay();
diff --git a/indra/llinventory/llsettingssky.h b/indra/llinventory/llsettingssky.h
index 59a9dc9a43..9379cd37c3 100644
--- a/indra/llinventory/llsettingssky.h
+++ b/indra/llinventory/llsettingssky.h
@@ -479,6 +479,8 @@ public:
return mNextCloudTextureId;
}
+ virtual LLSettingsBase::ptr_t buildDerivedClone() override { return buildClone(); }
+
protected:
static const std::string SETTING_LEGACY_EAST_ANGLE;
static const std::string SETTING_LEGACY_ENABLE_CLOUD_SCROLL;
diff --git a/indra/llinventory/llsettingswater.h b/indra/llinventory/llsettingswater.h
index 64de4486ca..acae903e92 100644
--- a/indra/llinventory/llsettingswater.h
+++ b/indra/llinventory/llsettingswater.h
@@ -211,6 +211,8 @@ public:
static LLSD translateLegacySettings(LLSD legacy);
+ virtual LLSettingsBase::ptr_t buildDerivedClone() override { return buildClone(); }
+
protected:
static const std::string SETTING_LEGACY_BLUR_MULTIPILER;
static const std::string SETTING_LEGACY_FOG_COLOR;