summaryrefslogtreecommitdiff
path: root/indra/newview/llenvmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llenvmanager.cpp')
-rwxr-xr-xindra/newview/llenvmanager.cpp76
1 files changed, 39 insertions, 37 deletions
diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
index 86fe6754dc..589cf28615 100755
--- a/indra/newview/llenvmanager.cpp
+++ b/indra/newview/llenvmanager.cpp
@@ -92,9 +92,11 @@ void LLEnvPrefs::setUseDayCycle(const std::string& name)
}
//=============================================================================
-LLEnvManagerNew::LLEnvManagerNew()
+LLEnvManagerNew::LLEnvManagerNew():
+ mInterpNextChangeMessage(true),
+ mCurRegionUUID(LLUUID::null),
+ mLastReceivedID(LLUUID::null)
{
- mInterpNextChangeMessage = true;
// Set default environment settings.
mUserPrefs.mUseRegionSettings = true;
@@ -102,6 +104,9 @@ LLEnvManagerNew::LLEnvManagerNew()
mUserPrefs.mWaterPresetName = "Default";
mUserPrefs.mSkyPresetName = "Default";
mUserPrefs.mDayCycleName = "Default";
+
+ LL_DEBUGS("Windlight")<<LL_ENDL;
+ gAgent.addRegionChangedCallback(boost::bind(&LLEnvManagerNew::onRegionChange, this));
}
bool LLEnvManagerNew::getUseRegionSettings() const
@@ -300,6 +305,11 @@ void LLEnvManagerNew::loadUserPrefs()
mUserPrefs.mUseRegionSettings = gSavedSettings.getBOOL("UseEnvironmentFromRegion");
mUserPrefs.mUseDayCycle = gSavedSettings.getBOOL("UseDayCycle");
+
+ if (mUserPrefs.mUseRegionSettings)
+ {
+ requestRegionSettings();
+ }
}
void LLEnvManagerNew::saveUserPrefs()
@@ -398,6 +408,7 @@ void LLEnvManagerNew::dumpPresets()
void LLEnvManagerNew::requestRegionSettings()
{
+ LL_DEBUGS("Windlight") << LL_ENDL;
LLEnvironmentRequest::initiate();
}
@@ -422,11 +433,6 @@ boost::signals2::connection LLEnvManagerNew::setRegionSettingsChangeCallback(con
return mRegionSettingsChangeSignal.connect(cb);
}
-boost::signals2::connection LLEnvManagerNew::setRegionChangeCallback(const region_change_signal_t::slot_type& cb)
-{
- return mRegionChangeSignal.connect(cb);
-}
-
boost::signals2::connection LLEnvManagerNew::setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb)
{
return mRegionSettingsAppliedSignal.connect(cb);
@@ -457,25 +463,13 @@ const std::string LLEnvManagerNew::getScopeString(LLEnvKey::EScope scope)
}
}
-void LLEnvManagerNew::onRegionCrossing()
-{
- LL_DEBUGS("Windlight") << "Crossed region" << LL_ENDL;
- onRegionChange(true);
-}
-
-void LLEnvManagerNew::onTeleport()
-{
- LL_DEBUGS("Windlight") << "Teleported" << LL_ENDL;
- onRegionChange(false);
-}
-
void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content)
{
// If the message was valid, grab the UUID from it and save it for next outbound update message.
mLastReceivedID = content[0]["messageID"].asUUID();
// Refresh cached region settings.
- LL_DEBUGS("Windlight") << "Caching region environment settings: " << content << LL_ENDL;
+ LL_DEBUGS("Windlight") << "Received region environment settings: " << content << LL_ENDL;
F32 sun_hour = 0; // *TODO
LLEnvironmentSettings new_settings(content[1], content[2], content[3], sun_hour);
mCachedRegionPrefs = new_settings;
@@ -594,6 +588,7 @@ void LLEnvManagerNew::updateWaterFromPrefs(bool interpolate)
void LLEnvManagerNew::updateManagersFromPrefs(bool interpolate)
{
+ LL_DEBUGS("Windlight")<<LL_ENDL;
// Apply water settings.
updateWaterFromPrefs(interpolate);
@@ -651,28 +646,35 @@ bool LLEnvManagerNew::useDefaultWater()
}
-void LLEnvManagerNew::onRegionChange(bool interpolate)
+void LLEnvManagerNew::onRegionChange()
{
// Avoid duplicating region setting requests
// by checking whether the region is actually changing.
LLViewerRegion* regionp = gAgent.getRegion();
LLUUID region_uuid = regionp ? regionp->getRegionID() : LLUUID::null;
- if (region_uuid == mCurRegionUUID)
+ if (region_uuid != mCurRegionUUID)
{
- return;
+ // Clear locally modified region settings.
+ mNewRegionPrefs.clear();
+
+ // *TODO: clear environment settings of the previous region?
+
+ // Request environment settings of the new region.
+ mCurRegionUUID = region_uuid;
+ // for region crossings, interpolate the change; for teleports, don't
+ mInterpNextChangeMessage = (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE);
+ LL_DEBUGS("Windlight") << (mInterpNextChangeMessage ? "Crossed" : "Teleported")
+ << " to new region: " << region_uuid
+ << LL_ENDL;
+ requestRegionSettings();
+ }
+ else
+ {
+ LL_DEBUGS("Windlight") << "disregarding region change; interp: "
+ << (mInterpNextChangeMessage ? "true" : "false")
+ << " regionp: " << regionp
+ << " old: " << mCurRegionUUID
+ << " new: " << region_uuid
+ << LL_ENDL;
}
-
- // Clear locally modified region settings.
- mNewRegionPrefs.clear();
-
- // *TODO: clear environment settings of the previous region?
-
- // Request environment settings of the new region.
- LL_DEBUGS("Windlight") << "New viewer region: " << region_uuid << LL_ENDL;
- mCurRegionUUID = region_uuid;
- mInterpNextChangeMessage = interpolate;
- requestRegionSettings();
-
- // Let interested parties know agent region has been changed.
- mRegionChangeSignal();
}