summaryrefslogtreecommitdiff
path: root/indra/llinventory/llsettingsdaycycle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llinventory/llsettingsdaycycle.cpp')
-rw-r--r--indra/llinventory/llsettingsdaycycle.cpp67
1 files changed, 40 insertions, 27 deletions
diff --git a/indra/llinventory/llsettingsdaycycle.cpp b/indra/llinventory/llsettingsdaycycle.cpp
index 51bc6b0e54..2c8bddee93 100644
--- a/indra/llinventory/llsettingsdaycycle.cpp
+++ b/indra/llinventory/llsettingsdaycycle.cpp
@@ -233,11 +233,13 @@ bool LLSettingsDay::initialize()
keyframe = llclamp(keyframe, 0.0f, 1.0f);
LLSettingsBase::ptr_t setting;
+
if ((*it).has(SETTING_KEYNAME))
{
+ std::string key_name = (*it)[SETTING_KEYNAME];
if (i == TRACK_WATER)
{
- setting = used[(*it)[SETTING_KEYNAME]];
+ setting = used[key_name];
if (setting && setting->getSettingsType() != "water")
{
LL_WARNS("DAYCYCLE") << "Water track referencing " << setting->getSettingsType() << " frame at " << keyframe << "." << LL_ENDL;
@@ -246,7 +248,7 @@ bool LLSettingsDay::initialize()
}
else
{
- setting = used[(*it)[SETTING_KEYNAME]];
+ setting = used[key_name];
if (setting && setting->getSettingsType() != "sky")
{
LL_WARNS("DAYCYCLE") << "Sky track #" << i << " referencing " << setting->getSettingsType() << " frame at " << keyframe << "." << LL_ENDL;
@@ -283,32 +285,51 @@ bool LLSettingsDay::initialize()
//=========================================================================
LLSD LLSettingsDay::defaults()
{
- LLSD dfltsetting;
+ static LLSD dfltsetting;
- dfltsetting[SETTING_NAME] = "_default_";
+ if (dfltsetting.size() == 0)
+ {
+ dfltsetting[SETTING_NAME] = "_default_";
+ dfltsetting[SETTING_TYPE] = "daycycle";
- LLSD waterTrack;
- waterTrack[SETTING_KEYKFRAME] = 0.0f;
- waterTrack[SETTING_KEYNAME] = "_default_";
+ LLSD frames(LLSD::emptyMap());
+ LLSD waterTrack;
+ LLSD skyTrack;
- LLSD skyTrack;
- skyTrack[SETTING_KEYKFRAME] = 0.0f;
- skyTrack[SETTING_KEYNAME] = "_default_";
+
+ const U32 FRAME_COUNT = 8;
+ const F32 FRAME_STEP = 1.0f / F32(FRAME_COUNT);
+ F32 time = 0.0f;
+ for (U32 i = 0; i < FRAME_COUNT; i++)
+ {
+ std::string name("_default_");
+ name += ('a' + i);
- LLSD tracks;
- tracks.append(LLSDArray(waterTrack));
- tracks.append(LLSDArray(skyTrack));
+ std::string water_frame_name("water:");
+ std::string sky_frame_name("sky:");
- dfltsetting[SETTING_TRACKS] = tracks;
+ water_frame_name += name;
+ sky_frame_name += name;
- LLSD frames(LLSD::emptyMap());
+ waterTrack[SETTING_KEYKFRAME] = time;
+ waterTrack[SETTING_KEYNAME] = water_frame_name;
- frames["water:_defaults_"] = LLSettingsWater::defaults();
- frames["sky:_defaults_"] = LLSettingsSky::defaults();
+ skyTrack[SETTING_KEYKFRAME] = time;
+ skyTrack[SETTING_KEYNAME] = sky_frame_name;
- dfltsetting[SETTING_FRAMES] = frames;
+ frames[water_frame_name] = LLSettingsWater::defaults(time);
+ frames[sky_frame_name] = LLSettingsSky::defaults(time);
- dfltsetting[SETTING_TYPE] = "daycycle";
+ time += FRAME_STEP;
+ }
+
+ LLSD tracks;
+ tracks.append(LLSDArray(waterTrack));
+ tracks.append(LLSDArray(skyTrack));
+
+ dfltsetting[SETTING_TRACKS] = tracks;
+ dfltsetting[SETTING_FRAMES] = frames;
+ }
return dfltsetting;
}
@@ -532,14 +553,6 @@ bool LLSettingsDay::moveTrackKeyframe(S32 trackno, const LLSettingsBase::TrackPo
CycleTrack_t::iterator iter = track.find(old_frame);
if (iter != track.end())
{
- /*TODO check that we are not moving too close to another keyframe */
-// CycleTrack_t::value_type existing = getSettingsNearKeyfarme(new_frame, trackno, 2.5f);
-// if ((*iter).first != existing.first)
-// {
-// LL_WARNS("DAYCYCLE") << "Track too close to existing track. Not moving." << LL_ENDL;
-// return false;
-// }
-
LLSettingsBase::ptr_t base = iter->second;
track.erase(iter);
track[llclamp(new_frame, 0.0f, 1.0f)] = base;