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