| using System; | 
| using UnityEngine; | 
|   | 
| /// <summary> | 
| /// 背包界面 | 
| /// </summary> | 
| public class RolePackWin : UIBase | 
| { | 
|   | 
|     [SerializeField] ScrollerController packScroller; | 
|     [SerializeField] ScrollerController composeScroller;    //待策划确定 | 
|     [SerializeField] GroupButtonEx packBtn; | 
|     [SerializeField] GroupButtonEx composeBtn; | 
|   | 
|   | 
|     SinglePack itemPack; | 
|     bool isRefreshPack = false;  //是否刷新背包 | 
|     /// </summary> | 
|     protected override void InitComponent() | 
|     { | 
|         packBtn.AddListener(() => | 
|         { | 
|             functionOrder = 0; | 
|             Refresh(); | 
|         }); | 
|         composeBtn.AddListener(() => | 
|         { | 
|             functionOrder = 1; | 
|             Refresh(); | 
|         }); | 
|     } | 
|   | 
|   | 
|     protected override void OnPreOpen() | 
|     { | 
|         itemPack = PackManager.Instance.GetSinglePack(PackType.Item); | 
|         packScroller.OnRefreshCell += RefreshPackCell; | 
|         composeScroller.OnRefreshCell += RefreshComposeCell; | 
|         PackManager.Instance.refrechPackEvent += RefrechPackEvent; | 
|         PackManager.Instance.RefreshItemEvent += RefreshItemEvent; | 
|   | 
|         if (functionOrder == 0) | 
|         { | 
|             packBtn.SelectBtn(); | 
|         } | 
|         else | 
|         { | 
|             composeBtn.SelectBtn(); | 
|         } | 
|         SortItems(); | 
|         Refresh(); | 
|     } | 
|   | 
|     protected override void OnPreClose() | 
|     { | 
|         packScroller.OnRefreshCell -= RefreshPackCell; | 
|         composeScroller.OnRefreshCell -= RefreshComposeCell; | 
|         PackManager.Instance.refrechPackEvent -= RefrechPackEvent; | 
|     } | 
|   | 
|     float cdTime = 0f; | 
|     void LateUpdate() | 
|     { | 
|         if (isRefreshPack) | 
|         { | 
|             //刷新cd0.2秒 | 
|             if (Time.time > cdTime + 0.2f) | 
|             { | 
|                 SortItems(); | 
|                 Refresh(); | 
|                 isRefreshPack = false; | 
|                 cdTime = Time.time; | 
|             } | 
|   | 
|         } | 
|     } | 
|   | 
|     void RefrechPackEvent(PackType type) | 
|     { | 
|         if (type != PackType.Item) | 
|         { | 
|             return; | 
|         } | 
|         //延迟0.2秒刷新 设置 isRefreshPack为true | 
|         isRefreshPack = true; | 
|   | 
|     } | 
|   | 
|     void RefreshItemEvent(PackType type, int index, int itemID) | 
|     { | 
|         if (type != PackType.Item) | 
|         { | 
|             return; | 
|         } | 
|         isRefreshPack = true; | 
|     } | 
|   | 
|   | 
|     public override void Refresh() | 
|     { | 
|         if (functionOrder == 1) | 
|         { | 
|             RefreshComposeItemData(); | 
|              | 
|         } | 
|         packScroller.SetActive(functionOrder == 0); | 
|         composeScroller.SetActive(functionOrder != 0); | 
|         CreatePackScroller(); | 
|         CreateComposeScroller(); | 
|     } | 
|   | 
|     void SortItems() | 
|     { | 
|         itemPack.itemGuidList.Clear(); | 
|         var itemDict = itemPack.GetAllItems(); | 
|         foreach (var itemID in itemDict.Values) | 
|         { | 
|             itemPack.itemGuidList.Add(itemID.guid); | 
|         } | 
|         itemPack.itemGuidList.Sort(CmpItem); | 
|     } | 
|   | 
|     int CmpItem(string guidA, string guidB) | 
|     { | 
|         var itemA = PackManager.Instance.GetItemByGuid(guidA); | 
|         var itemB = PackManager.Instance.GetItemByGuid(guidB); | 
|   | 
|         var typeIndexA = Array.IndexOf(PackManager.Instance.itemPackSortTyps, itemA.config.Type); | 
|         var typeIndexB = Array.IndexOf(PackManager.Instance.itemPackSortTyps, itemB.config.Type); | 
|         if (typeIndexA != typeIndexB) | 
|         { | 
|             return typeIndexA - typeIndexB; | 
|         } | 
|   | 
|         var qualityA = itemA.config.ItemColor; | 
|         var qualityB = itemB.config.ItemColor; | 
|         if (qualityA != qualityB) | 
|         { | 
|             return qualityB - qualityA; | 
|         } | 
|   | 
|         var lvA = itemA.config.LV; | 
|         var lvB = itemB.config.LV; | 
|         if (lvA != lvB) | 
|         { | 
|             return lvB - lvA; | 
|         } | 
|   | 
|         var itemIDA = itemA.config.ID; | 
|         var itemIDB = itemB.config.ID; | 
|         return itemIDA - itemIDB; | 
|     } | 
|   | 
|     void CreatePackScroller() | 
|     { | 
|         if (functionOrder != 0) | 
|         { | 
|             return; | 
|         } | 
|         packScroller.Refresh(); | 
|         for (int i = 0; i < itemPack.itemGuidList.Count; i++) | 
|         { | 
|             if (i % 5 == 0) | 
|             { | 
|                 packScroller.AddCell(ScrollerDataType.Header, i); | 
|             } | 
|         } | 
|         packScroller.Restart(); | 
|     } | 
|   | 
|     void CreateComposeScroller() | 
|     { | 
|         if (functionOrder != 1) | 
|         { | 
|             return; | 
|         } | 
|         composeScroller.Refresh(); | 
|         for (int i = 0; i < PackManager.Instance.composeItemGuidList.Count; i++) | 
|         { | 
|             if (i % 5 == 0) | 
|             { | 
|                 composeScroller.AddCell(ScrollerDataType.Header, i); | 
|             } | 
|         } | 
|         composeScroller.Restart(); | 
|     } | 
|   | 
|     void RefreshPackCell(ScrollerDataType type, CellView cell) | 
|     { | 
|         var _cell = cell as RolePackLineCell; | 
|         _cell.Display(cell.index); | 
|     } | 
|   | 
|     void RefreshComposeCell(ScrollerDataType type, CellView cell) | 
|     { | 
|         var _cell = cell as ComposeLineCell; | 
|         _cell.Display(cell.index); | 
|     } | 
|   | 
|     void RefreshComposeItemData() | 
|     {  | 
|         PackManager.Instance.composeItemGuidList.Clear(); | 
|     } | 
| } |