summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llenvironment.cpp14
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp105
-rw-r--r--indra/newview/llfloatereditextdaycycle.h7
-rw-r--r--indra/newview/llsettingsvo.cpp5
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
{