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