using System.Collections.Generic; namespace GFGGame { public class EquipDataCache { private static DressUpObjDataCache _cacher; public static DressUpObjDataCache cacher { get { if(_cacher == null) { _cacher = new DressUpObjDataCache(); } return _cacher; } } public static CustomSuitData GetCurSuitData(int index) { CustomSuitData suitSavedData = new CustomSuitData(index); suitSavedData.EquipData = EquipDataCache.cacher.GetEquiptDataClone(); return suitSavedData; } /// /// 检测是否穿戴完整(穿着连衣裙或同时穿着上装下装) /// /// public static bool CheckPutOnFinish() { if (EquipDataCache.cacher.suitId > 0) return true; List equipDatas = EquipDataCache.cacher.equipDatas; bool isLianYiQun = false; bool isShangYi = false; bool isXiaZhuang = false; for (int i = 0; i < equipDatas.Count; i++) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(equipDatas[i]); if (itemCfg.subType == ConstDressUpItemType.LIAN_YI_QUN && itemCfg.id != ConstItemID.DEFULT_LIAN_YI_QUN) { isLianYiQun = true; break; } if (itemCfg.subType == ConstDressUpItemType.SHANG_YI && itemCfg.id != ConstItemID.DEFULT_NEI_DA) { isShangYi = true; } if (itemCfg.subType == ConstDressUpItemType.XIA_ZHUANG && itemCfg.id != ConstItemID.DEFULT_XIA_ZHUANG) { isXiaZhuang = true; } } return isLianYiQun || isXiaZhuang && isShangYi; } public static bool CheckEquipedFightNeeded() { StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); if (fightCfg.needItemId > 0) { return cacher.CheckDressUpItemIsOn(fightCfg.needItemId); } else if (fightCfg.needSuitId > 0) { return cacher.CheckSuitIsOn(fightCfg.needSuitId); } return true; } public static void PutOnRecommendItems() { List recommendList = DressUpMenuItemDataManager.GetRecommendItemList(); StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); int liangyiqunIndex = -1; int shangyiIndex = -1; int xiazhuangIndex = -1; int neidaIndex = -1; for (int i = 0; i < recommendList.Count; i++) { int subType = ItemUtilCS.GetItemSubType(recommendList[i]); if (subType == ConstDressUpItemType.LIAN_YI_QUN) { liangyiqunIndex = i; continue; } if (subType == ConstDressUpItemType.SHANG_YI) { shangyiIndex = i; continue; } if (subType == ConstDressUpItemType.XIA_ZHUANG) { xiazhuangIndex = i; continue; } if (subType == ConstDressUpItemType.NEI_DA) { neidaIndex = i; continue; } } if (liangyiqunIndex >= 0 && (shangyiIndex >= 0 || xiazhuangIndex >= 0)) { if (shangyiIndex < 0 && xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);//上衣下装只有一件,则保留连衣裙 if (xiazhuangIndex < 0 && shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex); if (shangyiIndex >= 0 && xiazhuangIndex >= 0)//同时拥有上衣、下装、连衣裙 { int lianyiqunScore = ItemDataManager.GetItemAdditionScore(recommendList[liangyiqunIndex], InstanceZonesDataManager.currentScoreType); int shangyiScore = ItemDataManager.GetItemAdditionScore(recommendList[shangyiIndex], InstanceZonesDataManager.currentScoreType); int xiazhuangScore = ItemDataManager.GetItemAdditionScore(recommendList[xiazhuangIndex], InstanceZonesDataManager.currentScoreType); int neidaScore = neidaIndex >= 0 ? ItemDataManager.GetItemAdditionScore(recommendList[neidaIndex], InstanceZonesDataManager.currentScoreType) : 0; int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId); 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))//推荐列表里有必需品且,必需品类型为上衣或下装或连衣裙,有先穿戴必须品,其次穿戴高分服装 { if (subType == ConstDressUpItemType.LIAN_YI_QUN) { shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList); if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex); xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList); if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex); neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList); if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex); } else if (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA) { liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList); if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex); } } else { if (lianyiqunScore > shangyiScore + xiazhuangScore + neidaScore) { shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList); if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex); xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList); if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex); neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList); if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex); } else { liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList); if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex); } } } } //推荐搭配自动穿必穿品 if (fightCfg.needItemId > 0 && DressUpMenuItemDataManager.CheckHasItem(fightCfg.needItemId) && recommendList.IndexOf(fightCfg.needItemId) < 0) { int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId); for (int i = 0; i < recommendList.Count; i++) { int recommendSubType = ItemUtilCS.GetItemSubType(recommendList[i]); if (recommendSubType == subType) { recommendList.RemoveAt(i); break; } } recommendList.Add(fightCfg.needItemId); } else if (fightCfg.needSuitId > 0 && DressUpMenuSuitDataManager.CheckHaveSuit(fightCfg.needSuitId)) { recommendList.Clear(); SuitCfg cfg = SuitCfgArray.Instance.GetCfg(fightCfg.needSuitId); recommendList.AddRange(cfg.partsArr); } cacher.PutOnItemList(recommendList); } private static int CheckIndex(int _subType, List recommendList) { for (int i = 0; i < recommendList.Count; i++) { int itemSubType = ItemUtilCS.GetItemSubType(recommendList[i]); if (itemSubType == _subType) { return i; } } return -1; } } }