ArenaDataManager.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Collections.Generic;
  3. using FairyGUI;
  4. namespace GFGGame
  5. {
  6. public class ArenaDataManager : SingletonBase<ArenaDataManager>
  7. {
  8. public List<int> ThemeList = new List<int>();//本周主题列表
  9. public string Tag;//本周标签
  10. public int SeasonId = 1;// 赛季id
  11. public int Grade = 1;//本赛季段位
  12. public int Rank = 10000;//本赛季段位内排名
  13. public int HighestGrade = 1;//本赛季最高段位
  14. public int HighestRank = 10000; //本赛最高季段位内排名
  15. public List<FightRoleData> DressupList = new List<FightRoleData>();//我的搭配列表
  16. public List<ArenaTargetData> Targets = new List<ArenaTargetData>();//对手
  17. public ArenaTargetData SelfData = new ArenaTargetData();//自己的排行榜信息
  18. public List<ArenaTargetData> rankDatas = new List<ArenaTargetData>();//排行榜数据
  19. public List<ArenaHistoryData> historyDatas = new List<ArenaHistoryData>();//获取竞技场历史记录
  20. public int SelectThemeIndex = 0;//当前选中换装主题(ThemeList)的下标
  21. public int SelectTargetIndex = 0;//当前选中挑战对象的下标
  22. public int CurFightIndex = 0;//当前挑战的为第几场
  23. public void Clear()
  24. {
  25. DressupList.Clear();
  26. Targets.Clear();
  27. }
  28. /// <summary>
  29. /// 试图更新最高段位、排行数据
  30. /// </summary>
  31. public void TryUpdateHighest()
  32. {
  33. HighestGrade = HighestGrade >= Grade ? HighestGrade : Grade;
  34. HighestRank = HighestRank >= Rank ? HighestRank : Rank;
  35. }
  36. public void UpdateDanIcon(GLoader loader, int danLv)
  37. {
  38. }
  39. public List<int> GetRecommentItemList(int scoreType, string[] tags)
  40. {
  41. Dictionary<int, List<int>> itemListDic = new Dictionary<int, List<int>>();
  42. Dictionary<int, List<int>> itemDatasDic = DressUpMenuItemDataManager.ItemDatasBySubTypeDic;
  43. foreach (int subType in itemDatasDic.Keys)
  44. {
  45. if (itemDatasDic.Count == 0) continue;
  46. List<int> dressList = SortDressList(itemDatasDic[subType], scoreType, tags);
  47. int max = subType == (int)ConstDressUpItemType.TE_SHU ? 3 : 1;
  48. max = Math.Min(max, dressList.Count);
  49. itemListDic[subType] = dressList.GetRange(0, max);
  50. }
  51. if (itemListDic.ContainsKey(ConstDressUpItemType.LIAN_YI_QUN) && itemListDic.ContainsKey(ConstDressUpItemType.SHANG_YI) && itemListDic.ContainsKey(ConstDressUpItemType.XIA_ZHUANG))
  52. {
  53. bool hasTagLYQ = ItemDataManager.CheckItemTagsRight(itemListDic[ConstDressUpItemType.LIAN_YI_QUN][0], tags);
  54. bool hasTagSY = ItemDataManager.CheckItemTagsRight(itemListDic[ConstDressUpItemType.SHANG_YI][0], tags);
  55. bool hasTagXZ = ItemDataManager.CheckItemTagsRight(itemListDic[ConstDressUpItemType.XIA_ZHUANG][0], tags);
  56. if (hasTagLYQ && !hasTagSY && !hasTagXZ)
  57. {
  58. itemListDic.Remove(ConstDressUpItemType.SHANG_YI);
  59. itemListDic.Remove(ConstDressUpItemType.XIA_ZHUANG);
  60. }
  61. else if (!hasTagLYQ && (hasTagSY || hasTagXZ))
  62. {
  63. itemListDic.Remove(ConstDressUpItemType.LIAN_YI_QUN);
  64. }
  65. else
  66. {
  67. int scoreLYQ = ItemDataManager.GetItemAdditionScore(itemListDic[ConstDressUpItemType.LIAN_YI_QUN][0], scoreType, tags);
  68. int scoreSY = ItemDataManager.GetItemAdditionScore(itemListDic[ConstDressUpItemType.SHANG_YI][0], scoreType, tags);
  69. int scoreXZ = ItemDataManager.GetItemAdditionScore(itemListDic[ConstDressUpItemType.XIA_ZHUANG][0], scoreType, tags);
  70. if (scoreLYQ > scoreSY + scoreXZ)
  71. {
  72. itemListDic.Remove(ConstDressUpItemType.SHANG_YI);
  73. itemListDic.Remove(ConstDressUpItemType.XIA_ZHUANG);
  74. }
  75. else
  76. {
  77. itemListDic.Remove(ConstDressUpItemType.LIAN_YI_QUN);
  78. }
  79. }
  80. }
  81. List<int> itemList = new List<int>();
  82. foreach (int subType in itemListDic.Keys)
  83. {
  84. itemList.AddRange(itemListDic[subType]);
  85. }
  86. return itemList;
  87. }
  88. private List<int> SortDressList(List<int> dressList, int scoreType, string[] tags)
  89. {
  90. dressList.Sort((int a, int b) =>
  91. {
  92. ItemCfg cfgA = ItemCfgArray.Instance.GetCfg(a);
  93. ItemCfg cfgB = ItemCfgArray.Instance.GetCfg(b);
  94. if (ItemDataManager.CheckItemTagsRight(a, tags) && !ItemDataManager.CheckItemTagsRight(b, tags)) return -1;
  95. if (ItemDataManager.CheckItemTagsRight(b, tags) && !ItemDataManager.CheckItemTagsRight(a, tags)) return 1;
  96. int scoreA = ItemDataManager.GetItemAdditionScore(a, scoreType, tags);
  97. int scoreB = ItemDataManager.GetItemAdditionScore(b, scoreType, tags);
  98. return scoreB - scoreA;
  99. });
  100. return dressList;
  101. }
  102. }
  103. }