From f58782ab0e008fd63924d29f5eac23135bd468b9 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Thu, 29 Dec 2011 17:23:04 +1000 Subject: Support the new WindlightReset message from OpenSim for resetting Windlight presets when leaving a sim that uses Lightshare. Note, this windlight and lighthshare stuff needs a refactoring. The (I think LL inspired) Windlight CAPS duplicates a lot of this code. Still should backup any WL changes that have not been stored in a preset to. Some cleanup to do as well. That's why there is some excess cruft added with this commit, part way through implementing some of the above. --- linden/indra/newview/lightshare.cpp | 52 ++++++++++++++++++++++--- linden/indra/newview/lightshare.h | 5 +++ linden/indra/newview/llviewergenericmessage.cpp | 5 +++ 3 files changed, 57 insertions(+), 5 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/lightshare.cpp b/linden/indra/newview/lightshare.cpp index b00df96..599a527 100644 --- a/linden/indra/newview/lightshare.cpp +++ b/linden/indra/newview/lightshare.cpp @@ -39,9 +39,18 @@ #include "meta7windlight.h" -const std::string WindlightMessage::sWaterPresetName = "(Region settings)"; -const std::string WindlightMessage::sSkyPresetName = "(Region settings)"; - +const std::string WindlightMessage::sWaterPresetName = "(Region settings)"; +const std::string WindlightMessage::sSkyPresetName = "(Region settings)"; +const std::string WindlightMessage::sBackupWaterPresetName = "(Backup settings)"; +const std::string WindlightMessage::sBackupSkyPresetName = "(Backup settings)"; + +// Backups. +LLWaterParamSet waterBackup; +LLWLParamSet skyBackup; +//LLUUID* waterNormalBackup = NULL; +bool animatorIsRunning = true; +bool animatorUseEstateTime = true; +bool backup = false; WindlightMessage* WindlightMessage::sMostRecent = NULL; LLTimer* WindlightMessage::sIgnoreTimer = new LLTimer(); @@ -204,6 +213,25 @@ bool WindlightMessage::applyCallback(const LLSD& notification, void WindlightMessage::resetRegion() { sIgnoreRegion = false; + +// According to Melanie Thielker - +// The new WindlightReset message from OpenSim is for resetting Windlight presets when leaving a sim that uses Lightshare. +// Hopefully if you are moving to a sim that has new LightShare data, that gets sent after this reset, or the reset is never sent. + if (backup) + { + LLWaterParamManager* water_mgr = LLWaterParamManager::instance(); + LLWLParamManager* sky_mgr = LLWLParamManager::instance(); + + llinfos << "Restoring WindLight presets " << waterBackup.mName << " and " << skyBackup.mName << "." << llendl; + water_mgr->loadPreset(waterBackup.mName, true); + // Don't think we need to do this. + //if (waterNormalBackup) + //water_mgr->setNormalMapID(*waterNormalBackup); + sky_mgr->mAnimator.mIsRunning = animatorIsRunning; + sky_mgr->mAnimator.mUseLindenTime = animatorUseEstateTime; + sky_mgr->loadPreset(skyBackup.mName, true); + backup = false; + } } @@ -227,10 +255,22 @@ bool WindlightMessage::apply() LLWaterParamManager* water_mgr = LLWaterParamManager::instance(); LLWLParamManager* sky_mgr = LLWLParamManager::instance(); + if (!backup) + { + llinfos << "Backing up WindLight presets '" << water_mgr->mCurParams.mName << " and " << sky_mgr->mCurParams.mName << "'." << llendl; + waterBackup = water_mgr->mCurParams; + //waterNormalBackup = waterBackup->getNormalMapID(); + skyBackup = sky_mgr->mCurParams; + animatorIsRunning = sky_mgr->mAnimator.mIsRunning; + animatorUseEstateTime = sky_mgr->mAnimator.mUseLindenTime; + backup = true; + } + mWater->mName = sWaterPresetName; water_mgr->removeParamSet( sWaterPresetName, false ); water_mgr->addParamSet( sWaterPresetName, *mWater ); - water_mgr->savePreset( sWaterPresetName ); + // Don't think we need to save it, the load gets the one we added above. + //water_mgr->savePreset( sWaterPresetName ); water_mgr->loadPreset( sWaterPresetName, true ); water_mgr->setNormalMapID( *mWaterNormal ); @@ -239,13 +279,15 @@ bool WindlightMessage::apply() sky_mgr->mAnimator.mUseLindenTime = false; sky_mgr->removeParamSet( sSkyPresetName, false ); sky_mgr->addParamSet( sSkyPresetName, *mSky ); - sky_mgr->savePreset( sSkyPresetName ); + // Don't think we need to save it, the load gets the one we added above. + //sky_mgr->savePreset( sSkyPresetName ); sky_mgr->loadPreset( sSkyPresetName, true ); return true; } +// static bool WindlightMessage::isValid() { return mIsValid; diff --git a/linden/indra/newview/lightshare.h b/linden/indra/newview/lightshare.h index e3cccf0..4792823 100644 --- a/linden/indra/newview/lightshare.h +++ b/linden/indra/newview/lightshare.h @@ -68,6 +68,10 @@ class WindlightMessage // The name of the sky preset where the region settings are stored. static const std::string sSkyPresetName; + // The name of the preset where the backup settings are stored. + static const std::string sBackupWaterPresetName; + static const std::string sBackupSkyPresetName; + // Message handler for GenericMessage with the "Windlight" method. // Creates and applies a new WindlightMessage (or prompts user). static void processWindlight(LLMessageSystem* msg, void**); @@ -78,6 +82,7 @@ class WindlightMessage // Called after the user has entered a new region, to reset the // "ignore while in this region" state. + // Also resets/deactivates the Windlight settings in response to the "WindlightReset" method. static void resetRegion(); // Applies/activates the Windlight settings from the message. diff --git a/linden/indra/newview/llviewergenericmessage.cpp b/linden/indra/newview/llviewergenericmessage.cpp index 8078888..0bbcadd 100644 --- a/linden/indra/newview/llviewergenericmessage.cpp +++ b/linden/indra/newview/llviewergenericmessage.cpp @@ -91,6 +91,11 @@ void process_generic_message(LLMessageSystem* msg, void**) WindlightMessage::processWindlight(msg, NULL); return; } + else if(method == "WindlightReset") + { + WindlightMessage::resetRegion(); + return; + } if( agent_id != gAgent.getID() ) { -- cgit v1.1