using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
/// <summary>
|
/// 武将列表
|
/// </summary>
|
public class HeroListWin : UIBase
|
{
|
[SerializeField] Button heroPackBtn;
|
[SerializeField] Text heroPackText;
|
[SerializeField] ScrollerController heroListScroller;
|
[SerializeField] GameObject heroListEmpty;
|
[SerializeField] List<Text> attrOnList; //全体属性加成
|
[SerializeField] GameObject attrOnTip;
|
[SerializeField] Button attrOnTipBtn;
|
|
[SerializeField] Button changeHeroPosBtn; //布阵按钮
|
[SerializeField] Transform heroSelectBehaviour;
|
HeroSelectBehaviour fiterManager; //武将筛选
|
[SerializeField] ButtonEx lineupRecommendBtn;
|
|
|
SinglePack singlePack;
|
|
/// </summary>
|
protected override void InitComponent()
|
{
|
heroPackBtn.AddListener(() =>
|
{
|
HeroUIManager.Instance.QueryUnLockHeroPack();
|
});
|
changeHeroPosBtn.AddListener(() =>
|
{
|
HeroUIManager.Instance.selectTeamType = TeamType.Story;
|
UIManager.Instance.OpenWindow<HeroPosWin>();
|
});
|
attrOnTipBtn.AddListener(() =>
|
{
|
attrOnTip.SetActive(!attrOnTip.activeSelf);
|
});
|
|
fiterManager = HeroSelectBehaviour.Create(heroSelectBehaviour);
|
lineupRecommendBtn.AddListener(() =>
|
{
|
UIManager.Instance.OpenWindow<LineupRecommendBaseWin>();
|
});
|
}
|
|
|
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));
|
}
|
}
|
}
|
|
|
protected override void NextFrameAfterOpen()
|
{
|
if (!NewBieCenter.Instance.inGuiding && !HeroUIManager.Instance.isOpenHeroTip && TimeUtility.OpenDay < 3)
|
{
|
attrOnTip.SetActive(true);
|
HeroUIManager.Instance.isOpenHeroTip = true;
|
}
|
}
|
|
|
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<int> 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();
|
}
|
}
|