EquipDataCache.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System.Collections.Generic;
  2. namespace GFGGame
  3. {
  4. public class EquipDataCache
  5. {
  6. private static DressUpObjDataCache _cacher;
  7. public static DressUpObjDataCache cacher
  8. {
  9. get
  10. {
  11. if(_cacher == null)
  12. {
  13. _cacher = new DressUpObjDataCache();
  14. }
  15. return _cacher;
  16. }
  17. }
  18. public static CustomSuitData GetCurSuitData(int index)
  19. {
  20. CustomSuitData suitSavedData = new CustomSuitData(index);
  21. suitSavedData.EquipData = EquipDataCache.cacher.GetEquiptDataClone();
  22. return suitSavedData;
  23. }
  24. /// <summary>
  25. /// 检测是否穿戴完整(穿着连衣裙或同时穿着上装下装)
  26. /// </summary>
  27. /// <returns></returns>
  28. public static bool CheckPutOnFinish()
  29. {
  30. if (EquipDataCache.cacher.suitId > 0) return true;
  31. List<int> equipDatas = EquipDataCache.cacher.equipDatas;
  32. bool isLianYiQun = false;
  33. bool isShangYi = false;
  34. bool isXiaZhuang = false;
  35. for (int i = 0; i < equipDatas.Count; i++)
  36. {
  37. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(equipDatas[i]);
  38. if (itemCfg.subType == ConstDressUpItemType.LIAN_YI_QUN && itemCfg.id != ConstItemID.DEFULT_LIAN_YI_QUN)
  39. {
  40. isLianYiQun = true; break;
  41. }
  42. if (itemCfg.subType == ConstDressUpItemType.SHANG_YI && itemCfg.id != ConstItemID.DEFULT_NEI_DA)
  43. {
  44. isShangYi = true;
  45. }
  46. if (itemCfg.subType == ConstDressUpItemType.XIA_ZHUANG && itemCfg.id != ConstItemID.DEFULT_XIA_ZHUANG)
  47. {
  48. isXiaZhuang = true;
  49. }
  50. }
  51. return isLianYiQun || isXiaZhuang && isShangYi;
  52. }
  53. public static bool CheckEquipedFightNeeded()
  54. {
  55. StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId);
  56. StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID);
  57. if (fightCfg.needItemId > 0)
  58. {
  59. return cacher.CheckDressUpItemIsOn(fightCfg.needItemId);
  60. }
  61. else if (fightCfg.needSuitId > 0)
  62. {
  63. return cacher.CheckSuitIsOn(fightCfg.needSuitId);
  64. }
  65. return true;
  66. }
  67. public static void PutOnRecommendItems()
  68. {
  69. List<int> recommendList = DressUpMenuItemDataManager.GetRecommendItemList();
  70. StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId);
  71. StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID);
  72. int liangyiqunIndex = -1;
  73. int shangyiIndex = -1;
  74. int xiazhuangIndex = -1;
  75. int neidaIndex = -1;
  76. for (int i = 0; i < recommendList.Count; i++)
  77. {
  78. int subType = ItemUtilCS.GetItemSubType(recommendList[i]);
  79. if (subType == ConstDressUpItemType.LIAN_YI_QUN)
  80. {
  81. liangyiqunIndex = i;
  82. continue;
  83. }
  84. if (subType == ConstDressUpItemType.SHANG_YI)
  85. {
  86. shangyiIndex = i;
  87. continue;
  88. }
  89. if (subType == ConstDressUpItemType.XIA_ZHUANG)
  90. {
  91. xiazhuangIndex = i;
  92. continue;
  93. }
  94. if (subType == ConstDressUpItemType.NEI_DA)
  95. {
  96. neidaIndex = i;
  97. continue;
  98. }
  99. }
  100. if (liangyiqunIndex >= 0 && (shangyiIndex >= 0 || xiazhuangIndex >= 0))
  101. {
  102. if (shangyiIndex < 0 && xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);//上衣下装只有一件,则保留连衣裙
  103. if (xiazhuangIndex < 0 && shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
  104. if (shangyiIndex >= 0 && xiazhuangIndex >= 0)//同时拥有上衣、下装、连衣裙
  105. {
  106. int lianyiqunScore = ItemDataManager.GetItemAdditionScore(recommendList[liangyiqunIndex], InstanceZonesDataManager.currentScoreType);
  107. int shangyiScore = ItemDataManager.GetItemAdditionScore(recommendList[shangyiIndex], InstanceZonesDataManager.currentScoreType);
  108. int xiazhuangScore = ItemDataManager.GetItemAdditionScore(recommendList[xiazhuangIndex], InstanceZonesDataManager.currentScoreType);
  109. int neidaScore = neidaIndex >= 0 ? ItemDataManager.GetItemAdditionScore(recommendList[neidaIndex], InstanceZonesDataManager.currentScoreType) : 0;
  110. int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
  111. if (fightCfg.needItemId > 0 && recommendList.IndexOf(fightCfg.needItemId) >= 0 && (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA || subType == ConstDressUpItemType.LIAN_YI_QUN))//推荐列表里有必需品且,必需品类型为上衣或下装或连衣裙,有先穿戴必须品,其次穿戴高分服装
  112. {
  113. if (subType == ConstDressUpItemType.LIAN_YI_QUN)
  114. {
  115. shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
  116. if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
  117. xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
  118. if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
  119. neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
  120. if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
  121. }
  122. else if (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA)
  123. {
  124. liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
  125. if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
  126. }
  127. }
  128. else
  129. {
  130. if (lianyiqunScore > shangyiScore + xiazhuangScore + neidaScore)
  131. {
  132. shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
  133. if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
  134. xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
  135. if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
  136. neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
  137. if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
  138. }
  139. else
  140. {
  141. liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
  142. if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
  143. }
  144. }
  145. }
  146. }
  147. //推荐搭配自动穿必穿品
  148. if (fightCfg.needItemId > 0 && DressUpMenuItemDataManager.CheckHasItem(fightCfg.needItemId) && recommendList.IndexOf(fightCfg.needItemId) < 0)
  149. {
  150. int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
  151. for (int i = 0; i < recommendList.Count; i++)
  152. {
  153. int recommendSubType = ItemUtilCS.GetItemSubType(recommendList[i]);
  154. if (recommendSubType == subType)
  155. {
  156. recommendList.RemoveAt(i);
  157. break;
  158. }
  159. }
  160. recommendList.Add(fightCfg.needItemId);
  161. }
  162. else if (fightCfg.needSuitId > 0 && DressUpMenuSuitDataManager.CheckHaveSuit(fightCfg.needSuitId))
  163. {
  164. recommendList.Clear();
  165. SuitCfg cfg = SuitCfgArray.Instance.GetCfg(fightCfg.needSuitId);
  166. recommendList.AddRange(cfg.partsArr);
  167. }
  168. cacher.PutOnItemList(recommendList);
  169. }
  170. private static int CheckIndex(int _subType, List<int> recommendList)
  171. {
  172. for (int i = 0; i < recommendList.Count; i++)
  173. {
  174. int itemSubType = ItemUtilCS.GetItemSubType(recommendList[i]);
  175. if (itemSubType == _subType)
  176. {
  177. return i;
  178. }
  179. }
  180. return -1;
  181. }
  182. }
  183. }