diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 2691134aa1b2453d394e46073d364bca9cb132c1..2b6ddc7c5b3d23dc74dca80f4f7318a3c5166fba 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1077,6 +1077,11 @@ void LLAgent::removeRegionChangedCallback(boost::signals2::connection callback) mRegionChangedSignal.disconnect(callback); } +void LLAgent::regionChanged() +{ + mRegionChangedSignal(); +} + //----------------------------------------------------------------------------- // inPrelude() //----------------------------------------------------------------------------- diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 549820ccc3ced3df0e73d58963aa9484f0441a4f..c7de85ac8b44d072dac3d4b0e1ee5ea8bf66f6b0 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -266,6 +266,8 @@ public: // Capability std::string getRegionCapability(const std::string &name); // short hand for if (getRegion()) { getRegion()->getCapability(name) } + void regionChanged(); + /** * Register a boost callback to be called when the agent changes regions * Note that if you need to access a capability for the region, you may need to wait diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp index 5c0492ea488a59229c195bc444ef17fddbba741a..f232f08225fec82894e863092e152408ed39f688 100644 --- a/indra/newview/llenvmanager.cpp +++ b/indra/newview/llenvmanager.cpp @@ -734,3 +734,50 @@ void LLEnvManagerNew::onRegionChange() << LL_ENDL; } } + +class WindLightRefresh : public LLHTTPNode +{ + /*virtual*/ void post( + LLHTTPNode::ResponsePtr response, + const LLSD& context, + const LLSD& input) const + { + if (!input || !context || !input.isMap() || !input.has("body")) { + LL_INFOS() << "malformed WindLightRefresh!" << LL_ENDL; + return; + } + + //std::string dump = input["body"].asString(); + //LL_WARNS() << dump << LL_ENDL; + + LLSD body = input["body"]; + LLEnvManagerNew* env = LLEnvManagerNew::getInstance(); + + LLViewerRegion* regionp = gAgent.getRegion(); + LLUUID region_uuid = regionp ? regionp->getRegionID() : LLUUID::null; + + env->mNewRegionPrefs.clear(); + env->mCurRegionUUID = region_uuid; + + if(body.has("Interpolate")) { + if(body["Interpolate"].asInteger() == 1) { + env->mInterpNextChangeMessage = true; + } + else { + env->mInterpNextChangeMessage = false; + } + } + else { + env->mInterpNextChangeMessage = true; + } + LL_INFOS() << "Windlight Refresh , interpolate:" << env->mInterpNextChangeMessage << LL_ENDL; + env->requestRegionSettings(); + + // This causes the windlight editor and others to update since the windlight has changed! + gAgent.regionChanged(); + } +}; + +LLHTTPRegistration<WindLightRefresh> +gHTTPRegistrationWindLightRefresh( + "/message/WindLightRefresh"); diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h index 29b8dc15bd5db11daa22f9eae4f306ac0253b770..432c284b1cea44cbc20b1bd12fd2aa570e402a68 100644 --- a/indra/newview/llenvmanager.h +++ b/indra/newview/llenvmanager.h @@ -34,6 +34,7 @@ class LLWLParamManager; class LLWaterParamManager; class LLWLAnimator; +class WindLightRefresh; // generic key struct LLEnvKey @@ -324,6 +325,9 @@ private: bool useRegionSky(); bool useRegionWater(); +private: + friend class WindLightRefresh; + bool useDefaultSky(); bool useDefaultWater();