using System.Collections.Generic; namespace GFGGame { public class MyDressUpHelper { private static DressUpObj _dressUpObj; public static DressUpObj dressUpObj { get { if (_dressUpObj == null) { _dressUpObj = new DressUpObj(); } return _dressUpObj; } } public static CustomSuitData GetCurSuitDataClone(int index) { CustomSuitData suitSavedData = new CustomSuitData(index); suitSavedData.dressUpData = MyDressUpHelper.dressUpObj.DressUpDataClone(); return suitSavedData; } /// /// 检测是否穿戴完整(穿着连衣裙或同时穿着上装下装) /// /// public static bool CheckPutOnFinish() { if (MyDressUpHelper.dressUpObj.suitId > 0) return true; List equipDatas = MyDressUpHelper.dressUpObj.itemList; 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 dressUpObj.CheckDressUpItemIsOn(fightCfg.needItemId); } else if (fightCfg.needSuitId > 0) { return dressUpObj.CheckSuitIsOn(fightCfg.needSuitId); } return true; } public static void PutOnSuitSavedByPos(int index) { CustomSuitData suitSavedData = CustomSuitDataManager.GetSuitList(index); dressUpObj.PutOnDressUpData(suitSavedData.dressUpData); } //返回当前饰品穿戴数量 public static int GetCurrentOrnamentCount() { int count = 0; for (int i = 0; i < dressUpObj.itemList.Count; i++) { if (DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsType(dressUpObj.itemList[i])) count++; } return count; } 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); } dressUpObj.PutOnItemList(recommendList); } public static void PutOnRecommendItems2() { GetRecommendItems(out Dictionary> needListBySubType, out Dictionary> recommendListBySubType); } //获取每个类型里分数最高的服装部件Dictionary private static void GetRecommendItems(out Dictionary> needListBySubType, out Dictionary> recommendListBySubType) { StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId); StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID); needListBySubType = new Dictionary>(); recommendListBySubType = new Dictionary>(); Dictionary> itemDatasDic = DressUpMenuItemDataManager.ItemDatasBySubTypeDic; foreach (int subType in itemDatasDic.Keys) { if (DressUpMenuItemCfg1Array.Instance.CheckIsSceneTypeBySubType(subType)) continue; if (!needListBySubType.ContainsKey(subType)) { needListBySubType.Add(subType, new List()); } List itemDatas = new List(itemDatasDic[subType]); DressUpMenuItemDataManager.SortItemListByHighScore(itemDatas); if (fightCfg.needSuitId > 0) { int[] suitParts = SuitCfgArray.Instance.GetCfg(fightCfg.needSuitId).partsArr; for (int i = 0; i < suitParts.Length; i++) { if (itemDatas.IndexOf(suitParts[i]) >= 0)//当前类型里是否包含此部件, { needListBySubType[subType].Add(suitParts[i]); } } } if (fightCfg.needItemId > 0) { if (itemDatas.IndexOf(fightCfg.needItemId) >= 0 && needListBySubType[subType].IndexOf(fightCfg.needItemId) < 0) { needListBySubType[subType].Add(fightCfg.needItemId); } } DressUpMenuItemDataManager.SortItemListByHighScore(needListBySubType[subType]); int maxCount = subType == (int)ConstDressUpItemType.TE_SHU ? 3 : 1;//特殊部件最多穿3个,其他部件只能穿一个; needListBySubType[subType] = needListBySubType[subType].GetRange(0, maxCount);//多余3个取前三 int index = 0; while (recommendListBySubType[subType].Count < maxCount && itemDatasDic[subType].Count > index)//不足3个从列表里补足 { int partId = itemDatasDic[subType][index]; if (needListBySubType[subType].IndexOf(partId) < 0)//必需品列表里还没有此部件才会被添加进去 { if (!recommendListBySubType.ContainsKey(subType)) { recommendListBySubType.Add(subType, new List()); } recommendListBySubType[subType].Add(partId); } index++; } DressUpMenuItemDataManager.SortItemListByHighScore(recommendListBySubType[subType]); } } 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; } } }