llwldaycycle.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llwldaycycle.cpp
  3.  * @brief Implementation for the LLWLDayCycle class.
  4.  *
  5.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2007-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "llviewerprecompiledheaders.h"
  33. #include "llwldaycycle.h"
  34. #include "llnotificationsutil.h"
  35. #include "llsdserialize.h"
  36. #include "llxmlnode.h"
  37. #include "llwlparammanager.h"
  38. #include <map>
  39. LLWLDayCycle::LLWLDayCycle() : mDayRate(120)
  40. {
  41. }
  42. LLWLDayCycle::~LLWLDayCycle()
  43. {
  44. }
  45. void LLWLDayCycle::loadDayCycle(const std::string & fileName)
  46. {
  47. // clear the first few things
  48. mTimeMap.clear();
  49. // now load the file
  50. std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, 
  51. "windlight/days", fileName));
  52. llinfos << "Loading DayCycle settings from " << pathName << llendl;
  53. llifstream day_cycle_xml(pathName);
  54. if (day_cycle_xml.is_open())
  55. {
  56. // load and parse it
  57. LLSD day_data(LLSD::emptyArray());
  58. LLPointer<LLSDParser> parser = new LLSDXMLParser();
  59. parser->parse(day_cycle_xml, day_data, LLSDSerialize::SIZE_UNLIMITED);
  60. // add each key
  61. for(S32 i = 0; i < day_data.size(); ++i)
  62. {
  63. // make sure it's a two array
  64. if(day_data[i].size() != 2)
  65. {
  66. continue;
  67. }
  68. // check each param name exists in param manager
  69. bool success;
  70. LLWLParamSet pset;
  71. success = LLWLParamManager::instance()->getParamSet(day_data[i][1].asString(), pset);
  72. if(!success)
  73. {
  74. // alert the user
  75. LLSD args;
  76. args["SKY"] = day_data[i][1].asString();
  77. LLNotificationsUtil::add("WLMissingSky", args);
  78. continue;
  79. }
  80. // then add the key
  81. addKey((F32)day_data[i][0].asReal(), day_data[i][1].asString());
  82. }
  83. day_cycle_xml.close();
  84. }
  85. }
  86. void LLWLDayCycle::saveDayCycle(const std::string & fileName)
  87. {
  88. LLSD day_data(LLSD::emptyArray());
  89. std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", fileName));
  90. //llinfos << "Saving WindLight settings to " << pathName << llendl;
  91. for(std::map<F32, std::string>::const_iterator mIt = mTimeMap.begin();
  92. mIt != mTimeMap.end();
  93. ++mIt) 
  94. {
  95. LLSD key(LLSD::emptyArray());
  96. key.append(mIt->first);
  97. key.append(mIt->second);
  98. day_data.append(key);
  99. }
  100. llofstream day_cycle_xml(pathName);
  101. LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
  102. formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);
  103. day_cycle_xml.close();
  104. }
  105. void LLWLDayCycle::clearKeys()
  106. {
  107. mTimeMap.clear();
  108. }
  109. bool LLWLDayCycle::addKey(F32 newTime, const std::string & paramName)
  110. {
  111. // no adding negative time
  112. if(newTime < 0) 
  113. {
  114. newTime = 0;
  115. }
  116. // if time not being used, add it and return true
  117. if(mTimeMap.find(newTime) == mTimeMap.end()) 
  118. {
  119. mTimeMap.insert(std::pair<F32, std::string>(newTime, paramName));
  120. return true;
  121. }
  122. // otherwise, don't add, and return error
  123. return false;
  124. }
  125. bool LLWLDayCycle::changeKeyTime(F32 oldTime, F32 newTime)
  126. {
  127. // just remove and add back
  128. std::string name = mTimeMap[oldTime];
  129. bool stat = removeKey(oldTime);
  130. if(stat == false) 
  131. {
  132. return stat;
  133. }
  134. return addKey(newTime, name);
  135. }
  136. bool LLWLDayCycle::changeKeyParam(F32 time, const std::string & name)
  137. {
  138. // just remove and add back
  139. // make sure param exists
  140. LLWLParamSet tmp;
  141. bool stat = LLWLParamManager::instance()->getParamSet(name, tmp);
  142. if(stat == false) 
  143. {
  144. return stat;
  145. }
  146. mTimeMap[time] = name;
  147. return true;
  148. }
  149. bool LLWLDayCycle::removeKey(F32 time)
  150. {
  151. // look for the time.  If there, erase it
  152. std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
  153. if(mIt != mTimeMap.end()) 
  154. {
  155. mTimeMap.erase(mIt);
  156. return true;
  157. }
  158. return false;
  159. }
  160. bool LLWLDayCycle::getKey(const std::string & name, F32& key)
  161. {
  162. // scroll through till we find the 
  163. std::map<F32, std::string>::iterator mIt = mTimeMap.begin();
  164. for(; mIt != mTimeMap.end(); ++mIt) 
  165. {
  166. if(name == mIt->second) 
  167. {
  168. key = mIt->first;
  169. return true;
  170. }
  171. }
  172. return false;
  173. }
  174. bool LLWLDayCycle::getKeyedParam(F32 time, LLWLParamSet& param)
  175. {
  176. // just scroll on through till you find it
  177. std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
  178. if(mIt != mTimeMap.end()) 
  179. {
  180. return LLWLParamManager::instance()->getParamSet(mIt->second, param);
  181. }
  182. // return error if not found
  183. return false;
  184. }
  185. bool LLWLDayCycle::getKeyedParamName(F32 time, std::string & name)
  186. {
  187. // just scroll on through till you find it
  188. std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
  189. if(mIt != mTimeMap.end()) 
  190. {
  191. name = mTimeMap[time];
  192. return true;
  193. }
  194. // return error if not found
  195. return false;
  196. }