using System; using System.Collections.Generic; using Fort23.Core; using Fort23.UTool; using GameLogic.Bag; namespace Fort23.Mono { [UIBinding(prefab = "EqRecyclePanel" )] public partial class EqRecyclePanel : UIPanel { private string eqItemPolPoolName = "eqItem"; private string awardItemPoolName = "awardItem"; private List pendingEqs = new List(); private void Init() { } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { btnBack.onClick.AddListener(OnclickClose); btnRec.onClick.AddListener(OnClickRecycle); } private async void OnClickRecycle() { if (pendingEqs.Count <= 0) { LogTool.Log("暂无可以分解的装备"); return; } foreach (WidgetItem widgetItem in pendingEqs) { ItemInfo itemInfo = BagController.Instance.allBagDic[widgetItem.itemInfo.guid]; if(itemInfo.count.Value - widgetItem.itemInfo.count.Value <= 0) { //删除到0后,如果装备被穿了,不移除背包。 if (itemInfo.eqInfo.isWear) { itemInfo.count.Value = 0; BagController.Instance.RemoveItem(itemInfo, false, false); } else{ // BagController.Instance.allBagDic.Remove(widgetItem.itemInfo.guid); BagController.Instance.RemoveItem(itemInfo, false, true); } } else { // itemInfo.count.Value -= widgetItem.itemInfo.count.Value; BagController.Instance.ModifyItem(itemInfo, false); } } BagController.Instance.ReInitAllEqItem(); foreach (KeyValuePair keyValuePair in awardDic) { BagController.Instance.AddItem(keyValuePair.Value.itemID, keyValuePair.Value.count.Value, keyValuePair.Value.guid); } AccountFileInfo.Instance.SavePlayerData(true); pendingEqs.Clear(); RewardsPanel rewardsPanel = await UIManager.Instance.LoadAndOpenPanel(null, layer: UILayer.Top); rewardsPanel.InitRewardsPanel(awardDic, delegate { OnclickClose(); awardDic.Clear(); }); EventManager.Instance.Dispatch(CustomEventType.Combat_EquipFall, null); } private void OnclickClose() { UIManager.Instance.HideUIUIPanel(this); UIManager.Instance.DormancyAllGComponent(eqItemPolPoolName); UIManager.Instance.DormancyAllGComponent(awardItemPoolName); } /// /// 回收奖励 /// private Dictionary awardDic = new Dictionary(); public async void InitEqRecyclePanel() { // GameObject eqGo = eqsUIObj[0] as GameObject; pendingEqs.Clear(); awardDic.Clear(); foreach (KeyValuePair>> keyValuePair in PlayerManager.Instance.eqController.allZyEqDic) { foreach (KeyValuePair> valuePair in keyValuePair.Value) { foreach (ItemInfo itemInfo in valuePair.Value) { if (!ValidityCheck(itemInfo)) { continue; } WidgetItem widgetItem = await UIManager.Instance. CreateGComponentForObject(eqItem, null, isInstance : true, poolName:eqItemPolPoolName, root:itemRoot); widgetItem.InitWidget(itemInfo); pendingEqs.Add(widgetItem); for (int i = 0; i < itemInfo.eqInfo.basicEquipConfig.disItems.Length; i++) { AddToRecycleDic(itemInfo.eqInfo.basicEquipConfig.disItems[i], itemInfo.eqInfo.basicEquipConfig.count[i]); } } } } foreach (KeyValuePair keyValuePair in awardDic) { WidgetItem awardItem = await UIManager.Instance. CreateGComponentForObject(recItem, null, isInstance : true, poolName:awardItemPoolName, root:rewardRoot); awardItem.InitWidget(keyValuePair.Value); } } private void AddToRecycleDic(int itemID, int count) { ItemInfo itemInfo = new ItemInfo(itemID, count); if (awardDic.ContainsKey(itemInfo.guid)) { awardDic[itemInfo.guid].count += count; } else { awardDic.Add(itemInfo.guid, itemInfo); } } /// /// 装备有效性检查 /// /// /// private bool ValidityCheck(ItemInfo itemInfo) { if (itemInfo.eqInfo == null) { return false; } if (itemInfo.count.Value <= 0) { LogTool.Log(itemInfo.count.Value +"装备只有1个,而且被穿了:" + itemInfo.eqInfo.isWear); if (!itemInfo.eqInfo.isWear) { LogTool.Log("不应该出现,数量为0的装备还未穿戴?需要检查:eqConfigID" + itemInfo.eqInfo.basicEquipConfig.ID + "| itemID:" + itemInfo.itemID + "| guid:" + itemInfo.guid); } return false; } return true; } } }