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