summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llfloaterregioninfo.cpp50
-rw-r--r--indra/newview/llfloaterregioninfo.h8
-rw-r--r--indra/newview/llregioninfomodel.cpp15
-rw-r--r--indra/newview/llregioninfomodel.h4
-rw-r--r--indra/newview/llviewermessage.cpp4
5 files changed, 74 insertions, 7 deletions
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index b6339387a9..59a996b2ed 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -2994,6 +2994,8 @@ bool LLDispatchEstateUpdateInfo::operator()(
const LLUUID& invoice,
const sparam_t& strings)
{
+ lldebugs << "Received estate update" << llendl;
+
LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
if (!panel) return true;
@@ -3020,10 +3022,13 @@ bool LLDispatchEstateUpdateInfo::operator()(
F32 sun_hour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
if(sun_hour == 0 && (flags & REGION_FLAGS_SUN_FIXED ? FALSE : TRUE))
{
+ // no need to overwrite region sun phase?
+ lldebugs << "Estate uses global time" << llendl;
panel->setGlobalTime(TRUE);
}
else
{
+ lldebugs << "Estate sun hour: " << sun_hour << llendl;
panel->setGlobalTime(FALSE);
panel->setSunHour(sun_hour);
}
@@ -3355,6 +3360,33 @@ void LLPanelEnvironmentInfo::setDirty(bool dirty)
getChildView("cancel_btn")->setEnabled(dirty);
}
+void LLPanelEnvironmentInfo::sendRegionSunUpdate(F32 sun_angle)
+{
+ LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
+ bool region_use_fixed_sky = sun_angle >= 0.f;
+
+ // Set sun hour.
+ if (region_use_fixed_sky)
+ {
+ LLWLParamSet param_set;
+ LLSD params;
+ std::string unused;
+ if (!getSelectedSkyParams(params, unused))
+ {
+ return;
+ }
+ param_set.setAll(params);
+
+ // convert value range from 0..2pi to 6..30
+ region_info.mSunHour = fmodf((sun_angle / F_TWO_PI) * 24.f, 24.f) + 6.f;
+ }
+
+ region_info.setUseFixedSun(region_use_fixed_sky);
+ region_info.mUseEstateSun = !region_use_fixed_sky;
+
+ region_info.sendRegionTerrain(LLFloaterRegionInfo::getLastInvoice());
+}
+
void LLPanelEnvironmentInfo::populateWaterPresetsList()
{
mWaterPresetCombo->removeall();
@@ -3634,6 +3666,7 @@ void LLPanelEnvironmentInfo::onBtnApply()
LLSD day_cycle;
LLSD sky_map;
LLSD water_params;
+ F32 sun_angle = -1.f; // invalid value meaning no fixed sky
if (use_defaults)
{
@@ -3666,6 +3699,9 @@ void LLPanelEnvironmentInfo::onBtnApply()
param_set.setAll(params);
refs[LLWLParamKey(preset_name, LLEnvKey::SCOPE_LOCAL)] = param_set; // scope doesn't matter here
sky_map = LLWLParamManager::createSkyMap(refs);
+
+ // Remember the sun angle to set fixed region sun hour below.
+ sun_angle = param_set.getSunAngle();
}
else // use day cycle
{
@@ -3686,6 +3722,16 @@ void LLPanelEnvironmentInfo::onBtnApply()
LL_DEBUGS("Windlight") << "Fixing negative time" << LL_ENDL;
day_cycle[0][0] = 0.0f;
}
+
+ // If the day cycle contains exactly one preset (i.e it's effectively a fixed sky),
+ // remember the preset's sun angle to set fixed region sun hour below.
+ if (sky_map.size() == 1)
+ {
+ LLWLParamSet param_set;
+ llassert(sky_map.isMap());
+ param_set.setAll(sky_map.beginMap()->second);
+ sun_angle = param_set.getSunAngle();
+ }
}
// Get water params.
@@ -3705,6 +3751,10 @@ void LLPanelEnvironmentInfo::onBtnApply()
return;
}
+ // Set the region sun phase/flags according to the chosen new preferences.
+ sendRegionSunUpdate(sun_angle);
+
+ // Start spinning the progress indicator.
setApplyProgress(true);
}
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 6075842e76..810a71f463 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -328,10 +328,10 @@ public:
BOOL getGlobalTime();
void setGlobalTime(bool b);
- BOOL getFixedSun();
+ BOOL getFixedSun(); // *TODO: deprecated
- F32 getSunHour();
- void setSunHour(F32 sun_hour);
+ F32 getSunHour(); // *TODO: deprecated
+ void setSunHour(F32 sun_hour); // *TODO: deprecated
const std::string getEstateName() const;
void setEstateName(const std::string& name);
@@ -450,6 +450,8 @@ private:
void setApplyProgress(bool started);
void setDirty(bool dirty);
+ void sendRegionSunUpdate(F32 sun_angle);
+
void populateWaterPresetsList();
void populateSkyPresetsList();
void populateDayCyclesList();
diff --git a/indra/newview/llregioninfomodel.cpp b/indra/newview/llregioninfomodel.cpp
index e1ef57f8e9..6238f183c1 100644
--- a/indra/newview/llregioninfomodel.cpp
+++ b/indra/newview/llregioninfomodel.cpp
@@ -122,6 +122,18 @@ bool LLRegionInfoModel::getUseFixedSun() const
return mRegionFlags & REGION_FLAGS_SUN_FIXED;
}
+void LLRegionInfoModel::setUseFixedSun(bool fixed)
+{
+ if (fixed)
+ {
+ mRegionFlags |= REGION_FLAGS_SUN_FIXED;
+ }
+ else
+ {
+ mRegionFlags &= ~REGION_FLAGS_SUN_FIXED;
+ }
+}
+
void LLRegionInfoModel::update(LLMessageSystem* msg)
{
reset();
@@ -192,8 +204,9 @@ void LLRegionInfoModel::sendEstateOwnerMessage(
{
std::vector<std::string>::const_iterator it = strings.begin();
std::vector<std::string>::const_iterator end = strings.end();
- for (; it != end; ++it)
+ for (unsigned i = 0; it != end; ++it, ++i)
{
+ lldebugs << "- [" << i << "] " << (*it) << llendl;
msg->nextBlock("ParamList");
msg->addString("Parameter", *it);
}
diff --git a/indra/newview/llregioninfomodel.h b/indra/newview/llregioninfomodel.h
index cbb5e5210a..89efd82767 100644
--- a/indra/newview/llregioninfomodel.h
+++ b/indra/newview/llregioninfomodel.h
@@ -46,6 +46,8 @@ public:
bool getUseFixedSun() const;
+ void setUseFixedSun(bool fixed);
+
// *TODO: Add getters and make the data private.
U8 mSimAccess;
U8 mAgentLimit;
@@ -63,7 +65,7 @@ public:
F32 mWaterHeight;
F32 mTerrainRaiseLimit;
F32 mTerrainLowerLimit;
- F32 mSunHour;
+ F32 mSunHour; // 6..30
BOOL mUseEstateSun;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index f6b01e92cb..9f7559ad15 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4265,8 +4265,8 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
- //LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
- // << ", " << phase << LL_ENDL;
+ LL_DEBUGS("Windlight Sync") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
+ << ", " << phase << LL_ENDL;
gSky.setSunPhase(phase);
gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);