using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
//武将相关界面的操作数据管理
|
public partial class HeroUIManager : GameSystemManager<HeroUIManager>
|
{
|
#region 武将列表界面
|
public List<string> heroSortList { get; private set; } = new List<string>(); //上阵为主线的 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<HeroLVBreakSuccessWin>();
|
}
|
|
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 List<int> heroCallSortList { get; private set; } = new List<int>(); //积分招募列表
|
public int selectHeroCallListJob = 0; //筛选职业
|
public int selectHeroCallListCountry = 0; //筛选国家
|
|
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;
|
}
|
|
List<int> allHeroCallScoreList = new List<int>(); //积分招募列表
|
public void SortHeroCallList()
|
{
|
if (allHeroCallScoreList.IsNullOrEmpty())
|
{
|
allHeroCallScoreList = HappyXBModel.Instance.GetAllGridLibItemIDByType((int)HappXBTitle.HeroCallScore);
|
}
|
heroCallSortList = new List<int>();
|
if (selectHeroCallListJob == 0 && selectHeroCallListCountry == 0)
|
{
|
heroCallSortList = allHeroCallScoreList;
|
}
|
else
|
{
|
foreach (var item in allHeroCallScoreList)
|
{
|
HeroConfig heroConfig = HeroConfig.Get(item);
|
if (heroConfig == null)
|
{
|
continue;
|
}
|
if (selectHeroCallListJob != 0 && selectHeroCallListJob != heroConfig.Class)
|
{
|
continue;
|
}
|
if (selectHeroCallListCountry != 0 && selectHeroCallListCountry != heroConfig.Country)
|
{
|
continue;
|
}
|
heroCallSortList.Add(item);
|
}
|
}
|
|
heroCallSortList.Sort(CmpHeroID);
|
}
|
|
int CmpHeroID(int idA, int idB)
|
{
|
HeroConfig heroA = HeroConfig.Get(idA);
|
HeroConfig heroB = HeroConfig.Get(idB);
|
|
|
// 排序规则:武将品质>武将ID
|
if (heroA.Quality != heroB.Quality)
|
{
|
return heroA.Quality > heroB.Quality ? -1 : 1;
|
}
|
|
|
return heroA.HeroID.CompareTo(heroB.HeroID);
|
}
|
|
#endregion
|
|
|
}
|
|
public struct WaitHeroFuncResponse
|
{
|
public HeroFuncType type;
|
public string guid;
|
public float time;
|
}
|
|
//武将功能类型
|
public enum HeroFuncType
|
{
|
None = 0, //无功能
|
Break = 1, //突破
|
|
}
|