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);  
 | 
            });  
 | 
        });  
 | 
}  
 | 
  
 | 
}  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 |