using System; using UnityEngine; /// /// 背包界面 /// public class RolePackWin : UIBase { [SerializeField] ScrollerController packScroller; [SerializeField] ScrollerController composeScroller; //待策划确定 [SerializeField] GroupButtonEx packBtn; [SerializeField] GroupButtonEx composeBtn; SinglePack itemPack; bool isRefreshPack = false; //是否刷新背包 /// 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(); } }