| using UnityEngine;  | 
|   | 
| using DG.Tweening;  | 
| using Cysharp.Threading.Tasks;  | 
|   | 
|   | 
| public class EquipOnMainUI : MonoBehaviour  | 
| {  | 
|   | 
|     [SerializeField] RectTransform[] slotEquips; //装备格子  | 
|     [SerializeField] RectTransform[] flyEquips;  | 
|     [SerializeField] RectTransform flyStartPos;  | 
|   | 
|   | 
|     EquipCell[] m_EquipSlots;  | 
|     EquipCell[] m_EquipFlySlots;  | 
|   | 
|     void Awake()  | 
|     {  | 
|         if (m_EquipSlots == null)  | 
|         {  | 
|             m_EquipSlots = new EquipCell[slotEquips.Length];  | 
|             for (int i = 0; i < slotEquips.Length; i++)  | 
|             {  | 
|                 m_EquipSlots[i] = slotEquips[i].GetComponent<EquipCell>();  | 
|             }  | 
|         }  | 
|   | 
|         if (m_EquipFlySlots == null)  | 
|         {  | 
|             m_EquipFlySlots = new EquipCell[flyEquips.Length];  | 
|             for (int i = 0; i < flyEquips.Length; i++)  | 
|             {  | 
|                 m_EquipFlySlots[i] = flyEquips[i].GetComponent<EquipCell>();  | 
|             }  | 
|         }  | 
|     }  | 
|   | 
|     //主界面切换模式触发  | 
|     private void OnEnable()  | 
|     {  | 
|   | 
|         PackManager.Instance.refrechPackEvent += OnRefrechPackEvent;  | 
|         //packModel.refreshItemCountEvent += PackModel_refreshItemCountEvent;  | 
|         EquipModel.Instance.OnEquipOPResultAction += OnEquipResult;  | 
|         DisplaySlotEquip();  | 
|         for (int i = 0; i < flyEquips.Length; i++)  | 
|         {  | 
|             flyEquips[i].SetActive(false);  | 
|         }  | 
|     }  | 
|   | 
|   | 
|     private void OnDisable()  | 
|     {  | 
|         PackManager.Instance.refrechPackEvent -= OnRefrechPackEvent;  | 
|         //packModel.refreshItemCountEvent -= PackModel_refreshItemCountEvent;  | 
|         EquipModel.Instance.OnEquipOPResultAction -= OnEquipResult;  | 
|     }  | 
|   | 
|   | 
|   | 
|   | 
|     void OnRefrechPackEvent(PackType type)  | 
|     {  | 
|         if (type == PackType.Equip)  | 
|         {  | 
|             DisplaySlotEquip();  | 
|         }  | 
|     }  | 
|   | 
|   | 
|   | 
|     private void OnEquipResult(bool isDone, int index)  | 
|     {  | 
|         //穿戴或者 替换且分解成功,才做飘的表现,未分解的不做表现  | 
|         if (!isDone)  | 
|         {  | 
|             return;  | 
|         }  | 
|         FlyToEquipGird(index);  | 
|     }  | 
|   | 
|   | 
|   | 
|     //显示装备格子  | 
|     void DisplaySlotEquip()  | 
|     {  | 
|         for (int i = 0; i < slotEquips.Length; i++)  | 
|         {  | 
|             var equipItem = PackManager.Instance.GetItemByIndex(PackType.Equip, i);  | 
|             m_EquipSlots[i].Init(equipItem);  | 
|         }  | 
|     }  | 
|   | 
|     void FlyToEquipGird(int equipIndex)  | 
|     {  | 
|         var equipInfo = PackManager.Instance.GetItemByIndex(PackType.Equip, equipIndex);  | 
|         var flyEquip = m_EquipFlySlots[equipIndex];  | 
|         if (equipInfo == null)  | 
|         {  | 
|             flyEquip.SetActive(false);  | 
|             return;  | 
|         }  | 
|         int itemID = equipInfo.config.ID;  | 
|         flyEquip.Init(equipInfo);  | 
|         flyEquip.SetActive(true);  | 
|   | 
|         flyEquip.transform.localPosition = new Vector3(flyStartPos.localPosition.x + Random.Range(-80, 80), flyStartPos.localPosition.y + Random.Range(-20, 20), 0);  | 
|         FlyToEquipCell(flyEquip, equipIndex, equipInfo).Forget();  | 
|   | 
|   | 
|     }  | 
|   | 
|     async UniTask FlyToEquipCell(EquipCell flyEquip, int equipIndex, ItemModel equipInfo)  | 
|     {  | 
|         //等待界面关闭后,才处理后续逻辑  | 
|         while (UIManager.Instance.IsOpened<EquipExchangeWin>())  | 
|         {  | 
|             await UniTask.Yield();  | 
|         }  | 
|   | 
|   | 
|         flyEquip.transform.DOMove(new Vector3(slotEquips[equipIndex].position.x, slotEquips[equipIndex].position.y, 0), 0.5f).OnComplete(() =>  | 
|         {  | 
|             flyEquip.SetActive(false);  | 
|   | 
|             slotEquips[equipIndex].SetActive(true);  | 
|             m_EquipSlots[equipIndex].Init(equipInfo);  | 
|   | 
|             //itemCell变大再变回1倍  | 
|             slotEquips[equipIndex].transform.DOScale(Vector3.one * 1.3f, 0.3f).OnComplete(() =>  | 
|             {  | 
|                 slotEquips[equipIndex].transform.DOScale(Vector3.one, 0.3f);  | 
|             });  | 
|         });  | 
| }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   | 
|   |