diff options
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llenvironment.cpp | 14 | ||||
-rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 105 | ||||
-rw-r--r-- | indra/newview/llfloatereditextdaycycle.h | 7 | ||||
-rw-r--r-- | indra/newview/llsettingsvo.cpp | 5 |
4 files changed, 85 insertions, 46 deletions
diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index f0bec2fda1..938cf857ee 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -65,6 +65,8 @@ namespace LLTrace::BlockTimerStatHandle FTM_ENVIRONMENT_UPDATE("Update Environment Tick"); LLTrace::BlockTimerStatHandle FTM_SHADER_PARAM_UPDATE("Update Shader Parameters"); + LLSettingsBase::Seconds DEFAULT_UPDATE_THRESHOLD(10.0); + //--------------------------------------------------------------------- inline LLSettingsBase::TrackPosition get_wrapping_distance(LLSettingsBase::TrackPosition begin, LLSettingsBase::TrackPosition end) { @@ -132,13 +134,15 @@ namespace class LLTrackBlenderLoopingTime : public LLSettingsBlenderTimeDelta { public: - LLTrackBlenderLoopingTime(const LLSettingsBase::ptr_t &target, const LLSettingsDay::ptr_t &day, S32 trackno, LLSettingsBase::Seconds cyclelength, LLSettingsBase::Seconds cycleoffset) : + LLTrackBlenderLoopingTime(const LLSettingsBase::ptr_t &target, const LLSettingsDay::ptr_t &day, S32 trackno, + LLSettingsBase::Seconds cyclelength, LLSettingsBase::Seconds cycleoffset, LLSettingsBase::Seconds updateThreshold) : LLSettingsBlenderTimeDelta(target, LLSettingsBase::ptr_t(), LLSettingsBase::ptr_t(), LLSettingsBase::Seconds(1.0)), mDay(day), mTrackNo(0), mCycleLength(cyclelength), mCycleOffset(cycleoffset) { + setTimeDeltaThreshold(updateThreshold); // must happen prior to getBoundingEntries call... mTrackNo = selectTrackNumber(trackno); @@ -1610,10 +1614,11 @@ void LLEnvironment::DayInstance::animate() else { mWater = LLSettingsVOWater::buildDefaultWater(); - mBlenderWater = std::make_shared<LLTrackBlenderLoopingTime>(mWater, mDayCycle, 0, mDayLength, mDayOffset); + mBlenderWater = std::make_shared<LLTrackBlenderLoopingTime>(mWater, mDayCycle, 0, + mDayLength, mDayOffset, DEFAULT_UPDATE_THRESHOLD); } - // sky, initalize to track 1 + // sky, initialize to track 1 LLSettingsDay::CycleTrack_t &track = mDayCycle->getCycleTrack(1); if (track.empty()) @@ -1624,7 +1629,8 @@ void LLEnvironment::DayInstance::animate() else { mSky = LLSettingsVOSky::buildDefaultSky(); - mBlenderSky = std::make_shared<LLTrackBlenderLoopingTime>(mSky, mDayCycle, 1, mDayLength, mDayOffset); + mBlenderSky = std::make_shared<LLTrackBlenderLoopingTime>(mSky, mDayCycle, 1, + mDayLength, mDayOffset, DEFAULT_UPDATE_THRESHOLD); mBlenderSky->switchTrack(mSkyTrack, 0.0); } } diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 38e45dd6d5..7815f4244a 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -121,7 +121,7 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key) : LLFloater(key), mFlyoutControl(nullptr), mDayLength(0), - mCurrentTrack(4), + mCurrentTrack(1), mTimeSlider(nullptr), mFramesSlider(nullptr), mCurrentTimeLabel(nullptr), @@ -261,6 +261,7 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key) void LLFloaterEditExtDayCycle::onClose(bool app_quitting) { + doCloseInventoryFloater(app_quitting); // there's no point to change environment if we're quitting // or if we already restored environment if (!app_quitting && LLEnvironment::instance().getSelectedEnvironment() == LLEnvironment::ENV_EDIT) @@ -284,16 +285,6 @@ void LLFloaterEditExtDayCycle::onFocusLost() void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility) { -// if (new_visibility) -// { -// LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, mScratchSky, mScratchWater); -// LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT); -// } -// else -// { -// LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); -// stopPlay(); -// } } void LLFloaterEditExtDayCycle::refresh() @@ -351,7 +342,14 @@ void LLFloaterEditExtDayCycle::onButtonImport() void LLFloaterEditExtDayCycle::onButtonLoadFrame() { - doOpenInventoryFloater((mCurrentTrack == LLSettingsDay::TRACK_WATER) ? LLSettingsType::ST_WATER : LLSettingsType::ST_SKY); + LLUUID curassetId; + + if (mCurrentEdit) + { + curassetId = mCurrentEdit->getAssetId(); + } + + doOpenInventoryFloater((mCurrentTrack == LLSettingsDay::TRACK_WATER) ? LLSettingsType::ST_WATER : LLSettingsType::ST_SKY, curassetId); } void LLFloaterEditExtDayCycle::onAddTrack() @@ -382,6 +380,7 @@ void LLFloaterEditExtDayCycle::onAddTrack() } addSliderFrame(frame, setting); + reblendSettings(); updateTabs(); } @@ -550,8 +549,10 @@ void LLFloaterEditExtDayCycle::onTimeSliderMoved() void LLFloaterEditExtDayCycle::selectTrack(U32 track_index, bool force ) { - mCurrentTrack = track_index; - LLButton* button = getChild<LLButton>(track_tabs[track_index], true); + if (track_index < LLSettingsDay::TRACK_MAX) + mCurrentTrack = track_index; + + LLButton* button = getChild<LLButton>(track_tabs[mCurrentTrack], true); if (button->getToggleState() && !force) { return; @@ -559,7 +560,7 @@ void LLFloaterEditExtDayCycle::selectTrack(U32 track_index, bool force ) for (int i = 0; i < LLSettingsDay::TRACK_MAX; i++) // use max value { - getChild<LLButton>(track_tabs[i], true)->setToggleState(i == track_index); + getChild<LLButton>(track_tabs[i], true)->setToggleState(i == mCurrentTrack); } bool show_water = (mCurrentTrack == LLSettingsDay::TRACK_WATER); @@ -612,7 +613,7 @@ void LLFloaterEditExtDayCycle::clearTabs() void LLFloaterEditExtDayCycle::updateTabs() { reblendSettings(); - syncronizeTabs(); + synchronizeTabs(); updateButtons(); updateTimeAndLabel(); @@ -827,7 +828,7 @@ void LLFloaterEditExtDayCycle::loadInventoryItem(const LLUUID &inventoryId) } LLSettingsVOBase::getSettingsAsset(mInventoryItem->getAssetUUID(), - [this](LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status, LLExtStat) { onAssetLoaded(asset_id, settins, status); }); + [this](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoaded(asset_id, settings, status); }); } void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status) @@ -843,7 +844,7 @@ void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::pt mEditDay = std::dynamic_pointer_cast<LLSettingsDay>(settings); updateEditEnvironment(); LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT); - syncronizeTabs(); + synchronizeTabs(); refresh(); } @@ -867,7 +868,7 @@ void LLFloaterEditExtDayCycle::loadLiveEnvironment(LLEnvironment::EnvSelection_t } updateEditEnvironment(); - syncronizeTabs(); + synchronizeTabs(); refresh(); } @@ -879,17 +880,17 @@ void LLFloaterEditExtDayCycle::updateEditEnvironment(void) mSkyBlender = std::make_shared<LLTrackBlenderLoopingManual>(mScratchSky, mEditDay, skytrack); mWaterBlender = std::make_shared<LLTrackBlenderLoopingManual>(mScratchWater, mEditDay, LLSettingsDay::TRACK_WATER); - selectTrack(1, true); + selectTrack(LLSettingsDay::TRACK_MAX, true); reblendSettings(); LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, mScratchSky, mScratchWater); } -void LLFloaterEditExtDayCycle::syncronizeTabs() +void LLFloaterEditExtDayCycle::synchronizeTabs() { // This should probably get moved into "updateTabs" - LLSettingsBase::Seconds frame(mTimeSlider->getCurSliderValue()); + LLSettingsBase::TrackPosition frame(mTimeSlider->getCurSliderValue()); bool canedit(false); LLSettingsWater::ptr_t psettingW; @@ -899,6 +900,7 @@ void LLFloaterEditExtDayCycle::syncronizeTabs() canedit = !mIsPlaying; LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyfarme(frame, LLSettingsDay::TRACK_WATER, FRAME_SLOP_FACTOR); psettingW = std::static_pointer_cast<LLSettingsWater>(found.second); + mCurrentEdit = psettingW; if (!psettingW) { canedit = false; @@ -922,6 +924,7 @@ void LLFloaterEditExtDayCycle::syncronizeTabs() canedit = !mIsPlaying; LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyfarme(frame, mCurrentTrack, FRAME_SLOP_FACTOR); psettingS = std::static_pointer_cast<LLSettingsSky>(found.second); + mCurrentEdit = psettingS; if (!psettingS) { canedit = false; @@ -935,6 +938,8 @@ void LLFloaterEditExtDayCycle::syncronizeTabs() psettingS = mScratchSky; } + doCloseInventoryFloater(); + setTabsData(tabs, psettingS, canedit); LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, psettingS, psettingW); } @@ -1055,7 +1060,7 @@ void LLFloaterEditExtDayCycle::doImportFromDisk() mCurrentTrack = 1; updateSlider(); updateEditEnvironment(); - syncronizeTabs(); + synchronizeTabs(); refresh(); } } @@ -1089,6 +1094,8 @@ bool LLFloaterEditExtDayCycle::canApplyParcel() const void LLFloaterEditExtDayCycle::startPlay() { + doCloseInventoryFloater(); + mIsPlaying = true; mFramesSlider->resetCurSlider(); mPlayTimer.reset(); @@ -1126,39 +1133,59 @@ void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data) self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding self->mSkyBlender->setPosition(new_frame); self->mWaterBlender->setPosition(new_frame); - self->syncronizeTabs(); + self->synchronizeTabs(); } -void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type) +void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID currasset) { // LLUI::sWindow->setCursor(UI_CURSOR_WAIT); - LLFloater* floaterp = mInventoryFloater.get(); + LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get()); // Show the dialog - if (!floaterp) + if (!picker) { - LLFloaterSettingsPicker *picker = new LLFloaterSettingsPicker( - this, + picker = new LLFloaterSettingsPicker(this, LLUUID::null, "SELECT SETTINGS"); mInventoryFloater = picker->getHandle(); picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); }); -// texture_floaterp->setTextureSelectedCallback(boost::bind(&LLOutfitGallery::onTextureSelectionChanged, this, _1)); -// texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLOutfitGallery::onTexturePickerCommit, this, _1, _2)); -// texture_floaterp->setOnUpdateImageStatsCallback(boost::bind(&LLOutfitGallery::onTexturePickerUpdateImageStats, this, _1)); -// texture_floaterp->setLocalTextureEnabled(FALSE); - - floaterp = picker; } - ((LLFloaterSettingsPicker *)floaterp)->setSettingsFilter(type); - floaterp->openFloater(); - floaterp->setFocus(TRUE); + picker->setSettingsFilter(type); + picker->openFloater(); + picker->setFocus(TRUE); +} + +void LLFloaterEditExtDayCycle::doCloseInventoryFloater(bool quitting) +{ + LLFloater* floaterp = mInventoryFloater.get(); + + if (floaterp) + { + floaterp->closeFloater(quitting); + } } void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID asset_id) { - LL_WARNS("LAPRAS") << "Got asset ID=" << asset_id << LL_ENDL; + LLSettingsBase::TrackPosition frame(mTimeSlider->getCurSliderValue()); + S32 track = mCurrentTrack; + + LLSettingsVOBase::getSettingsAsset(asset_id, + [this, track, frame](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoadedForFrame(asset_id, settings, status, track, frame); }); +} + +void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame) +{ + if (!settings || status) + { + LL_WARNS("SETTINGS") << "Could not load asset " << asset_id << " into frame. status=" << status << LL_ENDL; + return; + } + + mEditDay->setSettingsAtKeyframe(settings, frame, track); + reblendSettings(); + synchronizeTabs(); } diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h index 94b2d6c21b..c4f0811d17 100644 --- a/indra/newview/llfloatereditextdaycycle.h +++ b/indra/newview/llfloatereditextdaycycle.h @@ -124,15 +124,17 @@ private: void onInventoryCreated(LLUUID asset_id, LLUUID inventory_id, LLSD results); void onInventoryUpdated(LLUUID asset_id, LLUUID inventory_id, LLSD results); - void doOpenInventoryFloater(LLSettingsType::type_e type); + void doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID currasset); + void doCloseInventoryFloater(bool quitting = false); void onPickerCommitSetting(LLUUID asset_id); + void onAssetLoadedForFrame(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame); bool canUseInventory() const; bool canApplyRegion() const; bool canApplyParcel() const; void updateEditEnvironment(); - void syncronizeTabs(); + void synchronizeTabs(); void reblendSettings(); void setTabsData(LLTabContainer * tabcontainer, const LLSettingsBase::ptr_t &settings, bool editable); @@ -166,6 +168,7 @@ private: LLTrackBlenderLoopingManual::ptr_t mWaterBlender; LLSettingsSky::ptr_t mScratchSky; LLSettingsWater::ptr_t mScratchWater; + LLSettingsBase::ptr_t mCurrentEdit; LLFrameTimer mPlayTimer; F32 mPlayStartFrame; // an env frame diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 23c77c8a25..2ffb1c1bce 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -222,7 +222,10 @@ void LLSettingsVOBase::onAssetDownloadComplete(LLVFS *vfs, const LLUUID &asset_i status = 1; LL_WARNS("SETTINGS") << "Unable to creat settings object." << LL_ENDL; } - + else + { + settings->setAssetId(asset_id); + } } else { |