SuitFosterDatamanager.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using ET;
  4. using UnityEngine;
  5. namespace GFGGame
  6. {
  7. public class SuitFosterDataManager : SingletonBase<SuitFosterDataManager>
  8. {
  9. public string[] stepNames = { "浆洗", "晾晒", "熏香", "熨烫", "整饬" };
  10. private Dictionary<int, SuitFosterData> _suitInfoBySuitIdDic = new Dictionary<int, SuitFosterData>();
  11. public void Clear()
  12. {
  13. _suitInfoBySuitIdDic.Clear();
  14. }
  15. public void InitServerData(SuitFosterData suitFosterData)
  16. {
  17. _suitInfoBySuitIdDic.Add(suitFosterData.suitId, suitFosterData);
  18. }
  19. public void SetMaintainSuit(int suitId, int maintainStep)
  20. {
  21. _suitInfoBySuitIdDic[suitId].maintainStep = maintainStep;
  22. // _suitInfoBySuitIdDic[suitId].maintainBonusSteps = maintainBonusSteps;
  23. EventAgent.DispatchEvent(ConstMessage.MAINTAIN_SUIT);
  24. }
  25. public void SetMaintainBonusSteps(int suitId, int maintainBonusSteps)
  26. {
  27. _suitInfoBySuitIdDic[suitId].maintainBonusSteps.Add(maintainBonusSteps);
  28. EventAgent.DispatchEvent(ConstMessage.GET_MAINTAIN_SUIT_BONUS, maintainBonusSteps);
  29. }
  30. public void SetMakeNewSuit(int suitId, int makeNewSuit)
  31. {
  32. _suitInfoBySuitIdDic[suitId].makeNewState = makeNewSuit;
  33. EventAgent.DispatchEvent(ConstMessage.MAKE_NEW_SUIT);
  34. }
  35. public SuitFosterData GetSuitFosterData(int suitId)
  36. {
  37. return _suitInfoBySuitIdDic.ContainsKey(suitId) ? _suitInfoBySuitIdDic[suitId] : new SuitFosterData() { suitId = suitId, maintainStep = 0, maintainBonusSteps = new List<int>(), makeNewState = 0 };
  38. }
  39. //加成属性服装占比
  40. public List<KeyValuePair<string, int>> GetPropertyPercentData(int suitId, int index)
  41. {
  42. SuitFosterCfg cfg = SuitFosterCfgArray.Instance.GetCfgs(suitId)[index];
  43. Dictionary<string, int> _data = new Dictionary<string, int>();
  44. int count = 0;
  45. for (int i = 0; i < cfg.partsArr.Length; i++)
  46. {
  47. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cfg.partsArr[i][0]);
  48. string type = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType).name;
  49. int num = 0;
  50. if (_data.ContainsKey(type))
  51. {
  52. num = _data[type];
  53. }
  54. num = num + cfg.partsArr[i][1];
  55. _data.Add(type, num);
  56. count += cfg.partsArr[i][1];
  57. }
  58. int percentCount = 0;
  59. int dicIndex = 0;
  60. ICollection keys = _data.Keys;
  61. Dictionary<string, int> _dataPercent = new Dictionary<string, int>();
  62. foreach (string key in keys)
  63. {
  64. if (dicIndex == _data.Count - 1)
  65. {
  66. _dataPercent.Add(key, 100 - percentCount);
  67. }
  68. else
  69. {
  70. _dataPercent.Add(key, Mathf.FloorToInt(_data[key] * 100 / count));
  71. }
  72. percentCount += _dataPercent[key];
  73. dicIndex++;
  74. }
  75. return new List<KeyValuePair<string, int>>(_dataPercent);
  76. }
  77. //获取当前阶段部件属性总值
  78. public void GetPropertyData(int suitId, int index, out SortedList _propertyData, out SortedList _addPropertyData)
  79. {
  80. SortedList propertyData = new SortedList();
  81. SortedList addPropertyData = new SortedList();
  82. int[][] partsArr = SuitFosterCfgArray.Instance.GetCfgs(suitId)[index].partsArr;
  83. for (int i = 0; i < partsArr.Length; i++)
  84. {
  85. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(partsArr[i][0]);
  86. for (int j = 0; j < ConstDressUpScoreType.scoreTypeList().Count; j++)
  87. {
  88. int score = j + 1;
  89. int count = ItemDataManager.GetScore(itemCfg.id, score);
  90. if (propertyData.ContainsKey(score))
  91. {
  92. count = count + (int)propertyData[score];
  93. propertyData[score] = count;
  94. }
  95. else
  96. {
  97. propertyData.Add(score, count);
  98. }
  99. int addCount = 0;
  100. if (score == itemCfg.mainScore)
  101. {
  102. addCount = partsArr[i][1];
  103. }
  104. if (addPropertyData.ContainsKey(score))
  105. {
  106. addCount = addCount + (int)addPropertyData[itemCfg.mainScore];
  107. }
  108. else
  109. {
  110. addPropertyData.Add(score, addCount);
  111. }
  112. }
  113. }
  114. _propertyData = propertyData;
  115. _addPropertyData = addPropertyData;
  116. }
  117. //0:已完成,1:养护中,2未养护
  118. public int GetFosterState(int suitId, int index)
  119. {
  120. SuitFosterData suitFosterData = this.GetSuitFosterData(suitId);
  121. if (index < suitFosterData.maintainStep)
  122. {
  123. return 0;
  124. }
  125. else if (index == suitFosterData.maintainStep)
  126. {
  127. return 1;
  128. }
  129. return 2;
  130. }
  131. public SortedList GetSuitFosterRewards(int suitId)
  132. {
  133. SuitFosterCfg[] cfg = SuitFosterCfgArray.Instance.GetCfgs(suitId);
  134. List<SuitFosterCfg> list = new List<SuitFosterCfg>(cfg);
  135. list = SortRewardList(list, suitId);
  136. SortedList sortedList = new SortedList();
  137. for (int i = 0; i < list.Count; i++)
  138. {
  139. if (list[i].rewardsArr.Length > 0)
  140. {
  141. sortedList.Add((i + 1), list[i]);
  142. }
  143. }
  144. return sortedList;
  145. }
  146. private List<SuitFosterCfg> SortRewardList(List<SuitFosterCfg> list, int suitId)
  147. {
  148. SuitFosterData fosterData = GetSuitFosterData(suitId);
  149. list.Sort((SuitFosterCfg a, SuitFosterCfg b) =>
  150. {
  151. int indexA = list.IndexOf(a) + 1;
  152. int indexB = list.IndexOf(b) + 1;
  153. if (fosterData.maintainBonusSteps.IndexOf(indexA) >= 0 && fosterData.maintainBonusSteps.IndexOf(indexB) < 0)
  154. {
  155. return -1;
  156. }
  157. else if (fosterData.maintainBonusSteps.IndexOf(indexA) < 0 && fosterData.maintainBonusSteps.IndexOf(indexB) >= 0)
  158. {
  159. return 1;
  160. }
  161. return 0;
  162. });
  163. return list;
  164. }
  165. //奖励领取状态
  166. public bool GetRewardState(int suitId, int step)
  167. {
  168. SuitFosterData fosterData = GetSuitFosterData(suitId);
  169. return fosterData.maintainBonusSteps.IndexOf(step) > 0;
  170. }
  171. //当前奖励状态:state 0:未领1:不可领2:已完成
  172. //当前奖励Index
  173. public void GetFosterRewardState(int suitId, out int state, out int index)
  174. {
  175. index = 0;
  176. SuitFosterData fosterData = GetSuitFosterData(suitId);
  177. int finishStep = fosterData.maintainStep;
  178. SuitFosterCfg[] cfg = SuitFosterCfgArray.Instance.GetCfgs(suitId);
  179. for (int i = 0; i < cfg.Length; i++)
  180. {
  181. if (cfg[i].rewardsArr.Length == 0) continue;
  182. index = i;
  183. int _step = i + 1;
  184. if (_step <= finishStep && fosterData.maintainBonusSteps.IndexOf(_step) < 0)
  185. {
  186. state = 0;
  187. return;
  188. }
  189. if (_step > finishStep)
  190. {
  191. state = 1;
  192. return;
  193. }
  194. }
  195. state = 2;
  196. }
  197. }
  198. }