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] HeroSelectBehaviour fiterManager; //武将筛选 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); }); } protected override void OnPreOpen() { HeroUIManager.Instance.selectHeroListJob = 0; HeroUIManager.Instance.selectHeroListCountry = 0; 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(); CreateScroller(); Refresh(); } protected override void OnPreClose() { heroListScroller.OnRefreshCell -= OnRefreshCell; PackManager.Instance.RefreshItemEvent -= RefreshItemEvent; PackManager.Instance.gridRefreshEvent -= GridRefreshEvent; UIManager.Instance.OnCloseWindow -= OnCloseWindow; HeroManager.Instance.onHeroDeleteEvent -= HeroDeleteEvent; } private void OnCloseWindow(UIBase closeUI) { //其他武将功能产生数据变化,需要刷新武将列表 if (closeUI is HeroTrainWin || closeUI is HeroCallWin || closeUI is HeroPosWin) { HeroUIManager.Instance.SortHeroList(); CreateScroller(); Refresh(); } } public override void Refresh() { RefreshEmptyTip(); OnBattleTeamAttrPer(); RefreshPackCount(); fiterManager.Display(0, HeroUIManager.Instance.selectHeroListJob, HeroUIManager.Instance.selectHeroListCountry, SelectJobCountry); } 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); } } void SelectJobCountry(int job, int country) { HeroUIManager.Instance.selectHeroListJob = job; HeroUIManager.Instance.selectHeroListCountry = country; HeroUIManager.Instance.SortHeroList(); RefreshEmptyTip(); CreateScroller(); } //上阵加成 void OnBattleTeamAttrPer() { var valuePer = 0; 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.GetOnBattleAddPer(); } } } //上阵属性 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) { var _cell = cell as HeroCardLineCell; _cell.Display(cell.index); } void CreateScroller() { heroListScroller.Refresh(); for (int i = 0; i < HeroUIManager.Instance.heroSortList.Count; i++) { if (i % 4 == 0) { heroListScroller.AddCell(ScrollerDataType.Header, i); } } heroListScroller.Restart(); } 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(); } }