diff options
Diffstat (limited to 'indra/llinventory/llsettingsdaycycle.cpp')
| -rw-r--r-- | indra/llinventory/llsettingsdaycycle.cpp | 67 |
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; |
