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); //起始位置,用于重置
///
/// 播放掉落物品
///
/// 掉落背包索引
/// 是否播放掉落动画
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();
// }
}