using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //武将相关界面的操作数据管理 public partial class HeroUIManager : GameSystemManager { #region 武将列表界面 public List heroSortList { get; private set; } = new List(); //上阵为主线的 GUID列表 public int selectHeroListJob = 0; //武将列表界面 筛选职业 public int selectHeroListCountry = 0; //武将列表界面筛选国家 public string selectHeroGuid; //选中的武将id #endregion public WaitHeroFuncResponse waitResponse; //请求武将功能,与服务端交互 public const float lihuiScale = 0.6f; //立绘缩放大小 public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; HeroManager.Instance.onHeroChangeEvent += OnHeroChangeEvent; ParseConfig(); } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; HeroManager.Instance.onHeroChangeEvent -= OnHeroChangeEvent; } void ParseConfig() { var config = FuncConfigConfig.Get("HeroRebirth"); payBackMoneyType = int.Parse(config.Numerical1); payBackMoney = int.Parse(config.Numerical2); } public void OnBeforePlayerDataInitialize() { heroSortList.Clear(); heroOnTeamSortList.Clear(); awakeRebirthCnt = 0; waitResponse = default; heroCollectInfoDic.Clear(); } private void OnHeroChangeEvent(HeroInfo hero) { if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin) return; WaitServerResponse(hero); } private void WaitServerResponse(HeroInfo hero) { if (waitResponse.Equals(default(WaitHeroFuncResponse))) { return; } // 等待超过5秒 不处理 var nowTime = Time.time; if (waitResponse.time > 0f && waitResponse.time + 5 < nowTime) { waitResponse = default; return; } if (hero.itemHero.guid != waitResponse.guid) { return; } if (waitResponse.type == HeroFuncType.Break) { UIManager.Instance.OpenWindow(); } waitResponse = default; } #region 武将UI常用接口 public string GetCountryName(int index) { return RichTextMsgReplaceConfig.GetRichReplace("Country", index); } public string GetJobName(int index) { return RichTextMsgReplaceConfig.GetRichReplace("Class", index); } public string GetCountryIconName(int index) { return StringUtility.Contact("herocountry", index); } public string GetJobIconName(int index) { return StringUtility.Contact("herojob", index); } public int GetMaxLV(int quality) { return HeroQualityBreakConfig.maxlvDic[quality]; } //是否达到最高级 public bool IsLVMax(HeroInfo hero) { return hero.heroLevel >= GetMaxLV(hero.Quality); } //突破限制的最高等级 public int GetMaxLVByBreakLV(int quality, int breakLevel) { return HeroQualityBreakConfig.GetQualityBreakConfig(quality, breakLevel).LVMax; } public bool IsLVMaxByBreakLevel(HeroInfo hero) { return hero.heroLevel == GetMaxLVByBreakLV(hero.Quality, hero.breakLevel); } #endregion public void QueryUnLockHeroPack() { //解锁更多的武将背包 int canBuyCnt = PackManager.Instance.GetCanBuyPackGirdCount(PackType.Hero); if (canBuyCnt <= 0) { return; } var buyInfo = PackManager.Instance.BuyPackGirdNeedData(PackType.Hero); ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("HeroPack1", UIHelper.GetIconNameWithMoneyType(buyInfo[0]), buyInfo[1], buyInfo[2]), (bool isOK) => { if (isOK) { if (UIHelper.GetMoneyCnt(buyInfo[0]) < (ulong)buyInfo[1]) { SysNotifyMgr.Instance.ShowTip("LackMoney", buyInfo[0]); return; } PackManager.Instance.BuyPackGird(PackType.Hero); } }); } //刷新时机, 打开武将界面 或者 关闭功能界面 public void SortHeroList() { heroSortList = HeroManager.Instance.GetHeroGuidList(selectHeroListJob, selectHeroListCountry); 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); } #region 招募 public HappXBTitle selectCallType; //寻宝枚举类型 public int selectCallIndex;//0:1抽 1:10抽 对应配置顺序 public const string skipKey = "SkipHeroCall"; public bool IsNewHero(int heroID) { var bookInfo = GetHeroBookInfo(heroID); if (bookInfo != null) { if (bookInfo.BookInitState < 2) { //更精准的 需要比较本次抽的同武将个数 和 背包里有的个数再比较 if (HappyXBModel.Instance.GetCountInResult(heroID) >= HeroManager.Instance.GetHeroCountByID(heroID)) { return true; } else { return false; } } else { return false; } } return true; } #endregion } public struct WaitHeroFuncResponse { public HeroFuncType type; public string guid; public float time; } //武将功能类型 public enum HeroFuncType { None = 0, //无功能 Break = 1, //突破 }