SL-10189, SL-10880: Mark the day instance so that it does not try to reanimate a day cycle when setting a fixed sky. Add new floater for setting the shared environment to local and allowing modifications.

master
Rider Linden 2019-04-03 14:52:59 -07:00
parent 47e3c3aa21
commit e24237b6af
9 changed files with 859 additions and 38 deletions

View File

@ -235,6 +235,7 @@ set(viewer_SOURCE_FILES
llfloaterdeleteprefpreset.cpp
llfloaterdestinations.cpp
llfloatereditextdaycycle.cpp
llfloaterenvironmentadjust.cpp
llfloaterevent.cpp
llfloaterexperiencepicker.cpp
llfloaterexperienceprofile.cpp
@ -858,6 +859,7 @@ set(viewer_HEADER_FILES
llfloaterdeleteprefpreset.h
llfloaterdestinations.h
llfloatereditextdaycycle.h
llfloaterenvironmentadjust.h
llfloaterevent.h
llfloaterexperiencepicker.h
llfloaterexperienceprofile.h

View File

@ -798,6 +798,11 @@ const S32 LLEnvironment::VERSION_CLEANUP(-4); // for cleanups
const F32 LLEnvironment::SUN_DELTA_YAW(F_PI); // 180deg
const U32 LLEnvironment::DayInstance::NO_ANIMATE_SKY(0x01);
const U32 LLEnvironment::DayInstance::NO_ANIMATE_WATER(0x02);
//-------------------------------------------------------------------------
LLEnvironment::LLEnvironment():
mCloudScrollDelta(),
@ -1110,28 +1115,28 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, LLEnvironm
DayInstance::ptr_t environment = getEnvironmentInstance(env, true);
// LLSettingsSky::ptr_t prev_sky = mEnvironments[ENV_DEFAULT]->getSky();
// LLSettingsWater::ptr_t prev_water = mEnvironments[ENV_DEFAULT]->getWater();
// if (mCurrentEnvironment && (ENV_EDIT == env))
// {
// prev_sky = mCurrentEnvironment->getSky() ? mCurrentEnvironment->getSky() : prev_sky;
// prev_water = mCurrentEnvironment->getWater() ? mCurrentEnvironment->getWater() : prev_water;
// }
// environment->clear();
// environment->setSky((fixed.first) ? fixed.first : prev_sky);
// environment->setWater((fixed.second) ? fixed.second : prev_water);
if (fixed.first)
{
environment->setSky(fixed.first);
environment->setFlags(DayInstance::NO_ANIMATE_SKY);
}
else if (!environment->getSky())
{
environment->setSky(mCurrentEnvironment->getSky());
environment->setFlags(DayInstance::NO_ANIMATE_SKY);
}
if (fixed.second)
{
environment->setWater(fixed.second);
environment->setFlags(DayInstance::NO_ANIMATE_WATER);
}
else if (!environment->getWater())
{
environment->setWater(mCurrentEnvironment->getWater());
environment->setFlags(DayInstance::NO_ANIMATE_WATER);
}
if (!mSignalEnvChanged.empty())
mSignalEnvChanged(env, env_version);
@ -2447,7 +2452,8 @@ LLEnvironment::DayInstance::DayInstance(EnvSelection_t env) :
mInitialized(false),
mType(TYPE_INVALID),
mSkyTrack(1),
mEnv(env)
mEnv(env),
mAnimateFlags(0)
{ }
@ -2465,6 +2471,7 @@ LLEnvironment::DayInstance::ptr_t LLEnvironment::DayInstance::clone() const
environment->mInitialized = mInitialized;
environment->mType = mType;
environment->mSkyTrack = mSkyTrack;
environment->mAnimateFlags = mAnimateFlags;
return environment;
}
@ -2489,6 +2496,8 @@ void LLEnvironment::DayInstance::setDay(const LLSettingsDay::ptr_t &pday, LLSett
mType = TYPE_CYCLED;
mInitialized = false;
mAnimateFlags = 0;
mDayCycle = pday;
mDayLength = daylength;
mDayOffset = dayoffset;
@ -2596,34 +2605,40 @@ void LLEnvironment::DayInstance::animate()
if (!mDayCycle)
return;
LLSettingsDay::CycleTrack_t &wtrack = mDayCycle->getCycleTrack(0);
if (!(mAnimateFlags & NO_ANIMATE_WATER))
{
LLSettingsDay::CycleTrack_t &wtrack = mDayCycle->getCycleTrack(0);
if (wtrack.empty())
{
mWater.reset();
mBlenderWater.reset();
}
else
{
mWater = LLSettingsVOWater::buildDefaultWater();
mBlenderWater = std::make_shared<LLTrackBlenderLoopingTime>(mWater, mDayCycle, 0,
mDayLength, mDayOffset, DEFAULT_UPDATE_THRESHOLD);
if (wtrack.empty())
{
mWater.reset();
mBlenderWater.reset();
}
else
{
mWater = LLSettingsVOWater::buildDefaultWater();
mBlenderWater = std::make_shared<LLTrackBlenderLoopingTime>(mWater, mDayCycle, 0,
mDayLength, mDayOffset, DEFAULT_UPDATE_THRESHOLD);
}
}
// sky, initialize to track 1
LLSettingsDay::CycleTrack_t &track = mDayCycle->getCycleTrack(1);
if (!(mAnimateFlags & NO_ANIMATE_SKY))
{
// sky, initialize to track 1
LLSettingsDay::CycleTrack_t &track = mDayCycle->getCycleTrack(1);
if (track.empty())
{
mSky.reset();
mBlenderSky.reset();
}
else
{
mSky = LLSettingsVOSky::buildDefaultSky();
mBlenderSky = std::make_shared<LLTrackBlenderLoopingTime>(mSky, mDayCycle, 1,
mDayLength, mDayOffset, DEFAULT_UPDATE_THRESHOLD);
mBlenderSky->switchTrack(mSkyTrack, 0.0);
if (track.empty())
{
mSky.reset();
mBlenderSky.reset();
}
else
{
mSky = LLSettingsVOSky::buildDefaultSky();
mBlenderSky = std::make_shared<LLTrackBlenderLoopingTime>(mSky, mDayCycle, 1,
mDayLength, mDayOffset, DEFAULT_UPDATE_THRESHOLD);
mBlenderSky->switchTrack(mSkyTrack, 0.0);
}
}
}

View File

@ -235,8 +235,12 @@ public:
TYPE_FIXED,
TYPE_CYCLED
};
typedef std::shared_ptr<DayInstance> ptr_t;
static const U32 NO_ANIMATE_SKY;
static const U32 NO_ANIMATE_WATER;
DayInstance(EnvSelection_t env);
virtual ~DayInstance() { };
@ -273,7 +277,12 @@ public:
LLSettingsBase::TrackPosition getProgress() const;
void setFlags(U32 flag) { mAnimateFlags |= flag; }
void clearFlags(U32 flag) { mAnimateFlags &= ~flag; }
protected:
LLSettingsDay::ptr_t mDayCycle;
LLSettingsSky::ptr_t mSky;
LLSettingsWater::ptr_t mWater;
@ -291,6 +300,8 @@ public:
EnvSelection_t mEnv;
U32 mAnimateFlags;
LLSettingsBase::TrackPosition secondsToKeyframe(LLSettingsDay::Seconds seconds);
};

View File

@ -0,0 +1,329 @@
/**
* @file llfloaterfixedenvironment.cpp
* @brief Floaters to create and edit fixed settings for sky and water.
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llfloaterenvironmentadjust.h"
#include "llslider.h"
#include "llsliderctrl.h"
#include "llcolorswatch.h"
#include "llvirtualtrackball.h"
#include "llenvironment.h"
//=========================================================================
namespace
{
const std::string FIELD_SKY_AMBIENT_LIGHT("ambient_light");
const std::string FIELD_SKY_BLUE_HORIZON("blue_horizon");
const std::string FIELD_SKY_BLUE_DENSITY("blue_density");
const std::string FIELD_SKY_SUN_COLOR("sun_color");
const std::string FIELD_SKY_CLOUD_COLOR("cloud_color");
const std::string FIELD_SKY_HAZE_HORIZON("haze_horizon");
const std::string FIELD_SKY_HAZE_DENSITY("haze_density");
const std::string FIELD_SKY_CLOUD_COVERAGE("cloud_coverage");
const std::string FIELD_SKY_CLOUD_SCALE("cloud_scale");
const std::string FIELD_SKY_SCENE_GAMMA("scene_gamma");
const std::string FIELD_SKY_SUN_ROTATION("sun_rotation");
const std::string FIELD_SKY_SUN_SCALE("sun_scale");
const std::string FIELD_SKY_GLOW_FOCUS("glow_focus");
const std::string FIELD_SKY_GLOW_SIZE("glow_size");
const std::string FIELD_SKY_STAR_BRIGHTNESS("star_brightness");
const std::string FIELD_SKY_MOON_ROTATION("moon_rotation");
const F32 SLIDER_SCALE_SUN_AMBIENT(3.0f);
const F32 SLIDER_SCALE_BLUE_HORIZON_DENSITY(2.0f);
const F32 SLIDER_SCALE_GLOW_R(20.0f);
const F32 SLIDER_SCALE_GLOW_B(-5.0f);
const F32 SLIDER_SCALE_DENSITY_MULTIPLIER(0.001f);
const S32 FLOATER_ENVIRONMENT_UPDATE(-2);
}
//=========================================================================
LLFloaterEnvironmentAdjust::LLFloaterEnvironmentAdjust(const LLSD &key):
LLFloater(key)
{}
LLFloaterEnvironmentAdjust::~LLFloaterEnvironmentAdjust()
{}
//-------------------------------------------------------------------------
BOOL LLFloaterEnvironmentAdjust::postBuild()
{
getChild<LLUICtrl>(FIELD_SKY_AMBIENT_LIGHT)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAmbientLightChanged(); });
getChild<LLUICtrl>(FIELD_SKY_BLUE_HORIZON)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onBlueHorizonChanged(); });
getChild<LLUICtrl>(FIELD_SKY_BLUE_DENSITY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onBlueDensityChanged(); });
getChild<LLUICtrl>(FIELD_SKY_HAZE_HORIZON)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onHazeHorizonChanged(); });
getChild<LLUICtrl>(FIELD_SKY_HAZE_DENSITY)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onHazeDensityChanged(); });
getChild<LLUICtrl>(FIELD_SKY_SCENE_GAMMA)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSceneGammaChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_COLOR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudColorChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_COVERAGE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudCoverageChanged(); });
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudScaleChanged(); });
getChild<LLUICtrl>(FIELD_SKY_SUN_COLOR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunColorChanged(); });
getChild<LLUICtrl>(FIELD_SKY_GLOW_FOCUS)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onGlowChanged(); });
getChild<LLUICtrl>(FIELD_SKY_GLOW_SIZE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onGlowChanged(); });
getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onStarBrightnessChanged(); });
getChild<LLUICtrl>(FIELD_SKY_SUN_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunRotationChanged(); });
getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunScaleChanged(); });
getChild<LLUICtrl>(FIELD_SKY_MOON_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonRotationChanged(); });
refresh();
return TRUE;
}
void LLFloaterEnvironmentAdjust::onOpen(const LLSD& key)
{
captureCurrentEnvironment();
mEventConnection = LLEnvironment::instance().setEnvironmentChanged([this](LLEnvironment::EnvSelection_t env, S32 version){ onEnvironmentUpdated(env, version); });
LLFloater::onOpen(key);
refresh();
}
void LLFloaterEnvironmentAdjust::onClose(bool app_quitting)
{
mEventConnection.disconnect();
mLiveSky.reset();
LLFloater::onClose(app_quitting);
}
//-------------------------------------------------------------------------
void LLFloaterEnvironmentAdjust::refresh()
{
if (!mLiveSky)
{
setAllChildrenEnabled(FALSE);
return;
}
setEnabled(TRUE);
setAllChildrenEnabled(TRUE);
getChild<LLColorSwatchCtrl>(FIELD_SKY_AMBIENT_LIGHT)->set(mLiveSky->getAmbientColor() / SLIDER_SCALE_SUN_AMBIENT);
getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_HORIZON)->set(mLiveSky->getBlueHorizon() / SLIDER_SCALE_BLUE_HORIZON_DENSITY);
getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_DENSITY)->set(mLiveSky->getBlueDensity() / SLIDER_SCALE_BLUE_HORIZON_DENSITY);
getChild<LLUICtrl>(FIELD_SKY_HAZE_HORIZON)->setValue(mLiveSky->getHazeHorizon());
getChild<LLUICtrl>(FIELD_SKY_HAZE_DENSITY)->setValue(mLiveSky->getHazeDensity());
getChild<LLUICtrl>(FIELD_SKY_SCENE_GAMMA)->setValue(mLiveSky->getGamma());
getChild<LLColorSwatchCtrl>(FIELD_SKY_CLOUD_COLOR)->set(mLiveSky->getCloudColor());
getChild<LLUICtrl>(FIELD_SKY_CLOUD_COVERAGE)->setValue(mLiveSky->getCloudShadow());
getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCALE)->setValue(mLiveSky->getCloudScale());
getChild<LLColorSwatchCtrl>(FIELD_SKY_SUN_COLOR)->set(mLiveSky->getSunlightColor() / SLIDER_SCALE_SUN_AMBIENT);
LLColor3 glow(mLiveSky->getGlow());
// takes 40 - 0.2 range -> 0 - 1.99 UI range
getChild<LLUICtrl>(FIELD_SKY_GLOW_SIZE)->setValue(2.0 - (glow.mV[0] / SLIDER_SCALE_GLOW_R));
getChild<LLUICtrl>(FIELD_SKY_GLOW_FOCUS)->setValue(glow.mV[2] / SLIDER_SCALE_GLOW_B);
getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setValue(mLiveSky->getStarBrightness());
getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(mLiveSky->getSunRotation());
getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setValue(mLiveSky->getSunScale());
getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(mLiveSky->getMoonRotation());
}
void LLFloaterEnvironmentAdjust::captureCurrentEnvironment()
{
LLEnvironment &environment(LLEnvironment::instance());
bool updatelocal(false);
if (environment.hasEnvironment(LLEnvironment::ENV_LOCAL))
{
if (environment.getEnvironmentDay(LLEnvironment::ENV_LOCAL))
{ // We have a full day cycle in the local environment. Freeze the sky
mLiveSky = environment.getEnvironmentFixedSky(LLEnvironment::ENV_LOCAL)->buildClone();
updatelocal = true;
}
else
{ // otherwise we can just use the sky.
mLiveSky = environment.getEnvironmentFixedSky(LLEnvironment::ENV_LOCAL);
}
}
else
{
mLiveSky = environment.getEnvironmentFixedSky(LLEnvironment::ENV_PARCEL, true)->buildClone();
updatelocal = true;
}
if (updatelocal)
{
environment.setEnvironment(LLEnvironment::ENV_LOCAL, mLiveSky, FLOATER_ENVIRONMENT_UPDATE);
}
environment.setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
environment.updateEnvironment(LLEnvironment::TRANSITION_INSTANT);
}
//-------------------------------------------------------------------------
void LLFloaterEnvironmentAdjust::onAmbientLightChanged()
{
if (!mLiveSky)
return;
mLiveSky->setAmbientColor(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_AMBIENT_LIGHT)->get() * SLIDER_SCALE_SUN_AMBIENT));
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onBlueHorizonChanged()
{
if (!mLiveSky)
return;
mLiveSky->setBlueHorizon(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_HORIZON)->get() * SLIDER_SCALE_BLUE_HORIZON_DENSITY));
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onBlueDensityChanged()
{
if (!mLiveSky)
return;
mLiveSky->setBlueDensity(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_DENSITY)->get() * SLIDER_SCALE_BLUE_HORIZON_DENSITY));
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onHazeHorizonChanged()
{
if (!mLiveSky)
return;
mLiveSky->setHazeHorizon(getChild<LLUICtrl>(FIELD_SKY_HAZE_HORIZON)->getValue().asReal());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onHazeDensityChanged()
{
if (!mLiveSky)
return;
mLiveSky->setHazeDensity(getChild<LLUICtrl>(FIELD_SKY_HAZE_DENSITY)->getValue().asReal());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onSceneGammaChanged()
{
if (!mLiveSky)
return;
mLiveSky->setGamma(getChild<LLUICtrl>(FIELD_SKY_SCENE_GAMMA)->getValue().asReal());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onCloudColorChanged()
{
if (!mLiveSky)
return;
mLiveSky->setCloudColor(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_CLOUD_COLOR)->get()));
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onCloudCoverageChanged()
{
if (!mLiveSky)
return;
mLiveSky->setCloudShadow(getChild<LLUICtrl>(FIELD_SKY_CLOUD_COVERAGE)->getValue().asReal());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onCloudScaleChanged()
{
if (!mLiveSky)
return;
mLiveSky->setCloudScale(getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCALE)->getValue().asReal());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onGlowChanged()
{
if (!mLiveSky)
return;
LLColor3 glow(getChild<LLUICtrl>(FIELD_SKY_GLOW_SIZE)->getValue().asReal(), 0.0f, getChild<LLUICtrl>(FIELD_SKY_GLOW_FOCUS)->getValue().asReal());
// takes 0 - 1.99 UI range -> 40 -> 0.2 range
glow.mV[0] = (2.0f - glow.mV[0]) * SLIDER_SCALE_GLOW_R;
glow.mV[2] *= SLIDER_SCALE_GLOW_B;
mLiveSky->setGlow(glow);
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onStarBrightnessChanged()
{
if (!mLiveSky)
return;
mLiveSky->setStarBrightness(getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->getValue().asReal());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onSunRotationChanged()
{
if (!mLiveSky)
return;
mLiveSky->setSunRotation(getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->getRotation());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onSunScaleChanged()
{
if (!mLiveSky)
return;
mLiveSky->setSunScale((getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->getValue().asReal()));
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onMoonRotationChanged()
{
if (!mLiveSky)
return;
mLiveSky->setMoonRotation(getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->getRotation());
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onSunColorChanged()
{
if (!mLiveSky)
return;
LLColor3 color(getChild<LLColorSwatchCtrl>(FIELD_SKY_SUN_COLOR)->get());
color *= SLIDER_SCALE_SUN_AMBIENT;
mLiveSky->setSunlightColor(color);
mLiveSky->update();
}
void LLFloaterEnvironmentAdjust::onEnvironmentUpdated(LLEnvironment::EnvSelection_t env, S32 version)
{
if (env == LLEnvironment::ENV_LOCAL)
{ // a new local environment has been applied
if (version != FLOATER_ENVIRONMENT_UPDATE)
{ // not by this floater
captureCurrentEnvironment();
refresh();
}
}
}

View File

@ -0,0 +1,86 @@
/**
* @file llfloaterenvironmentadjust.h
* @brief Floaters to create and edit fixed settings for sky and water.
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_FLOATERENVIRONMENTADJUST_H
#define LL_FLOATERENVIRONMENTADJUST_H
#include "llfloater.h"
#include "llsettingsbase.h"
#include "llsettingssky.h"
#include "llenvironment.h"
#include "boost/signals2.hpp"
class LLButton;
class LLLineEditor;
/**
* Floater container for taking a snapshot of the current environment and making minor adjustments.
*/
class LLFloaterEnvironmentAdjust : public LLFloater
{
LOG_CLASS(LLFloaterEnvironmentAdjust);
public:
LLFloaterEnvironmentAdjust(const LLSD &key);
virtual ~LLFloaterEnvironmentAdjust();
virtual BOOL postBuild() override;
virtual void onOpen(const LLSD& key) override;
virtual void onClose(bool app_quitting) override;
virtual void refresh() override;
private:
void captureCurrentEnvironment();
void onAmbientLightChanged();
void onBlueHorizonChanged();
void onBlueDensityChanged();
void onHazeHorizonChanged();
void onHazeDensityChanged();
void onSceneGammaChanged();
void onCloudColorChanged();
void onCloudCoverageChanged();
void onCloudScaleChanged();
void onSunColorChanged();
void onGlowChanged();
void onStarBrightnessChanged();
void onSunRotationChanged();
void onSunScaleChanged();
void onMoonRotationChanged();
void onEnvironmentUpdated(LLEnvironment::EnvSelection_t env, S32 version);
LLSettingsSky::ptr_t mLiveSky;
LLEnvironment::connection_t mEventConnection;
};
#endif // LL_FLOATERFIXEDENVIRONMENT_H

View File

@ -58,6 +58,7 @@
#include "llfloaterdeleteprefpreset.h"
#include "llfloaterdestinations.h"
#include "llfloatereditextdaycycle.h"
#include "llfloaterenvironmentadjust.h"
#include "llfloaterexperienceprofile.h"
#include "llfloaterexperiences.h"
#include "llfloaterexperiencepicker.h"
@ -222,7 +223,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("env_fixed_environmentent_water", "floater_fixedenvironment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFixedEnvironmentWater>);
LLFloaterReg::add("env_fixed_environmentent_sky", "floater_fixedenvironment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFixedEnvironmentSky>);
//LLFloaterReg::add("env_fixed_environmentent", "floater_fixedenvironment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFixedEnvironment>);
LLFloaterReg::add("env_adjust_snapshot", "floater_adjust_environment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEnvironmentAdjust>);
LLFloaterReg::add("env_edit_extdaycycle", "floater_edit_ext_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditExtDayCycle>);
LLFloaterReg::add("my_environments", "floater_my_environments.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMyEnvironment>);

View File

@ -8542,6 +8542,10 @@ class LLWorldEnvSettings : public view_listener_t
else
LLEnvironment::instance().pauseCloudScroll();
}
else if (event_name == "adjust_tool")
{
LLFloaterReg::showInstance("env_adjust_snapshot");
}
else if (event_name == "my_environs")
{
LLFloaterReg::showInstance("my_environments");

View File

@ -0,0 +1,365 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater layout="topleft"
name="env_adjust_snapshot"
help_topic="day_presets"
save_rect="false"
title="Personal Lighting"
width="845"
height="225"
min_width="500"
min_height="225"
single_instance="true"
can_resize="false">
<layout_stack name="outer_stack"
width="845"
height="212"
follows="all"
animate="false"
top="0"
orientation="vertical">
<!-- If I put in a timeline it would go here -->
<layout_panel name="env_controls"
border="false"
bevel_style="in"
auto_resize="true"
user_resize="true"
height="150"
min_height="0"
visible="true">
<layout_stack name="settings_stack"
width="855"
height="150"
follows="all"
animate="false"
orientation="horizontal">
<layout_panel border="false"
bevel_style="in"
auto_resize="false"
user_resize="false"
visible="true"
width="160"
height="150">
<text follows="left|top"
height="10"
layout="topleft"
left="10"
top="5"
width="80">Ambient:</text>
<color_swatch can_apply_immediately="true"
follows="left|top"
height="37"
label_height="0"
layout="topleft"
left_delta="0"
name="ambient_light"
top_pad="5"
width="60"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="0"
top_pad="10"
width="80">Blue Horizon:</text>
<color_swatch can_apply_immediately="true"
follows="left|top"
height="37"
label_height="0"
layout="topleft"
left_delta="0"
name="blue_horizon"
top_pad="5"
width="60"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="0"
top_pad="10"
width="80">Blue Density:</text>
<color_swatch can_apply_immediately="true"
follows="left|top"
height="37"
label_height="0"
layout="topleft"
left_delta="0"
name="blue_density"
top_pad="5"
width="60"/>
<text follows="right|top"
height="10"
layout="topleft"
right="-10"
top="5"
width="60">Sun Color:</text>
<color_swatch can_apply_immediately="true"
follows="left|top"
height="37"
label_height="0"
layout="topleft"
left_delta="0"
name="sun_color"
top_pad="5"
width="60"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="0"
top_pad="10"
width="80">Cloud Color:</text>
<color_swatch can_apply_immediately="true"
follows="left|top"
height="37"
label_height="0"
layout="topleft"
left_delta="0"
name="cloud_color"
top_pad="5"
width="60"/>
</layout_panel>
<layout_panel border="false"
bevel_style="in"
auto_resize="false"
user_resize="false"
visible="true"
width="200"
height="150">
<text follows="left|top"
height="10"
layout="topleft"
left_delta="5"
top_pad="5"
width="80">Haze Horizon:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="5"
name="haze_horizon"
top_pad="5"
width="185"
can_edit_text="true"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="-5"
top_pad="5"
width="80">Haze Density:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="5"
name="haze_density"
top_pad="5"
width="185"
can_edit_text="true"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="-5"
top_pad="5"
width="185">Cloud Coverage:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1"
name="cloud_coverage"
top_pad="5"
width="185"
can_edit_text="true"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="-5"
top_pad="5"
width="185">Cloud Scale:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0.01"
max_val="3"
name="cloud_scale"
top_pad="5"
width="185"
can_edit_text="true"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="-5"
top_pad="15"
width="80">Scene Gamma:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
max_val="20"
name="scene_gamma"
top_pad="5"
width="185"
can_edit_text="true"/>
</layout_panel>
<layout_panel border="false"
bevel_style="in"
auto_resize="false"
user_resize="false"
height="150"
width="310"
min_height="0"
visible="true">
<text follows="top|left"
font="SansSerifBold"
height="10"
layout="topleft"
name="label"
left="5"
top="5"
width="105">Sun:</text>
<sun_moon_trackball name="sun_rotation"
follows="left|top"
left_delta="0"
top_delta="20"
height="150"
width="150"
thumb_mode="sun"/>
<check_box control_name="sunbeacon"
width="60"
height="16"
label="Show Beacon"
layout="topleft"
name="sunbeacon"
left_delta="55"
bottom="-10"
follows="bottom|right"/>
<text follows="left|top"
height="10"
layout="topleft"
left_pad="40"
top="25"
width="80">Scale:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0.25"
max_val="20"
name="sun_scale"
top_delta="15"
width="130"
can_edit_text="true"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="-5"
top_pad="5"
width="100">Glow Focus:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="-2"
max_val="2"
name="glow_focus"
top_pad="5"
width="130"
can_edit_text="true"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="-5"
top_pad="5"
width="200">Glow Size:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="1.99"
name="glow_size"
top_pad="5"
width="130"
can_edit_text="true"/>
<text follows="left|top"
height="10"
layout="topleft"
left_delta="-5"
top_pad="10"
width="200">Star Brightness:</text>
<slider decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0"
layout="topleft"
left_delta="5"
min_val="0"
max_val="500"
name="star_brightness"
top_pad="5"
width="130"
can_edit_text="true"/>
</layout_panel>
<layout_panel border="false"
bevel_style="in"
auto_resize="false"
user_resize="false"
height="150"
width="160"
min_height="0"
visible="true">
<text follows="top|left"
font="SansSerifBold"
height="10"
layout="topleft"
name="label"
left="5"
top="5"
width="105">Moon:</text>
<sun_moon_trackball name="moon_rotation"
follows="left|top"
left_delta="0"
top_delta="20"
height="150"
width="150"
thumb_mode="moon"/>
<check_box control_name="moonbeacon"
width="60"
height="16"
label="Show Beacon"
layout="topleft"
name="moonbeacon"
right="-50"
bottom="-10"
follows="bottom|right"/>
</layout_panel>
</layout_stack>
</layout_panel>
</layout_stack>
</floater>

View File

@ -715,6 +715,13 @@
function="World.EnvSettings"
parameter="my_environs" />
</menu_item_call>
<menu_item_call
label="Personal Lighting..."
name="adjustment_tool">
<menu_item_call.on_click
function="World.EnvSettings"
parameter="adjust_tool" />
</menu_item_call>
<menu_item_separator/>
<menu_item_check
label="Pause Clouds"