using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
///
/// 武将图鉴界面
///
public class HeroCollectionWin : UIBase
{
[SerializeField] Button heroPackBtn;
[SerializeField] Text heroPackText;
[SerializeField] ScrollerController heroListScroller;
[SerializeField] List totalAttrList;
[SerializeField] Button attrBtn;
[SerializeField] HeroSelectBehaviour fiterManager; //武将筛选
SinglePack singlePack;
protected override void InitComponent()
{
attrBtn.AddListener(() =>
{
SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition);
SmallTipWin.showText = Language.Get("herocard6");
UIManager.Instance.OpenWindow();
});
heroPackBtn.AddListener(() =>
{
HeroUIManager.Instance.QueryUnLockHeroPack();
});
}
protected override void OnPreOpen()
{
singlePack = PackManager.Instance.GetSinglePack(PackType.Hero);
PackManager.Instance.gridRefreshEvent += GridRefreshEvent;
PackManager.Instance.RefreshItemEvent += RefreshItemEvent;
HeroUIManager.Instance.OnHeroCollectEvent += OnHeroCollectEvent;
heroListScroller.OnRefreshCell += OnRefreshCell;
HeroUIManager.Instance.selectHeroCollectListJob = 0;
HeroUIManager.Instance.selectHeroCollectListCountry = 0;
HeroUIManager.Instance.SortHeroCollectList();
Display();
}
protected override void OnPreClose()
{
PackManager.Instance.gridRefreshEvent -= GridRefreshEvent;
PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
HeroUIManager.Instance.OnHeroCollectEvent -= OnHeroCollectEvent;
heroListScroller.OnRefreshCell -= OnRefreshCell;
}
void Display()
{
fiterManager.Display(0, HeroUIManager.Instance.selectHeroCollectListJob, HeroUIManager.Instance.selectHeroCollectListCountry, SelectJobCountry);
CreateScroller();
RefreshTotalAttr();
RefreshPackCount();
}
void RefreshItemEvent(PackType type, int index, int itemID)
{
if (type != PackType.Hero)
return;
RefreshPackCount();
}
void RefreshPackCount()
{
int count = singlePack.GetAllItems().Count;
heroPackText.text = UIHelper.AppendColor(count >= singlePack.unlockedGridCount ? TextColType.Red : TextColType.NavyBrown,
string.Format("{0}/{1}", count, singlePack.unlockedGridCount));
}
void GridRefreshEvent(PackType type)
{
if (type != PackType.Hero)
return;
RefreshPackCount();
}
void RefreshTotalAttr()
{
for (int i = 0; i < totalAttrList.Count; i++)
{
totalAttrList[i].text = PlayerPropertyConfig.GetFullDescription(PlayerPropertyConfig.basePerAttrs[i],
HeroUIManager.Instance.allHeroBookPer);
}
}
void SelectJobCountry(int job, int country)
{
HeroUIManager.Instance.selectHeroCollectListJob = job;
HeroUIManager.Instance.selectHeroCollectListCountry = country;
HeroUIManager.Instance.SortHeroCollectList();
CreateScroller();
}
void CreateScroller()
{
heroListScroller.Refresh();
var _List = HeroUIManager.Instance.heroCollectDict.Keys.ToList();
_List.Reverse();
for (int i = 0; i < _List.Count; i++)
{
var ids = HeroUIManager.Instance.heroCollectDict[_List[i]];
if (ids.Count == 0)
continue;
//品质
heroListScroller.AddCell(ScrollerDataType.Header, _List[i]);
//武将
for (int j = 0; j < ids.Count; j++)
{
if (j % 4 == 0)
{
CellInfo cellInfo = new CellInfo();
cellInfo.infoInt1 = _List[i];
heroListScroller.AddCell(ScrollerDataType.Normal, j, cellInfo);
}
}
}
heroListScroller.Restart();
}
void OnRefreshCell(ScrollerDataType type, CellView cell)
{
if (type == ScrollerDataType.Header)
{
var _cell = cell.GetComponent();
_cell.SetSprite("herocoltitle" + cell.index);
}
else if (type == ScrollerDataType.Normal)
{
var _cell = cell as HeroCollectionLineCell;
_cell?.Display(cell.index, cell.info.Value.infoInt1);
}
}
void OnHeroCollectEvent()
{
RefreshTotalAttr();
heroListScroller.m_Scorller.RefreshActiveCellViews();
}
}