using System.Collections; using System.Collections.Generic; using System; using UnityEngine; namespace GFGGame { public enum DressFilterType { None, Search, Filter } public class DressUpMenuItemDataManager { public static string dressSearchTxt = ""; public static DressFilterType dressFilterType = DressFilterType.None; public static List selectRarityList = new List(); public static List selectScoreList = new List(); public static List selectTagList = new List(); private static List _itemDatas = new List(); public static void InitData() { _itemDatas.Clear(); } public static void Add(int value) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(value); if (itemCfg == null) { Debug.LogError("添加了一个不存在的物品" + value); } else { if (!_itemDatas.Contains(value)) { _itemDatas.Add(value); DressUpMenuSuitDataManager.CheckItemInSuit(value); } } } public static bool CheckHasItem(int itemID) { return _itemDatas.Contains(itemID); } public static void Remove(int value) { if (_itemDatas == null) { return; } if (_itemDatas.Contains(value)) { _itemDatas.Remove(value); } } public static List getItemDatasByType(int type) { List arrayList = new List(); for (int i = 0; i < _itemDatas.Count; i++) { int itemID = (int)_itemDatas[i]; int subType = ItemUtilCS.GetItemSubType(itemID); if (type == (int)ConstDressUpItemType.TE_SHU && subType > type) { arrayList.Add(itemID); } else if (subType == type) { arrayList.Add(itemID); } } return arrayList; } public static List SortItemListByHighScore(List arrayList) { arrayList.Sort((int a, int b) => { int scoreA = GetItemScore(a); int scoreB = GetItemScore(b); if (scoreB > scoreA) { return 1; } else if (scoreB < scoreA) { return -1; } return 0; }); return arrayList; } public static List SortItemListByLowScore(List arrayList) { arrayList.Sort((int a, int b) => { int scoreA = GetItemScore(a); int scoreB = GetItemScore(b); if (scoreB < scoreA) { return 1; } else if (scoreB > scoreA) { return -1; } return 0; }); return arrayList; } private static List SortItemListByScoreByType(List arrayList) { arrayList.Sort((int a, int b) => { int typeA = ItemUtilCS.GetItemSubType(a); int typeB = ItemUtilCS.GetItemSubType(b); int scoreA = GetItemScore(a); int scoreB = GetItemScore(b); if (typeB < typeA) { return -1; } else if (typeB > typeA) { return 1; } else if (scoreB > scoreA) { return 1; } else if (scoreB < scoreA) { return -1; } return 0; }); return arrayList; } public static List SortItemListByHighRarity(List arrayList) { arrayList.Sort((int a, int b) => { ItemCfg itemCfgA = ItemCfgArray.Instance.GetCfg(a); ItemCfg itemCfgB = ItemCfgArray.Instance.GetCfg(b); if (itemCfgB.rarity > itemCfgA.rarity) { return 1; } else if (itemCfgB.rarity < itemCfgA.rarity) { return -1; } return 0; }); return arrayList; } public static List SortItemListByLowRarity(List arrayList) { arrayList.Sort((int a, int b) => { ItemCfg itemCfgA = ItemCfgArray.Instance.GetCfg(a); ItemCfg itemCfgB = ItemCfgArray.Instance.GetCfg(b); if (itemCfgB.rarity < itemCfgA.rarity) { return 1; } else if (itemCfgB.rarity > itemCfgA.rarity) { return -1; } return 0; }); return arrayList; } public static List GetRecommendItemList(bool toSort = true) { List recommendTypeList = new List(); List recommendList = new List(); List recommendSpecialList = new List(); List tempAllList = _itemDatas.GetRange(0, _itemDatas.Count); if (toSort) { SortItemListByScoreByType(tempAllList); } foreach (int itemID in tempAllList) { int subType = ItemUtilCS.GetItemSubType(itemID); if (!CheckIsSceneType(itemID)) { if (!recommendTypeList.Contains(subType)) { if (subType < ConstDressUpItemType.TE_SHU) { recommendList.Add(itemID); } recommendTypeList.Add(subType); } } } recommendSpecialList = DressUpMenuItemDataManager.getItemDatasByType(ConstDressUpItemType.TE_SHU); recommendSpecialList = DressUpMenuItemDataManager.SortItemListByHighScore(recommendSpecialList); List specialSubList = new List(); List specialIdList = new List(); foreach (int itemID in recommendSpecialList) { int subType = ItemUtilCS.GetItemSubType(itemID); if (subType > ConstDressUpItemType.TE_SHU) { if (specialSubList.Count >= 3) continue; if (specialSubList.IndexOf(subType) < 0) { specialSubList.Add(subType); specialIdList.Add(itemID); } } } recommendList.AddRange(specialIdList); return recommendList; } public static int GetRecommendCount() { List recommendTypeList = GetRecommendItemList(false); return recommendTypeList.Count; } public static bool CheckIsSceneType(int itemID) { int subType = ItemUtilCS.GetItemSubType(itemID); DressUpMenuItemCfg1 typeCfg = DressUpMenuItemCfg1Array.Instance.GetCfg(12); foreach (int temp in typeCfg.subMenusArr) { DressUpMenuItemCfg2 subTypeCfg = DressUpMenuItemCfg2Array.Instance.GetCfg(temp); if (subType == subTypeCfg.type) { return true; } } return false; } public static int GetItemScore(int itemId) { return GetItemScore(itemId, InstanceZonesDataManager.currentScoreType); } public static int GetItemScore(int itemId, int scoreType) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId); if (itemCfg == null) return 0; int score = itemCfg.baseScore; switch (scoreType) { case ConstDressUpScoreType.SCORE_FENG: score += itemCfg.score1; break; case ConstDressUpScoreType.SCORE_HUA: score += itemCfg.score2; break; case ConstDressUpScoreType.SCORE_XUE: score += itemCfg.score3; break; case ConstDressUpScoreType.SCORE_YUE: score += itemCfg.score4; break; } return score; } public static List DressSearch(List list, bool isTaoZhuang) { List searchList = new List(); for (int i = 0; i < list.Count; i++) { bool isSearch = true; string name = isTaoZhuang ? SuitCfgArray.Instance.GetCfg(list[i]).name : ItemCfgArray.Instance.GetCfg(list[i]).name; for (int j = 0; j < dressSearchTxt.Length; j++) { if (name.IndexOf(dressSearchTxt[j]) < 0) { isSearch = false; break; } } if (isSearch) { searchList.Add(list[i]); } } // if (searchList.Count == 0) // { // PromptController.Instance.ShowFloatTextPrompt("搜索不到相关物品"); // } return searchList; } public static List DressFilter(List list, bool isTaoZhuang) { List filterList = new List(); for (int i = 0; i < list.Count; i++) { ItemCfg cfg = ItemCfgArray.Instance.GetCfg(list[i]); SuitCfg tzCfg = SuitCfgArray.Instance.GetCfg(list[i]); bool isRarity = isTaoZhuang ? FilterRarity(tzCfg) : FilterRarity(cfg); bool isScore = isTaoZhuang ? true : FilterScore(cfg); bool isTag = isTaoZhuang ? true : FilterTag(cfg); if (isRarity && isScore && isTag) { filterList.Add(list[i]); } } if (filterList.Count == 0) { PromptController.Instance.ShowFloatTextPrompt("无满足条件物品"); } return filterList; } private static bool FilterRarity(ItemCfg cfg) { bool isRarity = false; if (selectRarityList.Count > 0) { for (int j = 0; j < selectRarityList.Count; j++) { if (cfg != null && cfg.rarity == selectRarityList[j]) { isRarity = true; break; } } } else { isRarity = true; } return isRarity; } private static bool FilterRarity(SuitCfg cfg) { bool isRarity = false; if (selectRarityList.Count > 0) { for (int j = 0; j < selectRarityList.Count; j++) { if (cfg != null && cfg.rarity == selectRarityList[j]) { isRarity = true; break; } } } else { isRarity = true; } return isRarity; } private static bool FilterScore(ItemCfg cfg) { bool isScore = false; if (selectScoreList.Count > 0) { if (cfg != null) { int mainScore; int mainScoreValue; ItemDataManager.GetMainScore(cfg.id, out mainScore, out mainScoreValue); for (int j = 0; j < selectScoreList.Count; j++) { if (mainScore == selectScoreList[j]) { isScore = true; break; } } } } else { isScore = true; } return isScore; } private static bool FilterTag(ItemCfg cfg) { bool isTag = false; if (selectTagList.Count > 0) { if (cfg != null) { for (int j = 0; j < selectTagList.Count; j++) { if (isTag == true) { break; } for (int k = 0; k < cfg.tagsArr.Length; k++) { if (cfg.tagsArr[k] == selectTagList[j]) { isTag = true; break; } } } } } else { isTag = true; } return isTag; } } }