using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Text;
|
|
using UnityEngine;
|
|
//武将相关界面的操作数据管理
|
public class HeroUIManager : GameSystemManager<HeroUIManager>
|
{
|
//武将列表界面
|
public List<string> heroSortList { get; private set; } = new List<string>(); //上阵为主线的列表
|
|
public List<string> heroOnTeamSortList { get; private set; } = new List<string>(); //不同上阵的列表排序
|
|
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<HeroCountry, int> GetCountryHeroCountByTeamType(TeamType teamType)
|
{
|
Dictionary<HeroCountry, int> heroCountryCount = new Dictionary<HeroCountry, int>();
|
|
var team = TeamManager.Instance.GetTeam(teamType);
|
if (team != null)
|
{
|
for (int i = 0; i < team.serverHeroes.Length; i++)
|
{
|
var hero = HeroManager.Instance.GetHero(team.serverHeroes[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 防守阵容
|
public int GetSelectTeamTypeByAttackType(int AttackType)
|
{
|
if (selectTeamType == TeamType.Arena || selectTeamType == TeamType.ArenaDefense)
|
{
|
return AttackType == 0 ? (int)TeamType.Arena : (int)TeamType.ArenaDefense;
|
}
|
|
|
return (int)TeamType.Story;
|
}
|
}
|