202 lines
7.6 KiB
C#
202 lines
7.6 KiB
C#
using Cal.DataTable;
|
||
using ET;
|
||
using FairyGUI;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
|
||
namespace ET
|
||
{
|
||
public class UpgradeUIAwakeSyatem : AwakeSystem<UpgradeUI>
|
||
{
|
||
public override void Awake(UpgradeUI self)
|
||
{
|
||
self.Awake();
|
||
}
|
||
}
|
||
public class UpgradeUIDestroySyatem : DestroySystem<UpgradeUI>
|
||
{
|
||
public override void Destroy(UpgradeUI self)
|
||
{
|
||
self.Destroy();
|
||
}
|
||
}
|
||
public class UpgradeUI : Entity
|
||
{
|
||
public FUI_UpgradeUI ui;
|
||
public void Awake()
|
||
{
|
||
ui = GetParent<FUI_UpgradeUI>();
|
||
AwakeAsync().Coroutine();
|
||
}
|
||
private async ETVoid AwakeAsync()
|
||
{
|
||
//!临时变量
|
||
ItemUpgrade itemUpgrade = null;
|
||
ui.m_txtMaterial.text = null;
|
||
int upgradeIndex = 0;
|
||
//!放入事件
|
||
ui.m_btnItem.self.onDrop.Set1(concent =>
|
||
{
|
||
if (concent.data is UIDragArgs args)
|
||
{
|
||
int index = args.index;
|
||
args.Release();
|
||
if (ClientItemDataComponent.Instance.ItemDic.TryGetValueByKey1(index, out var data))
|
||
{
|
||
string icon = BagHelper.GetIconName(data.ItemId).Item2;
|
||
|
||
ui.m_btnItem.self.icon = UIPackage.GetItemURL(FUIPackage.Bag, icon);
|
||
//!寻找下一个装备
|
||
itemUpgrade = DataTableHelper.Get<ItemUpgrade>(data.ItemId);
|
||
if (itemUpgrade == null)
|
||
{
|
||
TipHelper.OpenUI("此物品不能进化!");
|
||
return;
|
||
}
|
||
upgradeIndex = index;
|
||
icon = BagHelper.GetIconName(itemUpgrade.UpgradeItemId).Item2;
|
||
ui.m_btnFinalItem.self.icon = UIPackage.GetItemURL(FUIPackage.Bag, icon);
|
||
|
||
icon = null;
|
||
var bagDic = ClientItemDataComponent.Instance.ItemDic;
|
||
//!判断材料
|
||
for (int i = itemUpgrade.UpgradeNeedMaterialArr.Length - 1; i >= 0; i--)
|
||
{
|
||
int materialCount = 0;
|
||
var needMaterial = itemUpgrade.UpgradeNeedMaterialArr[i];
|
||
int count = needMaterial.UpgradeNeedMaterial_Count;
|
||
if (data.ItemId == needMaterial.UpgradeNeedMaterial_Id)
|
||
count++;
|
||
if (!bagDic.TryGetValueByKey2(needMaterial.UpgradeNeedMaterial_Id, out var itemList) || itemList.Count == 0)
|
||
{ }
|
||
else
|
||
{
|
||
foreach (var item in itemList)
|
||
materialCount += item.Count;
|
||
}
|
||
string name = BagHelper.GetIconName(needMaterial.UpgradeNeedMaterial_Id).Item1;
|
||
string color = count > materialCount ? "FF0000" : "FFFFFF";
|
||
icon += $"[color=#{color}]{name} x{count}(持有{materialCount})[/color]\n";
|
||
}
|
||
ui.m_txtMaterial.text = icon;
|
||
ui.m_btnUpgrade.self.title = $"进化{(itemUpgrade.SucceefulRate==1?"":$"({itemUpgrade.SucceefulRate:p0})")}";
|
||
}
|
||
}
|
||
});
|
||
//!显示页签
|
||
ui.m_btnItem.self.onClick.Clear();
|
||
ui.m_btnFinalItem.self.onClick.Clear();
|
||
TabHelper.SetTab(ui.m_btnItem.self, () =>
|
||
{
|
||
if (itemUpgrade == null) return;
|
||
TabHelper.OpenUI((int)itemUpgrade.Id);
|
||
});
|
||
TabHelper.SetTab(ui.m_btnFinalItem.self, () =>
|
||
{
|
||
if (itemUpgrade == null) return;
|
||
TabHelper.OpenUI(itemUpgrade.UpgradeItemId);
|
||
});
|
||
//!进化树
|
||
ui.m_btnTree.self.onClick.Set(() =>
|
||
{
|
||
OpenTreeUI(itemUpgrade);
|
||
});
|
||
//!开始进化
|
||
ui.m_btnUpgrade.self.onClick.Set(async () =>
|
||
{
|
||
if (upgradeIndex == 0)
|
||
{
|
||
TipHelper.OpenUI("请拖拽能进化物品到格子中!");
|
||
return;
|
||
}
|
||
var ret = await SessionComponent.Instance.Call<M2C_Upgrade>(new C2M_Upgrade { Index = upgradeIndex });
|
||
if (!ret.Message.IsNullOrEmpty())
|
||
{
|
||
TipHelper.OpenUI(ret.Message);
|
||
return;
|
||
}
|
||
Game.EventSystem.Publish_Sync(new ET.EventType.UpdateBagUI
|
||
{
|
||
list=ret.BagMapList
|
||
});
|
||
//!清空
|
||
Clear();
|
||
});
|
||
void Clear()
|
||
{
|
||
ui.m_txtMaterial.text = null;
|
||
ui.m_btnFinalItem.self.icon = null;
|
||
ui.m_btnItem.self.icon = null;
|
||
}
|
||
await ETTask.CompletedTask;
|
||
}
|
||
|
||
private static Dictionary<int, int> itemKVDic;
|
||
private void OpenTreeUI(ItemUpgrade itemUpgrade)
|
||
{
|
||
if (itemKVDic == null)
|
||
{
|
||
itemKVDic = new Dictionary<int, int>();
|
||
var arr = DataTableHelper.GetAll<ItemUpgrade>();
|
||
foreach (ItemUpgrade item in arr)
|
||
{
|
||
itemKVDic.Add((int)item.Id, item.UpgradeItemId);
|
||
}
|
||
}
|
||
if (itemUpgrade == null) return;
|
||
if (!(FUIComponent.Instance.Get(FUIPackage.Bag_UpgradeTreeUI) is FUI_UpgradeTreeUI ui))
|
||
{
|
||
ui = FUI_UpgradeTreeUI.CreateInstance(this.ui);
|
||
ui.Name = FUIPackage.Bag_UpgradeTreeUI;
|
||
FUIComponent.Instance.Add(ui, true);
|
||
}
|
||
var window = ui.GetOrAddComponent<FUIWindowComponent>();
|
||
if (!window.IsShowing)
|
||
{
|
||
window.Show();
|
||
ui.m_Effect.Play();
|
||
window.Window.Left();
|
||
}
|
||
|
||
if (!itemKVDic.TryGetValue((int)itemUpgrade.Id, out int nextId))
|
||
{
|
||
TipHelper.OpenUI("当前物品以及进化到顶级了!");
|
||
return;
|
||
}
|
||
ui.m_itemList.RemoveChildrenToPool();
|
||
GLabel label;
|
||
int nextNextId = nextId;
|
||
nextId = (int)itemUpgrade.Id;
|
||
label = ui.m_itemList.AddItemFromPool().asLabel;
|
||
label.onClick.Clear();
|
||
label.GetControllerAt(0).selectedIndex = 0;
|
||
label.icon = UIPackage.GetItemURL(FUIPackage.Bag, BagHelper.GetIconName(nextId).Item2);
|
||
do
|
||
{
|
||
//!显示页签
|
||
int _temp = nextId;
|
||
TabHelper.SetTab(label, () =>
|
||
{
|
||
TabHelper.OpenUI(_temp);
|
||
});
|
||
label = ui.m_itemList.AddItemFromPool().asLabel;
|
||
label.onClick.Clear();
|
||
label.GetControllerAt(0).selectedIndex = 0;
|
||
label.icon = UIPackage.GetItemURL(FUIPackage.Bag, BagHelper.GetIconName(nextNextId).Item2);
|
||
nextId = nextNextId;
|
||
} while (itemKVDic.TryGetValue(nextId, out nextNextId));
|
||
//!显示页签
|
||
int temp = nextId;
|
||
TabHelper.SetTab(label, () =>
|
||
{
|
||
TabHelper.OpenUI(temp);
|
||
});
|
||
label.GetControllerAt(0).selectedIndex = 1;
|
||
}
|
||
public void Destroy()
|
||
{
|
||
|
||
}
|
||
}
|
||
}
|