DressUpMenuSuitDataManager.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using cfg.GfgCfg;
  5. using ET;
  6. namespace GFGGame
  7. {
  8. public class DressUpMenuSuitDataManager
  9. {
  10. private static List<int> _suitIDList = new List<int>();
  11. private static List<int> _actionIDList; //拥有的特殊动作列表列表
  12. private static List<int> _travelSuitIDList; //拥有的游历套装列表
  13. public static int chooseClothing = 0; //服裝合成选择合成第几件衣服
  14. public static List<int> TravelSuitIDList
  15. {
  16. get
  17. {
  18. if (_travelSuitIDList == null)
  19. {
  20. InitTravelSuitIDList();
  21. }
  22. return _travelSuitIDList;
  23. }
  24. }
  25. //套装当前的进度
  26. private static Dictionary<int, int> _progressBySuitIdDic = new Dictionary<int, int>();
  27. private static Dictionary<int, int> _suitGuideBoxBonusStatus = new Dictionary<int, int>();
  28. private static Dictionary<int, int> _suitSyntheticBoxBonusStatus = new Dictionary<int, int>();
  29. public static Dictionary<int, int> _suitSyntheticRewardStatus = new Dictionary<int, int>();
  30. public static void InitData()
  31. {
  32. _suitIDList.Clear();
  33. _travelSuitIDList = null;
  34. _progressBySuitIdDic.Clear();
  35. _actionIDList = null;
  36. }
  37. public static void SetSuitInfo(List<SuitInfoProto> suitInfoList)
  38. {
  39. if (suitInfoList != null)
  40. {
  41. _suitGuideBoxBonusStatus.Clear();
  42. _suitSyntheticBoxBonusStatus.Clear();
  43. _suitSyntheticRewardStatus.Clear();
  44. foreach (SuitInfoProto suitInfo in suitInfoList)
  45. {
  46. SuitFosterData suitFosterData = new SuitFosterData()
  47. {
  48. suitId = suitInfo.SuitId,
  49. maintainStep = suitInfo.MaintainStep,
  50. maintainBonusSteps = suitInfo.MaintainBonusSteps,
  51. makeNewState = suitInfo.MakeNewState
  52. };
  53. SuitFosterDataManager.Instance.InitServerData(suitFosterData);
  54. //图鉴
  55. _suitGuideBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.GuideBoxBonusState);
  56. //合成
  57. _suitSyntheticBoxBonusStatus.Add(suitInfo.SuitId, suitInfo.SyntheticBoxBonusState);
  58. //套装合成奖励2
  59. _suitSyntheticRewardStatus.Add(suitInfo.SuitId, suitInfo.BringTogetherRewardStatus);
  60. _progressBySuitIdDic[suitInfo.SuitId] = suitInfo.PartsCount;
  61. if (suitInfo.CollectedAll)
  62. {
  63. Add(suitInfo.SuitId);
  64. }
  65. }
  66. EventAgent.DispatchEvent(ConstMessage.GET_SUIT_INFOS);
  67. }
  68. }
  69. public static void Add(int value)
  70. {
  71. if (!_suitIDList.Contains(value))
  72. {
  73. _suitIDList.Add(value);
  74. TryAddTravelSuitID(value);
  75. TryAddActionID(value);
  76. }
  77. }
  78. public static void Remove(int value)
  79. {
  80. if (_suitIDList.Contains(value))
  81. {
  82. _suitIDList.Remove(value);
  83. TravelSuitCfg travelSuitCfg = CommonDataManager.Tables.TblTravelSuitCfg.GetGroup1BySuitId(value)[0];
  84. if (travelSuitCfg != null
  85. && _travelSuitIDList != null
  86. && _travelSuitIDList.Contains(travelSuitCfg.Id))
  87. {
  88. _travelSuitIDList.Remove(travelSuitCfg.Id);
  89. }
  90. if (_actionIDList != null
  91. && SuitCfgArray.Instance.CheckSuitHasAction(value)
  92. && _actionIDList.Contains(value))
  93. {
  94. _actionIDList.Remove(travelSuitCfg.Id);
  95. }
  96. }
  97. }
  98. public static void GetTotalProgress(out int count, out int totalCount)
  99. {
  100. totalCount = CommonDataManager.Tables.TblItemCfg
  101. .GetGroup1ByItemType(ConstItemType.DRESS_UP)
  102. .Count(a => a.SuitId != 0);
  103. count = 0;
  104. foreach (KeyValuePair<int, int> item in _progressBySuitIdDic)
  105. {
  106. if (item.Key == 210000)
  107. {
  108. continue;
  109. }
  110. count += item.Value;
  111. }
  112. }
  113. public static void GetSuitProgressBySuitId(int suitId, out int count, out int totalCount)
  114. {
  115. if (suitId > 0)
  116. {
  117. if (_progressBySuitIdDic.ContainsKey(suitId))
  118. {
  119. count = _progressBySuitIdDic[suitId];
  120. }
  121. else
  122. {
  123. count = 0;
  124. }
  125. totalCount = SuitCfgArray.Instance.GetTotalCountOfOneSuit(suitId);
  126. }
  127. else
  128. {
  129. count = 0;
  130. totalCount = 1;
  131. }
  132. }
  133. public static float GetSuitProgressValueBySuitId(int suitId)
  134. {
  135. int count = 0;
  136. int totalCount = 1;
  137. GetSuitProgressBySuitId(suitId, out count, out totalCount);
  138. return (float)count / totalCount;
  139. }
  140. public static bool CheckHaveSuit(int suitId)
  141. {
  142. return _suitIDList.Contains(suitId);
  143. }
  144. public static void CheckItemInSuit(int itemId)
  145. {
  146. int suitId = SuitCfgArray.Instance.GetSuitIdOfItem(itemId);
  147. if (suitId > 0)
  148. {
  149. SuitCfg suitCfg = CommonDataManager.Tables.TblSuitCfg.GetOrDefault(suitId);
  150. int[] itemIds = SuitCfgArray.Instance.GetSuitItems(suitId);
  151. int totalCount = itemIds.Length;
  152. bool hasAll = true;
  153. int count = 0;
  154. for (int i = 0; i < totalCount; i++)
  155. {
  156. int tempItemId = itemIds[i];
  157. bool hasItem = DressUpMenuItemDataManager.CheckHasItem(tempItemId);
  158. if (!hasItem)
  159. {
  160. hasAll = false;
  161. }
  162. else
  163. {
  164. count++;
  165. }
  166. }
  167. _progressBySuitIdDic[suitId] = count;
  168. if (hasAll)
  169. {
  170. Add(suitId);
  171. }
  172. GetSuitItemController.AddItemId(itemId);
  173. }
  174. }
  175. public static List<int> GetSuitIDList()
  176. {
  177. return (List<int>)_suitIDList.GetRange(0, _suitIDList.Count);
  178. }
  179. public static List<int> GetActionIDList()
  180. {
  181. if (_actionIDList == null)
  182. {
  183. InitActionIDList();
  184. }
  185. return _actionIDList;
  186. }
  187. public static int GetSuitGuideBonusStatus(int suitId)
  188. {
  189. int status = ConstBonusStatus.CAN_NOT_GET;
  190. if (_suitGuideBoxBonusStatus.ContainsKey(suitId))
  191. {
  192. status = _suitGuideBoxBonusStatus[suitId];
  193. }
  194. if (status == ConstBonusStatus.CAN_NOT_GET) //游戏过程中收集完成套装,不会有奖励可领状态不会有推送,需要前端判断
  195. {
  196. if (CheckHaveSuit(suitId))
  197. {
  198. status = ConstBonusStatus.CAN_GET;
  199. }
  200. }
  201. return status;
  202. }
  203. public static void SetSuitGuideBoxBonusCompleted(int suitId)
  204. {
  205. _suitGuideBoxBonusStatus[suitId] = ConstBonusStatus.GOT;
  206. EventAgent.DispatchEvent(ConstMessage.SUIT_BOX_STATUS_CHANGED, suitId);
  207. }
  208. public static int GetSuitSyntheticBonusStatus(int suitId)
  209. {
  210. int status = ConstBonusStatus.CAN_NOT_GET;
  211. if (_suitSyntheticBoxBonusStatus.ContainsKey(suitId))
  212. {
  213. status = _suitSyntheticBoxBonusStatus[suitId];
  214. }
  215. if (status == ConstBonusStatus.CAN_NOT_GET)
  216. {
  217. if (CheckHaveSuit(suitId))
  218. {
  219. status = ConstBonusStatus.CAN_GET;
  220. }
  221. }
  222. return status;
  223. }
  224. public static void SetSuitSyntheticBoxBonusCompleted(int suitId)
  225. {
  226. _suitSyntheticBoxBonusStatus[suitId] = ConstBonusStatus.GOT;
  227. EventAgent.DispatchEvent(ConstMessage.SUIT_BOX_STATUS_CHANGED, suitId);
  228. }
  229. //套装集齐奖励2
  230. public static void SetSuitSyntheticRewardStatus(int suitId)
  231. {
  232. if (_suitSyntheticRewardStatus.ContainsKey(suitId))
  233. {
  234. _suitSyntheticRewardStatus[suitId] = ConstBonusStatus.GOT;
  235. }
  236. }
  237. public static int GetSuitSyntheticRewardStatus(int suitId)
  238. {
  239. int status = ConstBonusStatus.CAN_NOT_GET;
  240. if (_suitSyntheticRewardStatus.ContainsKey(suitId))
  241. {
  242. status = _suitSyntheticRewardStatus[suitId];
  243. }
  244. if (status == ConstBonusStatus.CAN_NOT_GET)
  245. {
  246. if (CheckHaveSuit(suitId))
  247. {
  248. status = ConstBonusStatus.CAN_GET;
  249. }
  250. }
  251. return status;
  252. }
  253. //检查套装是否有动作资源
  254. public static bool CheckSuitHasActionRes(int suitId)
  255. {
  256. var suitCfg = CommonDataManager.Tables.TblSuitCfg.GetOrDefault(suitId);
  257. return suitCfg != null && ResPathUtil.CheckDressUpAnimationResExist(suitCfg.AniRes);
  258. }
  259. private static void InitActionIDList()
  260. {
  261. _actionIDList = new List<int>();
  262. foreach (var t in _suitIDList)
  263. {
  264. TryAddActionID(t);
  265. }
  266. }
  267. private static void TryAddActionID(int value)
  268. {
  269. if (_actionIDList == null)
  270. {
  271. return;
  272. }
  273. if (SuitCfgArray.Instance.CheckSuitHasAction(value))
  274. {
  275. _actionIDList.Add(value);
  276. }
  277. }
  278. private static void InitTravelSuitIDList()
  279. {
  280. _travelSuitIDList = new List<int>();
  281. foreach (var t in _suitIDList)
  282. {
  283. TryAddTravelSuitID(t);
  284. }
  285. }
  286. private static void TryAddTravelSuitID(int value)
  287. {
  288. if (_travelSuitIDList == null)
  289. {
  290. return;
  291. }
  292. TravelSuitCfg travelSuitCfg = CommonDataManager.Tables.TblTravelSuitCfg.GetGroup1BySuitId(value)[0];
  293. if (travelSuitCfg != null)
  294. {
  295. _travelSuitIDList.Add(travelSuitCfg.Id);
  296. }
  297. }
  298. }
  299. }