using DG.Tweening;
|
using System;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.EventSystems;
|
using UnityEngine.UI;
|
|
public class FloorItemCell : MonoBehaviour, IPointerClickHandler
|
{
|
|
[SerializeField] Image itemImage;
|
[SerializeField] UIEffectPlayer uieff;
|
[SerializeField] RectTransform scaleObject; //配合品质做特效缩放
|
|
int itemIndex = -1;
|
bool isPlaying = false;
|
|
Vector2 startPos = new Vector2(10000, 10000); //起始位置,用于重置
|
/// <summary>
|
/// 播放掉落物品
|
/// </summary>
|
/// <param name="index">掉落背包索引</param>
|
/// <param name="isAnimate">是否播放掉落动画</param>
|
public void Display(int index, bool isAnimate, RectTransform rect)
|
{
|
itemIndex = index;
|
float duration = 0.5f / AutoFightModel.Instance.fightSpeed; //掉落时间
|
var item = PackManager.Instance.GetItemByIndex(PackType.DropItem, index);
|
if (item == null)
|
{
|
this.transform.SetActive(false);
|
return;
|
}
|
itemImage.SetOrgSprite(item.config.IconKey);
|
int effectID = EquipModel.Instance.equipUIEffectLights[Math.Min(item.config.ItemColor, EquipModel.Instance.equipUIEffectLights.Length) - 1];
|
if (effectID == 0)
|
{
|
uieff.Stop();
|
}
|
else
|
{
|
uieff.effectId = effectID;
|
float scale = EquipModel.Instance.dropEffectScales[Math.Min(item.config.ItemColor, EquipModel.Instance.equipUIEffectLights.Length) - 1];
|
scaleObject.localScale = new Vector3(scale, scale, 1);
|
uieff.Play();
|
}
|
|
|
this.transform.position = rect.position;
|
startPos = new Vector2(transform.localPosition.x + UnityEngine.Random.Range(-30, 30), transform.localPosition.y + UnityEngine.Random.Range(50, 100));
|
if (isAnimate)
|
{
|
isPlaying = true;
|
//随机方向返回1或者-1
|
int randDir = UnityEngine.Random.Range(0, 2) == 0 ? 1 : -1;
|
|
this.transform.localPosition = startPos;
|
this.transform.DOLocalPath(new Vector3[] { startPos,
|
new Vector3(startPos.x + randDir * 15, startPos.y + 30f, 0),
|
new Vector3(startPos.x + randDir * 35, startPos.y + UnityEngine.Random.Range(-140, -130), 0) }, duration, PathType.CatmullRom).SetEase(Ease.InOutSine).OnComplete(CompleteDrop);
|
}
|
else
|
{
|
this.transform.localPosition = startPos;
|
// 手动点击或者自动模式下处理
|
// EquipModel.Instance.CalcFloorEquip(itemIndex);
|
// itemIndex = -1;
|
}
|
}
|
|
public void OnPointerClick(PointerEventData eventData)
|
{
|
if (!isPlaying)
|
CompleteDrop();
|
}
|
|
void CompleteDrop()
|
{
|
EquipModel.Instance.CalcFloorEquip(itemIndex);
|
isPlaying = false;
|
itemIndex = -1;
|
}
|
|
// void OnDisable()
|
// {
|
// CompleteDrop();
|
// }
|
}
|
|
|
|