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(); } }