| 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] HeroSelectBehaviour fiterManager;  //武将筛选 | 
|   | 
|     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); | 
|         }); | 
|     } | 
|   | 
|   | 
|     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(); | 
|     } | 
| } |