using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
///
/// 武将列表
///
public class HeroListWin : UIBase
{
[SerializeField] Button heroPackBtn;
[SerializeField] Text heroPackText;
[SerializeField] ScrollerController heroListScroller;
[SerializeField] GameObject heroListEmpty;
[SerializeField] List attrOnList; //全体属性加成
[SerializeField] GameObject attrOnTip;
[SerializeField] Button attrOnTipBtn;
[SerializeField] Button changeHeroPosBtn; //布阵按钮
[SerializeField] Transform heroSelectBehaviour;
HeroSelectBehaviour fiterManager; //武将筛选
[SerializeField] ButtonEx lineupRecommendBtn;
SinglePack singlePack;
///
protected override void InitComponent()
{
heroPackBtn.AddListener(() =>
{
HeroUIManager.Instance.QueryUnLockHeroPack();
});
changeHeroPosBtn.AddListener(() =>
{
HeroUIManager.Instance.selectTeamType = TeamType.Story;
UIManager.Instance.OpenWindow();
});
attrOnTipBtn.AddListener(() =>
{
attrOnTip.SetActive(!attrOnTip.activeSelf);
});
fiterManager = HeroSelectBehaviour.Create(heroSelectBehaviour);
lineupRecommendBtn.AddListener(() =>
{
UIManager.Instance.OpenWindow();
});
}
protected override void OnPreOpen()
{
singlePack = PackManager.Instance.GetSinglePack(PackType.Hero);
heroListScroller.OnRefreshCell += OnRefreshCell;
PackManager.Instance.gridRefreshEvent += GridRefreshEvent;
PackManager.Instance.RefreshItemEvent += RefreshItemEvent;
UIManager.Instance.OnCloseWindow += OnCloseWindow;
// HeroManager.Instance.onHeroDeleteEvent += HeroDeleteEvent;
HeroUIManager.Instance.SortHeroList();
UIManager.Instance.OnOpenWindow += OnOpenWindow;
// CreateScroller();
Refresh();
fiterManager.Display(0, SelectJobCountry);
}
protected override void OnPreClose()
{
heroListScroller.OnRefreshCell -= OnRefreshCell;
PackManager.Instance.RefreshItemEvent -= RefreshItemEvent;
PackManager.Instance.gridRefreshEvent -= GridRefreshEvent;
UIManager.Instance.OnCloseWindow -= OnCloseWindow;
// HeroManager.Instance.onHeroDeleteEvent -= HeroDeleteEvent;
UIManager.Instance.OnOpenWindow -= OnOpenWindow;
}
private void OnCloseWindow(UIBase closeUI)
{
//其他武将功能产生数据变化,需要刷新武将列表
if (closeUI is HeroTrainWin ||
closeUI is HeroCallWin ||
closeUI is HeroDeleteWin ||
closeUI is HeroPosWin)
{
HeroUIManager.Instance.SortHeroList();
CreateScroller();
Refresh();
}
}
private void OnOpenWindow(UIBase openUI)
{
if (openUI is NewBieWin)
{
if (HeroUIManager.Instance.heroStarGuideDic.ContainsKey(NewBieCenter.Instance.guideStep))
{
int jumpHeroID = HeroUIManager.Instance.heroStarGuideDic[NewBieCenter.Instance.guideStep];
heroListScroller.JumpIndex(FindJumpIndexByHeroID(jumpHeroID));
}
}
}
int FindJumpIndexByHeroID(int heroID)
{
int index = -1;
foreach (var guid in HeroUIManager.Instance.heroSortList)
{
index++;
var hero = HeroManager.Instance.GetHero(guid);
if (hero == null)
continue;
if (hero.heroId == heroID)
{
return index / 4 - 1;
}
}
return -1;
}
public override void Refresh()
{
RefreshEmptyTip();
OnBattleTeamAttrPer();
RefreshPackCount();
}
// void HeroDeleteEvent(int heroID)
// {
// HeroUIManager.Instance.SortHeroList();
// heroListScroller.m_Scorller.RefreshActiveCellViews();
// }
void RefreshEmptyTip()
{
if (HeroUIManager.Instance.heroSortList.Count <= 0)
{
heroListEmpty.SetActive(true);
heroListScroller.SetActive(false);
}
else
{
heroListEmpty.SetActive(false);
heroListScroller.SetActive(true);
}
}
/// 回调参数: 职业,国家,伤害类型,6大战斗属性,特殊属性
void SelectJobCountry(List selects)
{
HeroUIManager.Instance.selectHeroList = selects;
HeroUIManager.Instance.SortHeroList();
RefreshEmptyTip();
CreateScroller();
heroListScroller.JumpIndex(0);
}
//上阵加成
void OnBattleTeamAttrPer()
{
var valuePer = HeroUIManager.Instance.GetAllHeroPer();
// var team = TeamManager.Instance.GetTeam(TeamType.Story);
// if (team != null)
// {
// for (int i = 0; i < team.serverHeroes.Length; i++)
// {
// if (team.serverHeroes[i] == null)
// continue;
// var hero = HeroManager.Instance.GetHero(team.serverHeroes[i].guid);
// if (hero != null)
// {
// valuePer += hero.GetAddPer();
// }
// }
// }
//全体属性
for (int i = 0; i < attrOnList.Count; i++)
{
attrOnList[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer));
}
}
void OnRefreshCell(ScrollerDataType type, CellView cell)
{
if (type == ScrollerDataType.Header)
{
var _cell1 = cell as HeroCardLineTipCell;
_cell1.Display(cell.index);
}
else
{
var _cell = cell as HeroCardLineCell;
_cell.Display(cell.index, activeCount);
}
}
int activeCount;
void CreateScroller()
{
heroListScroller.Refresh();
heroListScroller.AddCell(ScrollerDataType.Header, 0);
activeCount = GetAttrActiveHeroCount();
for (int i = 0; i < activeCount; i++)
{
if (i % 4 == 0)
{
heroListScroller.AddCell(ScrollerDataType.Normal, i);
}
}
heroListScroller.AddCell(ScrollerDataType.Header, 1);
var unActiveCount = HeroUIManager.Instance.heroSortList.Count - activeCount;
for (int i = 0; i < unActiveCount; i++)
{
if (i % 4 == 0)
{
//加10000 表示未生效
heroListScroller.AddCell(ScrollerDataType.Normal, 10000 + activeCount + i);
}
}
heroListScroller.Restart();
heroListScroller.lockType = EnhanceLockType.KeepVertical;
}
int GetAttrActiveHeroCount()
{
int count = 0;
for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++)
{
var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.heroSortList[i]);
if (hero == null)
continue;
if (hero.isAttrActive)
{
count++;
}
else
{
break;
}
}
return count;
}
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();
}
}