using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; //武将相关界面的操作数据管理 public class HeroUIManager : GameSystemManager { //武将列表界面 public List heroSortList { get; private set; } = new List(); //上阵为主线的列表 public List heroOnTeamSortList { get; private set; } = new List(); //不同上阵的列表排序 public TeamType selectTeamType = TeamType.Story; //当前选中的是哪个阵容, 布阵相关逻辑使用 public void OnBeforePlayerDataInitialize() { heroSortList.Clear(); heroOnTeamSortList.Clear(); } public void OnPlayerLoginOk() { } public override void Init() { } public override void Release() { } public bool waitResortHeroList = false; //刷新时机, 打开武将界面 或者 关闭功能界面 public void SortHeroList() { heroSortList = HeroManager.Instance.GetHeroGuidList(); heroSortList.Sort(CmpHero); } int CmpHero(string guidA, string guidB) { HeroInfo heroA = HeroManager.Instance.GetHero(guidA); HeroInfo heroB = HeroManager.Instance.GetHero(guidB); if (heroA == null || heroB == null) { return 0; } // 排序规则:上阵>武将等级>突破等级>武将觉醒阶级>武将品质>武将吞噬星级>武将ID bool isInTeamA = heroA.IsInTeamByTeamType(TeamType.Story); bool isInTeamB = heroB.IsInTeamByTeamType(TeamType.Story); if (isInTeamA != isInTeamB) { return isInTeamA ? -1 : 1; } if (heroA.heroLevel != heroB.heroLevel) { return heroA.heroLevel > heroB.heroLevel ? -1 : 1; } if (heroA.breakLevel != heroB.breakLevel) { return heroA.breakLevel > heroB.breakLevel ? -1 : 1; } if (heroA.awakeLevel != heroB.awakeLevel) { return heroA.awakeLevel > heroB.awakeLevel ? -1 : 1; } if (heroA.Quality != heroB.Quality) { return heroA.Quality > heroB.Quality ? -1 : 1; } if (heroA.heroStar != heroA.heroStar) { return heroA.heroStar > heroB.heroStar ? -1 : 1; } return heroA.heroId.CompareTo(heroB.heroId); } public void SortHeroOnTeamList() { heroOnTeamSortList = HeroManager.Instance.GetHeroGuidList(); heroOnTeamSortList.Sort(CmpHeroByTeamType); } int CmpHeroByTeamType(string guidA, string guidB) { HeroInfo heroA = HeroManager.Instance.GetHero(guidA); HeroInfo heroB = HeroManager.Instance.GetHero(guidB); if (heroA == null || heroB == null) { return 0; } // 排序规则:上阵>武将等级>突破等级>武将觉醒阶级>武将品质>武将吞噬星级>武将ID bool isInTeamA = heroA.IsInTeamByTeamType(selectTeamType); bool isInTeamB = heroB.IsInTeamByTeamType(selectTeamType); if (isInTeamA != isInTeamB) { return isInTeamA ? -1 : 1; } if (heroA.heroLevel != heroB.heroLevel) { return heroA.heroLevel > heroB.heroLevel ? -1 : 1; } if (heroA.breakLevel != heroB.breakLevel) { return heroA.breakLevel > heroB.breakLevel ? -1 : 1; } if (heroA.awakeLevel != heroB.awakeLevel) { return heroA.awakeLevel > heroB.awakeLevel ? -1 : 1; } if (heroA.Quality != heroB.Quality) { return heroA.Quality > heroB.Quality ? -1 : 1; } if (heroA.heroStar != heroA.heroStar) { return heroA.heroStar > heroB.heroStar ? -1 : 1; } return heroA.heroId.CompareTo(heroB.heroId); } public void QueryUnLockHeroPack() { //解锁更多的武将背包 } //上阵队伍中各个国家的武将数量 public Dictionary GetCountryHeroCountByTeamType(TeamType teamType) { Dictionary heroCountryCount = new Dictionary(); var team = TeamManager.Instance.GetTeam(teamType); if (team != null) { for (int i = 0; i < team.serverData.Length; i++) { var hero = HeroManager.Instance.GetHero(team.serverData[i].guid); if (hero != null) { if (!heroCountryCount.ContainsKey(hero.heroCountry)) { heroCountryCount.Add(hero.heroCountry, 1); } else { heroCountryCount[hero.heroCountry] += 1; } } } } return heroCountryCount; } //获得上阵中武将数量最大的国家和数量 public Int2 GetMaxCountHeroCountry(TeamType teamType) { var countryCount = GetCountryHeroCountByTeamType(teamType); //找到最大的国家和数量 HeroCountry country = HeroCountry.None; int maxValue = 0; foreach (var data in countryCount) { if (data.Value > maxValue) { country = data.Key; maxValue = data.Value; } } return new Int2((int)country, maxValue); } //AttackType 0 攻击阵容 1 防守阵容 int GetSelectTeamTypeByAttackType(int AttackType) { if (selectTeamType == TeamType.Arena) { if (AttackType == 0) { return (int)TeamType.Arena; } else if (AttackType == 1) { return (int)TeamType.ArenaDefense; } } else if (selectTeamType == TeamType.ArenaDefense) { if (AttackType == 0) { return (int)TeamType.ArenaDefense; } else if (AttackType == 1) { return (int)TeamType.Arena; } } return (int)TeamType.Story; } }