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.
parent
47e3c3aa21
commit
e24237b6af
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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>);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue