using vnxbqy.UI;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
class EquipShenDecomposeWin : ILWindow
|
{
|
Button closeBtn;
|
static ScrollerController scrollerShen;
|
ScrollerController scrollerDecom;
|
Button deCompose;
|
|
EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
|
static PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
|
#region Built-in
|
protected override void BindController()
|
{
|
closeBtn = proxy.GetWidgtEx<Button>("CloseBtn");
|
scrollerShen = proxy.GetWidgtEx<ScrollerController>("ScrollerShen");
|
scrollerDecom = proxy.GetWidgtEx<ScrollerController>("ScrollerDecom");
|
deCompose = proxy.GetWidgtEx<Button>("decompose");
|
|
}
|
|
protected override void AddListeners()
|
{
|
closeBtn.SetListener(() => {
|
WindowCenter.Instance.CloseIL<EquipShenDecomposeWin>();
|
});
|
|
deCompose.SetListener(OnDecompose);
|
}
|
|
protected override void OnAfterOpen()
|
{
|
packModel.refreshItemCountEvent += refreshItemCountEvent;
|
scrollerShen.OnRefreshCell += OnRefreshShenCell;
|
scrollerDecom.OnRefreshCell += OnRefreshDeposeCell;
|
EquipEvolveModel.Instance.SelectShenDecomEvent += OnSelectShenDecomEvent;
|
GameEvent.OnRefrechPackEvent += refreshPackEvent;
|
CreateShenEquip();
|
CreateScrollerDecom();
|
|
}
|
|
protected override void OnPreClose()
|
{
|
packModel.refreshItemCountEvent -= refreshItemCountEvent;
|
scrollerShen.OnRefreshCell -= OnRefreshShenCell;
|
scrollerDecom.OnRefreshCell -= OnRefreshDeposeCell;
|
EquipEvolveModel.Instance.SelectShenDecomEvent -= OnSelectShenDecomEvent;
|
GameEvent.OnRefrechPackEvent -= refreshPackEvent;
|
}
|
|
#endregion
|
|
void OnDecompose()
|
{
|
var pak = new IL_CA331_tagCMEquipShenDecompose();
|
|
List<ushort> severIndex = new List<ushort>();
|
for (int i = 0; i < EquipEvolveModel.Instance.shenDecomSelects.Count; i++)
|
{
|
severIndex.Add((ushort)EquipEvolveModel.Instance.shenGirdIndexs[EquipEvolveModel.Instance.shenDecomSelects[i]]);
|
}
|
pak.IndexList = severIndex.ToArray();
|
pak.Count = (byte)pak.IndexList.Length;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
// 暂不修复问题:背包整理会导致重选,如自动战斗触发
|
// 预创建空行
|
static void CreateShenEquip()
|
{
|
scrollerShen.Refresh();
|
var items = packModel.GetItems(PackType.Item, new SinglePack.FilterParams());
|
EquipEvolveModel.Instance.shenDecomMaterials.Clear();
|
EquipEvolveModel.Instance.shenDecomSelects.Clear();
|
EquipEvolveModel.Instance.shenGirdIndexs.Clear();
|
int createLines = 0;
|
int shenCount = 0;
|
|
if (items != null)
|
{
|
for (int i = 0; i < items.Count; i++)
|
{
|
if (ILEquipShenEvolveConfig.equipEvolveSourceIDs.ContainsKey(items[i].itemId))
|
{
|
EquipEvolveModel.Instance.shenGirdIndexs.Add(items[i].gridIndex);
|
if (shenCount % 4 == 0)
|
{
|
//4个一行
|
scrollerShen.AddCell(ScrollerDataType.Header, shenCount);
|
createLines++;
|
}
|
shenCount++;
|
}
|
}
|
}
|
|
for (int i = createLines; i <= 5; i++)
|
{
|
scrollerShen.AddCell(ScrollerDataType.Header, 10000);
|
}
|
scrollerShen.Restart();
|
}
|
|
public static void refreshPackEvent(PackType type)
|
{
|
if (type != PackType.Item)
|
return;
|
CreateShenEquip();
|
}
|
|
private void refreshItemCountEvent(PackType type, int index, int id)
|
{
|
if (type != PackType.Item)
|
return;
|
if (ILEquipShenEvolveConfig.Get(id) != null)
|
{
|
CreateShenEquip();
|
}
|
}
|
|
private void OnRefreshShenCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetILBehaviour<EquipShenDecomCell>();
|
_cell.Display(cell.index);
|
}
|
|
private void OnRefreshDeposeCell(ScrollerDataType type, CellView cell)
|
{
|
var _cell = cell.GetILBehaviour<EquipShenDecomMaterialCell>();
|
_cell.Display(cell.index);
|
}
|
|
void OnSelectShenDecomEvent()
|
{
|
CreateScrollerDecom();
|
}
|
|
void CreateScrollerDecom()
|
{
|
scrollerDecom.Refresh();
|
EquipEvolveModel.Instance.shenDecomMaterials = GetDecomposeItems();
|
var keys = EquipEvolveModel.Instance.shenDecomMaterials.Keys.ToList();
|
keys.Sort();
|
for (int i = 0; i < keys.Count; i++)
|
{
|
if (i % 3 == 0)
|
{
|
scrollerDecom.AddCell(ScrollerDataType.Header, i);
|
}
|
}
|
|
scrollerDecom.Restart();
|
}
|
|
|
Dictionary<int, int> GetDecomposeItems()
|
{
|
Dictionary<int, int> itemCounts = new Dictionary<int, int>();
|
for (int i = 0; i < EquipEvolveModel.Instance.shenDecomSelects.Count; i++)
|
{
|
var index = EquipEvolveModel.Instance.shenGirdIndexs[EquipEvolveModel.Instance.shenDecomSelects[i]];
|
var item = packModel.GetItemByIndex(PackType.Item, index);
|
if (item == null) continue;
|
var result = GetDecomposeItemsSingle(item.itemId);
|
|
var keys = result.Keys.ToList();
|
for (int j = 0; j < keys.Count; j++)
|
{
|
|
var itemID = keys[j];
|
if (itemCounts.ContainsKey(itemID))
|
{
|
itemCounts[itemID] = itemCounts[itemID] + result[itemID];
|
}
|
else
|
{
|
itemCounts[itemID] = result[itemID];
|
}
|
|
}
|
}
|
|
return itemCounts;
|
}
|
|
// 获取分解后的装备和材料
|
Dictionary<int, int> GetDecomposeItemsSingle(int equipID)
|
{
|
var equipEvolveID = equipID;
|
Dictionary<int, int> itemCounts = new Dictionary<int, int>();
|
//不写递归避免出现问题
|
for (int i = 0; i < 10; i++)
|
{
|
if (!ILEquipShenEvolveConfig.equipEvolveSourceIDs.ContainsKey(equipEvolveID))
|
{
|
break;
|
}
|
equipEvolveID = ILEquipShenEvolveConfig.equipEvolveSourceIDs[equipEvolveID];
|
var items = ILEquipShenEvolveConfig.TryGetMaterial(equipEvolveID);
|
for (int j = 0; j < items.Length; j++)
|
{
|
var itemID = items[j][0];
|
var itemCnt = (int)Mathf.Ceil(items[j][1] * EquipEvolveModel.Instance.decomPer);
|
|
if (itemCounts.ContainsKey(itemID))
|
{
|
itemCounts[itemID] = itemCounts[itemID] + itemCnt;
|
}
|
else
|
{
|
itemCounts[itemID] = itemCnt;
|
}
|
|
}
|
|
}
|
|
if (equipEvolveID != equipID)
|
{
|
//加上初始装
|
itemCounts[equipEvolveID] = 1;
|
}
|
return itemCounts;
|
}
|
}
|