using Cal.DataTable; using ET; using FairyGUI; using System; using System.Collections.Generic; namespace ET { public class UpgradeUIAwakeSyatem : AwakeSystem { public override void Awake(UpgradeUI self) { self.Awake(); } } public class UpgradeUIDestroySyatem : DestroySystem { public override void Destroy(UpgradeUI self) { self.Destroy(); } } public class UpgradeUI : Entity { public FUI_UpgradeUI ui; private bool isLock; public void Awake() { zoneScene = this.ZoneScene(); ui = GetParent(); AwakeAsync().Coroutine(); } private async ETVoid AwakeAsync() { //!临时变量 isLock = false; ItemUpgrade itemUpgrade = null; ui.m_txtMaterial.text = null; int upgradeIndex = 0; this.ui.m_btnLock.self.onClick.Set(()=>isLock=this.ui.m_btnLock.self.selected); //!放入事件 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 ClientItemData data)) { string icon = BagHelper.GetIconName(data.ItemId).Item2; ui.m_btnItem.self.icon = UIPackage.GetItemURL(FUIPackage.Bag, icon); //!寻找下一个装备 itemUpgrade = DataTableHelper.Get(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; ItemUpgrade.UpgradeNeedMaterial 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 (ClientItemData 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; } M2C_Upgrade ret = await zoneScene.GetComponent().Call(new C2M_Upgrade { Index = upgradeIndex ,isLock = this.isLock}); 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 itemKVDic; private Scene zoneScene; private void OpenTreeUI(ItemUpgrade itemUpgrade) { if (itemKVDic == null) { itemKVDic = new Dictionary(); var arr = DataTableHelper.GetAll(); 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); } FUIWindowComponent window = ui.GetOrAddComponent(); 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() { } } }