diff options
Diffstat (limited to '')
-rw-r--r-- | linden/indra/newview/lightshare.cpp | 52 | ||||
-rw-r--r-- | linden/indra/newview/lightshare.h | 5 | ||||
-rw-r--r-- | linden/indra/newview/llviewergenericmessage.cpp | 5 |
3 files changed, 57 insertions, 5 deletions
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 @@ | |||
39 | #include "meta7windlight.h" | 39 | #include "meta7windlight.h" |
40 | 40 | ||
41 | 41 | ||
42 | const std::string WindlightMessage::sWaterPresetName = "(Region settings)"; | 42 | const std::string WindlightMessage::sWaterPresetName = "(Region settings)"; |
43 | const std::string WindlightMessage::sSkyPresetName = "(Region settings)"; | 43 | const std::string WindlightMessage::sSkyPresetName = "(Region settings)"; |
44 | 44 | const std::string WindlightMessage::sBackupWaterPresetName = "(Backup settings)"; | |
45 | const std::string WindlightMessage::sBackupSkyPresetName = "(Backup settings)"; | ||
46 | |||
47 | // Backups. | ||
48 | LLWaterParamSet waterBackup; | ||
49 | LLWLParamSet skyBackup; | ||
50 | //LLUUID* waterNormalBackup = NULL; | ||
51 | bool animatorIsRunning = true; | ||
52 | bool animatorUseEstateTime = true; | ||
53 | bool backup = false; | ||
45 | 54 | ||
46 | WindlightMessage* WindlightMessage::sMostRecent = NULL; | 55 | WindlightMessage* WindlightMessage::sMostRecent = NULL; |
47 | LLTimer* WindlightMessage::sIgnoreTimer = new LLTimer(); | 56 | LLTimer* WindlightMessage::sIgnoreTimer = new LLTimer(); |
@@ -204,6 +213,25 @@ bool WindlightMessage::applyCallback(const LLSD& notification, | |||
204 | void WindlightMessage::resetRegion() | 213 | void WindlightMessage::resetRegion() |
205 | { | 214 | { |
206 | sIgnoreRegion = false; | 215 | sIgnoreRegion = false; |
216 | |||
217 | // According to Melanie Thielker - | ||
218 | // The new WindlightReset message from OpenSim is for resetting Windlight presets when leaving a sim that uses Lightshare. | ||
219 | // 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. | ||
220 | if (backup) | ||
221 | { | ||
222 | LLWaterParamManager* water_mgr = LLWaterParamManager::instance(); | ||
223 | LLWLParamManager* sky_mgr = LLWLParamManager::instance(); | ||
224 | |||
225 | llinfos << "Restoring WindLight presets " << waterBackup.mName << " and " << skyBackup.mName << "." << llendl; | ||
226 | water_mgr->loadPreset(waterBackup.mName, true); | ||
227 | // Don't think we need to do this. | ||
228 | //if (waterNormalBackup) | ||
229 | //water_mgr->setNormalMapID(*waterNormalBackup); | ||
230 | sky_mgr->mAnimator.mIsRunning = animatorIsRunning; | ||
231 | sky_mgr->mAnimator.mUseLindenTime = animatorUseEstateTime; | ||
232 | sky_mgr->loadPreset(skyBackup.mName, true); | ||
233 | backup = false; | ||
234 | } | ||
207 | } | 235 | } |
208 | 236 | ||
209 | 237 | ||
@@ -227,10 +255,22 @@ bool WindlightMessage::apply() | |||
227 | LLWaterParamManager* water_mgr = LLWaterParamManager::instance(); | 255 | LLWaterParamManager* water_mgr = LLWaterParamManager::instance(); |
228 | LLWLParamManager* sky_mgr = LLWLParamManager::instance(); | 256 | LLWLParamManager* sky_mgr = LLWLParamManager::instance(); |
229 | 257 | ||
258 | if (!backup) | ||
259 | { | ||
260 | llinfos << "Backing up WindLight presets '" << water_mgr->mCurParams.mName << " and " << sky_mgr->mCurParams.mName << "'." << llendl; | ||
261 | waterBackup = water_mgr->mCurParams; | ||
262 | //waterNormalBackup = waterBackup->getNormalMapID(); | ||
263 | skyBackup = sky_mgr->mCurParams; | ||
264 | animatorIsRunning = sky_mgr->mAnimator.mIsRunning; | ||
265 | animatorUseEstateTime = sky_mgr->mAnimator.mUseLindenTime; | ||
266 | backup = true; | ||
267 | } | ||
268 | |||
230 | mWater->mName = sWaterPresetName; | 269 | mWater->mName = sWaterPresetName; |
231 | water_mgr->removeParamSet( sWaterPresetName, false ); | 270 | water_mgr->removeParamSet( sWaterPresetName, false ); |
232 | water_mgr->addParamSet( sWaterPresetName, *mWater ); | 271 | water_mgr->addParamSet( sWaterPresetName, *mWater ); |
233 | water_mgr->savePreset( sWaterPresetName ); | 272 | // Don't think we need to save it, the load gets the one we added above. |
273 | //water_mgr->savePreset( sWaterPresetName ); | ||
234 | water_mgr->loadPreset( sWaterPresetName, true ); | 274 | water_mgr->loadPreset( sWaterPresetName, true ); |
235 | water_mgr->setNormalMapID( *mWaterNormal ); | 275 | water_mgr->setNormalMapID( *mWaterNormal ); |
236 | 276 | ||
@@ -239,13 +279,15 @@ bool WindlightMessage::apply() | |||
239 | sky_mgr->mAnimator.mUseLindenTime = false; | 279 | sky_mgr->mAnimator.mUseLindenTime = false; |
240 | sky_mgr->removeParamSet( sSkyPresetName, false ); | 280 | sky_mgr->removeParamSet( sSkyPresetName, false ); |
241 | sky_mgr->addParamSet( sSkyPresetName, *mSky ); | 281 | sky_mgr->addParamSet( sSkyPresetName, *mSky ); |
242 | sky_mgr->savePreset( sSkyPresetName ); | 282 | // Don't think we need to save it, the load gets the one we added above. |
283 | //sky_mgr->savePreset( sSkyPresetName ); | ||
243 | sky_mgr->loadPreset( sSkyPresetName, true ); | 284 | sky_mgr->loadPreset( sSkyPresetName, true ); |
244 | 285 | ||
245 | return true; | 286 | return true; |
246 | } | 287 | } |
247 | 288 | ||
248 | 289 | ||
290 | // static | ||
249 | bool WindlightMessage::isValid() | 291 | bool WindlightMessage::isValid() |
250 | { | 292 | { |
251 | return mIsValid; | 293 | 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 | |||
68 | // The name of the sky preset where the region settings are stored. | 68 | // The name of the sky preset where the region settings are stored. |
69 | static const std::string sSkyPresetName; | 69 | static const std::string sSkyPresetName; |
70 | 70 | ||
71 | // The name of the preset where the backup settings are stored. | ||
72 | static const std::string sBackupWaterPresetName; | ||
73 | static const std::string sBackupSkyPresetName; | ||
74 | |||
71 | // Message handler for GenericMessage with the "Windlight" method. | 75 | // Message handler for GenericMessage with the "Windlight" method. |
72 | // Creates and applies a new WindlightMessage (or prompts user). | 76 | // Creates and applies a new WindlightMessage (or prompts user). |
73 | static void processWindlight(LLMessageSystem* msg, void**); | 77 | static void processWindlight(LLMessageSystem* msg, void**); |
@@ -78,6 +82,7 @@ class WindlightMessage | |||
78 | 82 | ||
79 | // Called after the user has entered a new region, to reset the | 83 | // Called after the user has entered a new region, to reset the |
80 | // "ignore while in this region" state. | 84 | // "ignore while in this region" state. |
85 | // Also resets/deactivates the Windlight settings in response to the "WindlightReset" method. | ||
81 | static void resetRegion(); | 86 | static void resetRegion(); |
82 | 87 | ||
83 | // Applies/activates the Windlight settings from the message. | 88 | // 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**) | |||
91 | WindlightMessage::processWindlight(msg, NULL); | 91 | WindlightMessage::processWindlight(msg, NULL); |
92 | return; | 92 | return; |
93 | } | 93 | } |
94 | else if(method == "WindlightReset") | ||
95 | { | ||
96 | WindlightMessage::resetRegion(); | ||
97 | return; | ||
98 | } | ||
94 | 99 | ||
95 | if( agent_id != gAgent.getID() ) | 100 | if( agent_id != gAgent.getID() ) |
96 | { | 101 | { |