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