diff options
author | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-08-15 18:31:07 +0300 |
---|---|---|
committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-08-15 18:31:07 +0300 |
commit | 584fec695bc8d6bafc38ff6ed3b435f133fdca2b (patch) | |
tree | b0b465c2e21bd76442037081ed8f38b6d5ae99d9 /indra/newview | |
parent | 2a7600fbd2a29cb6ac34767ed82eeef1fa4a1fbe (diff) |
MAINT-8952 EEP 'uncompress' day tracks before editing
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 4 | ||||
-rw-r--r-- | indra/newview/llsettingsvo.cpp | 24 | ||||
-rw-r--r-- | indra/newview/llsettingsvo.h | 1 |
3 files changed, 27 insertions, 2 deletions
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 85bcf086e5..84a2e0687f 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -908,7 +908,7 @@ void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::pt closeFloater(); return; } - mEditDay = std::dynamic_pointer_cast<LLSettingsDay>(settings); + mEditDay = std::dynamic_pointer_cast<LLSettingsDay>(settings)->buildDeepCloneAndUncompress(); updateEditEnvironment(); LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT, LLEnvironment::TRANSITION_INSTANT); LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT); @@ -925,7 +925,7 @@ void LLFloaterEditExtDayCycle::loadLiveEnvironment(LLEnvironment::EnvSelection_t if (day) { - mEditDay = day->buildClone(); + mEditDay = day->buildDeepCloneAndUncompress(); break; } } diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 80797ae21c..2cdc3e79c3 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -1092,6 +1092,30 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildClone() return dayp; } +LLSettingsDay::ptr_t LLSettingsVODay::buildDeepCloneAndUncompress() +{ + // no need for SETTING_TRACKS or SETTING_FRAMES, so take base LLSD + LLSD settings = llsd_clone(mSettings); + + LLSettingsDay::ptr_t day_clone = std::make_shared<LLSettingsVODay>(settings); + + for (S32 i = 0; i < LLSettingsDay::TRACK_MAX; ++i) + { + LLSettingsDay::CycleTrack_t track = getCycleTrack(i); + LLSettingsDay::CycleTrack_t::iterator iter = track.begin(); + while (iter != track.end()) + {
+ // 'Unpack', usually for editing
+ // - frames 'share' settings multiple times
+ // - settings can reuse LLSDs they were initialized from + // We do not want for edited frame to change multiple frames in same track, so do a clone + day_clone->setSettingsAtKeyframe(iter->second->buildDerivedClone(), iter->first, i); + iter++; + } + } + return day_clone; +} + LLSD LLSettingsVODay::convertToLegacy(const LLSettingsVODay::ptr_t &pday) { CycleTrack_t &trackwater = pday->getCycleTrack(TRACK_WATER); diff --git a/indra/newview/llsettingsvo.h b/indra/newview/llsettingsvo.h index 15b51d0988..fedb758b48 100644 --- a/indra/newview/llsettingsvo.h +++ b/indra/newview/llsettingsvo.h @@ -156,6 +156,7 @@ public: static ptr_t buildDefaultDayCycle(); static ptr_t buildFromEnvironmentMessage(LLSD settings); virtual ptr_t buildClone() override; + virtual ptr_t buildDeepCloneAndUncompress(); static LLSD convertToLegacy(const ptr_t &); |