using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
using UnityEngine;
|
|
//图鉴和皮肤
|
public partial class HeroUIManager : GameSystemManager<HeroUIManager>
|
{
|
|
|
public Dictionary<int, List<int>> heroCollectDict { get; private set; } = new Dictionary<int, List<int>>(); //武将图鉴按品质列表
|
public List<int> heroCollectList = new List<int>(); //武将图鉴列表
|
public int selectHeroCollectListJob = 0; //武将列表界面 筛选职业
|
public int selectHeroCollectListCountry = 0; //武将列表界面筛选国家
|
public int selectCollectHeroID; //选中的武将id 用于升级
|
|
public int selectForPreviewHeroID; //选中的武将id 用于预览
|
|
//图鉴和皮肤的激活情况
|
Dictionary<int, HB122_tagSCHeroInfo.tagSCHero> heroCollectInfoDic = new Dictionary<int, HB122_tagSCHeroInfo.tagSCHero>();
|
|
public int allHeroBookPer; //全体武将的图鉴激活百分比
|
public event Action OnHeroCollectEvent;
|
|
public void UpdateHeroCollectInfo(HB122_tagSCHeroInfo netPack)
|
{
|
for (int i = 0; i < netPack.HeroCnt; i++)
|
{
|
heroCollectInfoDic[(int)netPack.HeroInfoList[i].HeroID] = netPack.HeroInfoList[i];
|
}
|
allHeroBookPer = GetHeroCollectBookPer();
|
OnHeroCollectEvent?.Invoke();
|
UpdateHeroBookRedpoint();
|
}
|
|
|
public int GetHeroCollectBookPer()
|
{
|
int per = 0;
|
foreach (var kv in heroCollectInfoDic)
|
{
|
var config = HeroQualityConfig.Get(HeroConfig.Get(kv.Key).Quality);
|
if (kv.Value.BookInitState != 2)
|
continue;
|
per += config.BookInitAddPer;
|
per += kv.Value.BookStarLV * config.BookStarAddPer;
|
per += kv.Value.BookBreakLV * config.BookBreakLVAddPer;
|
}
|
return per;
|
}
|
|
public bool TryGetHeroBookInfo(int heroID, out HB122_tagSCHeroInfo.tagSCHero heroData)
|
{
|
if (heroCollectInfoDic.ContainsKey(heroID))
|
{
|
heroData = heroCollectInfoDic[heroID];
|
return true;
|
}
|
heroData = new HB122_tagSCHeroInfo.tagSCHero();
|
return false;
|
}
|
|
|
public void SortHeroCollectList()
|
{
|
var heroIDs = HeroConfig.GetKeys().ToList();
|
|
heroCollectDict.Clear();
|
foreach (var heroID in heroIDs)
|
{
|
HeroConfig heroConfig = HeroConfig.Get(heroID);
|
if (!heroCollectDict.ContainsKey(heroConfig.Quality))
|
{
|
heroCollectDict[heroConfig.Quality] = new List<int>();
|
}
|
//过滤职业国家
|
if (selectHeroCollectListJob != 0 && selectHeroCollectListJob != heroConfig.Class)
|
{
|
continue;
|
}
|
if (selectHeroCollectListCountry != 0 && selectHeroCollectListCountry != heroConfig.Country)
|
{
|
continue;
|
}
|
|
heroCollectDict[heroConfig.Quality].Add(heroID);
|
}
|
|
heroCollectList.Clear();
|
//按品质倒序加入
|
var _list = heroCollectDict.Keys.ToList();
|
_list.Reverse();
|
foreach (var quality in _list)
|
{
|
heroCollectList.AddRange(heroCollectDict[quality]);
|
}
|
}
|
|
//图鉴总上限等级 = 图鉴星级上限 + 图鉴突破上限
|
public int GetHeroBookMaxLevel(int heroID, int quality)
|
{
|
return GetMaxStarCount(heroID, quality) + HeroBreakConfig.GetMaxBreakLv(heroID);
|
}
|
|
public int GetHeroBookLevel(int heroID)
|
{
|
if (heroCollectInfoDic.ContainsKey(heroID))
|
{
|
return heroCollectInfoDic[heroID].BookStarLV + heroCollectInfoDic[heroID].BookBreakLV;
|
}
|
return 0;
|
}
|
|
//分为0未获得、1可激活、2常规、3突破升级、4、星升级、5已满级
|
public int GetHeroBookState(int heroID, int quality)
|
{
|
int funcState = 0;
|
|
HB122_tagSCHeroInfo.tagSCHero colData;
|
TryGetHeroBookInfo(heroID, out colData);
|
int maxBreakLV = colData.BookBreakLVH; //历史最高突破等级
|
int maxStarLV = colData.BookStarLVH; //历史最高星级
|
|
if (colData.BookInitState == 0)
|
{
|
funcState = 0;
|
}
|
else if (colData.BookInitState == 1)
|
{
|
funcState = 1;
|
}
|
else if (colData.BookInitState == 2)
|
{
|
if (GetHeroBookMaxLevel(heroID, quality) == colData.BookBreakLV + colData.BookStarLV)
|
{
|
funcState = 5;
|
}
|
else if (maxBreakLV + maxStarLV == colData.BookBreakLV + colData.BookStarLV)
|
{
|
funcState = 2;
|
}
|
else
|
{
|
//优先突破升级
|
if (colData.BookBreakLV < colData.BookBreakLVH)
|
{
|
funcState = 3;
|
}
|
else
|
{
|
funcState = 4;
|
}
|
}
|
|
}
|
return funcState;
|
}
|
|
//找到可以操作的图鉴武将
|
public int FindHeroIDCanAddCollectAttr(int excludeHeroID = 0)
|
{
|
foreach (var kv in heroCollectInfoDic)
|
{
|
if (kv.Key == excludeHeroID)
|
continue;
|
var state = GetHeroBookState(kv.Key, HeroConfig.Get(kv.Key).Quality);
|
if (state == 1 || state == 3 || state == 4)
|
{
|
return kv.Key;
|
}
|
}
|
return 0;
|
}
|
|
public int GetHeroBookPer(int heroID)
|
{
|
var config = HeroQualityConfig.Get(HeroConfig.Get(heroID).Quality);
|
HB122_tagSCHeroInfo.tagSCHero heroData;
|
TryGetHeroBookInfo(heroID, out heroData);
|
if (heroData.BookInitState < 2)
|
{
|
return 0;
|
}
|
return config.BookInitAddPer + heroData.BookStarLV * config.BookStarAddPer + heroData.BookBreakLV * config.BookBreakLVAddPer;
|
}
|
}
|