pluginlocalprofile.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. class PluginLocalProfile extends PluginFileHandler
  2. {
  3. ref map<string, string> m_ConfigParams;
  4. ref map<string, ref TStringArray> m_ConfigParamsArray;
  5. ref map<string, ref map<string, string>> m_ConfigParamsInArray;
  6. ref map<string, ref array<ref map<string, string>>> m_ConfigParamsArrayInArray;
  7. void PluginLocalProfile()
  8. {
  9. m_ConfigParams = new map<string, string>;
  10. m_ConfigParamsArray = new map<string, ref TStringArray>;
  11. m_ConfigParamsInArray = new map<string, ref map<string, string>>;
  12. m_ConfigParamsArrayInArray = new map<string, ref array<ref map<string, string>>>;
  13. }
  14. override string GetFileName()
  15. {
  16. return CFG_FILE_USER_PROFILE;
  17. }
  18. override void OnInit()
  19. {
  20. super.OnInit();
  21. LoadConfigFile();
  22. }
  23. bool LoadConfigFile()
  24. {
  25. TStringArray file_content = GetFileContent();
  26. string line_content = "";
  27. string param_name = "";
  28. string param_value = "";
  29. TStringArray param_content;
  30. int pos_sep = -1;
  31. for ( int i = 0; i < file_content.Count(); ++i )
  32. {
  33. line_content = file_content.Get(i);
  34. param_content = ParseTextToParameter(line_content);
  35. if ( param_content.Count() == 0 )
  36. {
  37. PrintString(GetFileName()+"("+i.ToString()+"): Error in config -> Maybe missing '=' !");
  38. return false;
  39. }
  40. param_name = param_content.Get(0);
  41. param_value = param_content.Get(1);
  42. //{{name = apple, damage = 0.5, quantity = 2},{name = banana, damage = 0.5, quantity = 2}}
  43. TStringArray array_items = new TStringArray;
  44. ParseTextToArray(param_value, array_items);
  45. //{name = apple, damage = 0.5, quantity = 2}
  46. //{name = banana, damage = 0.5, quantity = 2}
  47. TStringArray array_content_raw = new TStringArray;
  48. if ( array_items.Count() > 0 )
  49. {
  50. m_ConfigParamsArray.Set(param_name, array_items);
  51. for ( int j = 0; j < array_items.Count(); ++j )
  52. {
  53. string array_content = array_items.Get(j);
  54. //{name = apple, damage = 0.5, quantity = 2}
  55. array_content_raw.Clear();
  56. ParseTextToArray(array_content, array_content_raw);
  57. //name = apple
  58. //damage = 0.5
  59. //quantity = 2
  60. if ( array_content_raw.Count() > 0 )
  61. {
  62. if ( !m_ConfigParamsArrayInArray.Contains(param_name) )
  63. {
  64. m_ConfigParamsArrayInArray.Set(param_name, new array<ref map<string, string>>);
  65. }
  66. array<ref map<string, string>> params_in_array = m_ConfigParamsArrayInArray.Get(param_name);
  67. map<string, string> parameters = new map<string, string>;
  68. for ( int k = 0; k < array_content_raw.Count(); ++k )
  69. {
  70. string params = array_content_raw.Get(k);
  71. TStringArray p = ParseTextToParameter(params);
  72. if ( p.Count() == 2 )
  73. {
  74. parameters.Set(p.Get(0), p.Get(1));
  75. }
  76. }
  77. params_in_array.Insert(parameters);
  78. }
  79. }
  80. }
  81. else
  82. {
  83. m_ConfigParams.Set(param_name, param_value);
  84. }
  85. }
  86. return true;
  87. }
  88. void SaveConfigToFile()
  89. {
  90. ClearFileNoSave();
  91. int i;
  92. int j;
  93. int k;
  94. string variable_name;
  95. string variable_value;
  96. string text;
  97. TStringArray variable_array;
  98. for ( i = 0; i < m_ConfigParams.Count(); ++i)
  99. {
  100. variable_name = m_ConfigParams.GetKey(i);
  101. variable_value = m_ConfigParams.GetElement(i);
  102. text = variable_name + " = " + variable_value;
  103. AddNewLineNoSave(text);
  104. }
  105. for ( i = 0; i < m_ConfigParamsArray.Count(); ++i)
  106. {
  107. variable_name = m_ConfigParamsArray.GetKey(i);
  108. variable_array = m_ConfigParamsArray.GetElement(i);
  109. if ( m_ConfigParamsArrayInArray.Contains(variable_name) )
  110. {
  111. continue;
  112. }
  113. text = variable_name + " = {";
  114. for ( j = 0; j < variable_array.Count(); ++j )
  115. {
  116. if ( j > 0 )
  117. {
  118. text += ",";
  119. }
  120. text += variable_array.Get(j);
  121. }
  122. text += "}";
  123. AddNewLineNoSave(text);
  124. }
  125. for ( i = 0; i < m_ConfigParamsArrayInArray.Count(); ++i)
  126. {
  127. variable_name = m_ConfigParamsArrayInArray.GetKey(i);
  128. array<ref map<string, string>> variable_param = m_ConfigParamsArrayInArray.GetElement(i);
  129. text = variable_name + " = {";
  130. if ( variable_param != NULL )
  131. {
  132. for ( j = 0; j < variable_param.Count(); ++j )
  133. {
  134. if ( j > 0 )
  135. {
  136. text += ",";
  137. }
  138. text += "{";
  139. map<string, string> params = variable_param.Get(j);
  140. for ( k = 0; k < params.Count(); ++k )
  141. {
  142. if ( k > 0 )
  143. {
  144. text += ",";
  145. }
  146. string param_name = params.GetKey(k);
  147. string param_value = params.GetElement(k);
  148. text += param_name+"="+param_value;
  149. }
  150. text += "}";
  151. }
  152. }
  153. text += "}";
  154. AddNewLineNoSave(text);
  155. }
  156. SaveFile();
  157. }
  158. bool IsTextArray(string text)
  159. {
  160. if ( text.Length() > 0 && text.Substring(0, 1) == "{" )
  161. {
  162. if ( text.Substring(text.Length() - 1, 1) == "}" )
  163. {
  164. return true;
  165. }
  166. }
  167. return false;
  168. }
  169. TStringArray ParseTextToParameter(string text)
  170. {
  171. TStringArray ret = new TStringArray;
  172. int pos = text.IndexOf("=");
  173. if ( pos > 0 )
  174. {
  175. string param_name = text.Substring(0, pos).Trim();
  176. int pos_end = text.Length() - pos;
  177. string param_value = text.Substring(pos + 1, pos_end - 1).Trim();
  178. int lenght = param_value.Length();
  179. if (lenght > 1 && param_value.Substring(0, 1) == "\"" && param_value.Substring(lenght - 1, 1) == "\"" )
  180. {
  181. param_value = param_value.Substring(1, lenght - 2);
  182. }
  183. ret.Insert(param_name);
  184. ret.Insert(param_value);
  185. }
  186. return ret;
  187. }
  188. TStringArray ParseTextToArray(string text, out TStringArray ret)
  189. {
  190. if ( !IsTextArray(text) )
  191. {
  192. return NULL;
  193. }
  194. text = text.Substring(1, text.Length() - 2);
  195. int pos_array_start = text.IndexOf("{");
  196. int pos_array_end = text.IndexOf("}");
  197. if ( pos_array_start > -1 && pos_array_end > -1 )
  198. {
  199. while ( true )
  200. {
  201. string array_value = text.Substring(pos_array_start , pos_array_end - pos_array_start + 1 );
  202. ret.Insert(array_value);
  203. pos_array_start = text.IndexOfFrom(pos_array_end, "{");
  204. pos_array_end = text.IndexOfFrom(pos_array_start, "}");
  205. if ( pos_array_start == -1 )
  206. {
  207. break;
  208. }
  209. }
  210. }
  211. else
  212. {
  213. text.Split(",", ret);
  214. }
  215. return ret;
  216. }
  217. array<ref map<string, string>> ParseTextArrayToParameters(string text)
  218. {
  219. TStringArray array_items = new TStringArray;
  220. ParseTextToArray(text, array_items);
  221. array<ref map<string, string>> ret = new array<ref map<string, string>>;
  222. map<string, string> ret_param = new map<string, string>;
  223. for ( int i = 0; i < array_items.Count(); ++i )
  224. {
  225. string param = array_items.Get(i);
  226. TStringArray t_param = ParseTextToParameter(param);
  227. string param_name = t_param.Get(0);
  228. string param_value = t_param.Get(1);
  229. ret_param.Set(param_name, param_value);
  230. }
  231. ret.Insert(ret_param);
  232. return ret;
  233. }
  234. string LoadParameter(string param_name)
  235. {
  236. string ret_value = STRING_EMPTY;
  237. if ( m_ConfigParams.Contains(param_name) )
  238. {
  239. ret_value = m_ConfigParams.Get(param_name);
  240. }
  241. return ret_value;
  242. }
  243. TStringArray LoadParameterArray(string param_name)
  244. {
  245. if ( m_ConfigParamsArray.Contains(param_name) )
  246. {
  247. return m_ConfigParamsArray.Get(param_name);
  248. }
  249. return NULL;
  250. }
  251. string LoadSubParameter(string param_name, int sub_array_index, string sub_param_name)
  252. {
  253. string ret_value = STRING_EMPTY;
  254. map<string, string> param;
  255. array<ref map<string, string>> sub_arrays;
  256. if ( m_ConfigParamsArrayInArray.Contains(param_name) )
  257. {
  258. sub_arrays = m_ConfigParamsArrayInArray.Get(param_name);
  259. if ( sub_arrays != NULL )
  260. {
  261. if ( sub_array_index < sub_arrays.Count() )
  262. {
  263. param = sub_arrays.Get(sub_array_index);
  264. if ( param.Contains(sub_param_name) )
  265. {
  266. ret_value = param.Get(sub_param_name);
  267. }
  268. }
  269. }
  270. }
  271. return ret_value;
  272. }
  273. void SaveParameter(string param_name, string value, bool save_in_file = true)
  274. {
  275. if ( param_name == "" || param_name == "scene_editor_scene" )
  276. {
  277. Log("SaveParameter: "+param_name+" = "+value, "");
  278. }
  279. m_ConfigParams.Set(param_name, value);
  280. if ( save_in_file )
  281. {
  282. SaveConfigToFile();
  283. }
  284. }
  285. void SaveParameterArray(string param_name, TStringArray value, bool save_in_file = true)
  286. {
  287. m_ConfigParamsArray.Set(param_name, value);
  288. if ( save_in_file )
  289. {
  290. SaveConfigToFile();
  291. }
  292. }
  293. void SaveSubParameterInArray(string param_name, int sub_array_index, string sub_param_name, string sub_param_value, bool save_in_file = true)
  294. {
  295. array<ref map<string, string>> sub_arrays = m_ConfigParamsArrayInArray.Get(param_name);
  296. map<string, string> sub_parameter = sub_arrays.Get(sub_array_index);
  297. sub_parameter.Set(sub_param_name, sub_param_value);
  298. if ( save_in_file )
  299. {
  300. SaveConfigToFile();
  301. }
  302. }
  303. void RenameParameter(string old_name, string new_name, bool save_in_file = true)
  304. {
  305. if ( m_ConfigParams.Contains(old_name) )
  306. {
  307. m_ConfigParams.ReplaceKey(old_name, new_name);
  308. if ( save_in_file )
  309. {
  310. SaveConfigToFile();
  311. }
  312. }
  313. }
  314. void RenameParameterArray(string old_name, string new_name, bool save_in_file = true)
  315. {
  316. if ( m_ConfigParamsArray.Contains(old_name) )
  317. {
  318. m_ConfigParamsArray.ReplaceKey(old_name, new_name);
  319. if ( save_in_file )
  320. {
  321. SaveConfigToFile();
  322. }
  323. }
  324. }
  325. void RemoveParameter(string name, bool save_in_file = true)
  326. {
  327. m_ConfigParams.Remove(name);
  328. if ( save_in_file )
  329. {
  330. SaveConfigToFile();
  331. }
  332. }
  333. void RemoveParameterArray(string name, bool save_in_file = true)
  334. {
  335. m_ConfigParamsArray.Remove(name);
  336. if ( save_in_file )
  337. {
  338. SaveConfigToFile();
  339. }
  340. }
  341. void SetParameterString(string name, string value, bool save_in_file = true)
  342. {
  343. string s = "\""+value+"\"";
  344. SaveParameter(name, s, save_in_file);
  345. }
  346. void SetParameterInt(string name, int value, bool save_in_file = true)
  347. {
  348. SaveParameter(name, value.ToString(), save_in_file);
  349. }
  350. void SetParameterFloat(string name, float value, bool save_in_file = true)
  351. {
  352. SaveParameter(name, value.ToString(), save_in_file);
  353. }
  354. void SetParameterBool(string name, bool value, bool save_in_file = true)
  355. {
  356. SaveParameter(name, value.ToString(), save_in_file);
  357. }
  358. void SetParameterArray(string name, TStringArray value, bool save_in_file = true)
  359. {
  360. SaveParameterArray(name, value, save_in_file);
  361. }
  362. void SetSubParameterInArray(string param_name, int sub_array_index, string sub_param_name, string sub_param_value, bool save_in_file = true)
  363. {
  364. SaveSubParameterInArray(param_name, sub_array_index, sub_param_name, sub_param_value, save_in_file);
  365. }
  366. string GetParameterString(string name)
  367. {
  368. string loaded_param = LoadParameter(name);
  369. string ret_value = STRING_EMPTY;
  370. if ( loaded_param != "" )
  371. {
  372. TStringArray arr = new TStringArray;
  373. loaded_param.Split("\"", arr);
  374. if ( arr.Count() > 0 )
  375. {
  376. ret_value = arr.Get(0);
  377. }
  378. }
  379. else
  380. {
  381. SetParameterString(name, ret_value);
  382. }
  383. return ret_value;
  384. }
  385. int GetParameterInt(string name)
  386. {
  387. string loaded_param = LoadParameter(name);
  388. int ret_value = 0;
  389. if ( loaded_param != "" )
  390. {
  391. ret_value = loaded_param.ToInt();
  392. }
  393. else
  394. {
  395. SetParameterInt(name, ret_value);
  396. }
  397. return ret_value;
  398. }
  399. float GetParameterFloat(string name)
  400. {
  401. string loaded_param = LoadParameter(name);
  402. float ret_value = 0;
  403. if ( loaded_param != "" )
  404. {
  405. ret_value = loaded_param.ToFloat();
  406. }
  407. else
  408. {
  409. SetParameterFloat(name, ret_value);
  410. }
  411. return ret_value;
  412. }
  413. bool GetParameterBool(string name)
  414. {
  415. string loaded_param = LoadParameter(name);
  416. bool ret_value = false;
  417. if ( loaded_param != "" )
  418. {
  419. int v = loaded_param.ToInt();
  420. if ( v == 1 )
  421. {
  422. ret_value = true;
  423. }
  424. }
  425. else
  426. {
  427. SetParameterBool(name, ret_value);
  428. }
  429. return ret_value;
  430. }
  431. TStringArray GetParameterArray(string name)
  432. {
  433. TStringArray ret_value;
  434. if ( m_ConfigParamsArray.Contains(name) )
  435. {
  436. ret_value = m_ConfigParamsArray.Get(name);
  437. }
  438. else
  439. {
  440. ret_value = new TStringArray;
  441. SetParameterArray(name, ret_value);
  442. }
  443. return ret_value;
  444. }
  445. string GetSubParameterInArrayString(string param_name, int sub_array_index, string sub_param_name)
  446. {
  447. string loaded_param = LoadSubParameter(param_name, sub_array_index, sub_param_name);
  448. string ret_value = STRING_EMPTY;
  449. TStringArray arr = new TStringArray;
  450. if ( loaded_param != "" )
  451. {
  452. arr.Clear();
  453. loaded_param.Split("\"", arr);
  454. ret_value = arr.Get(1);
  455. }
  456. return ret_value;
  457. }
  458. TStringArray GetAllSubParametersInArrayString(string param_name, string sub_param_name)
  459. {
  460. TStringArray ret_value = NULL;
  461. if ( m_ConfigParamsArrayInArray.Contains(param_name) )
  462. {
  463. ret_value = new TStringArray;
  464. array<ref map<string, string>> arrays_in_parameter = m_ConfigParamsArrayInArray.Get(param_name);
  465. for ( int i = 0; i < arrays_in_parameter.Count(); ++i )
  466. {
  467. map<string, string> sub_parameter = arrays_in_parameter.Get(i);
  468. string sub_param = STRING_EMPTY;
  469. if ( sub_parameter.Contains(sub_param_name) )
  470. {
  471. sub_param = sub_parameter.Get(sub_param_name);
  472. }
  473. ret_value.Insert(sub_param);
  474. }
  475. }
  476. return ret_value;
  477. }
  478. }