using System;
|
using System.Collections.Generic;
|
using Cysharp.Threading.Tasks;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
// 鉴宝结果
|
public class GubaoCallCell : MonoBehaviour
|
{
|
[SerializeField] Image canImage;
|
[SerializeField] RotationTween rotationTween; //摇一摇0.5秒后,停止动-裂开特效 - 配合消失
|
[SerializeField] UIEffectPlayer openEffect; //裂开特效
|
[SerializeField] UIEffectPlayer showEffect; //展示特效
|
[SerializeField] Image itemIcon;
|
[SerializeField] Text itemName;
|
[SerializeField] Text cntText;
|
[SerializeField] Image pieceImg;
|
[SerializeField] Transform outRect; //溢出
|
[SerializeField] Image newImg;
|
|
// 勾选跳过的直接显示结果
|
public async UniTask Display(int index)
|
{
|
bool isSkip = LocalSave.GetBool(GubaoManager.skipKey + PlayerDatas.Instance.baseData.PlayerID, false);
|
|
if (HappyXBModel.Instance.xbResultDict.IsNullOrEmpty())
|
{
|
return;
|
}
|
if (!HappyXBModel.Instance.xbResultDict.ContainsKey(index))
|
{
|
return;
|
}
|
var result = HappyXBModel.Instance.xbResultDict[index];
|
var itemCfg = ItemConfig.Get(result.itemId);
|
var gbCfg = GubaoConfig.Get(result.itemId);
|
|
if (isSkip)
|
{
|
canImage.SetActive(false);
|
rotationTween.Stop();
|
openEffect.Stop();
|
showEffect.effectId = GetShowEffectID(result.itemId, result.count);
|
showEffect.PlayByArrIndex(Math.Max(itemCfg.ItemColor - 1, 0));
|
itemIcon.SetActive(true);
|
itemName.SetActive(true);
|
cntText.SetActive(true);
|
|
itemIcon.SetItemSprite(result.itemId);
|
itemIcon.SetNativeSize();
|
itemName.text = itemCfg.ItemName;
|
itemName.color = UIHelper.GetFuncQualityColor(itemCfg.ItemColor);
|
cntText.text = "x" + result.count.ToString();
|
|
if (gbCfg == null)
|
{
|
pieceImg.SetActive(false);
|
newImg.SetActive(false);
|
}
|
else
|
{
|
pieceImg.SetActive(true);
|
if (GubaoManager.Instance.IsActive(result.itemId))
|
{
|
newImg.SetActive(false);
|
}
|
else if (result.count >= gbCfg.UnlockItemCnt && VirtualPackManager.Instance.GetNoPackItemCount(result.itemId) < gbCfg.UnlockItemCnt * 2)
|
{
|
newImg.SetActive(true);
|
}
|
else
|
{
|
newImg.SetActive(false);
|
}
|
}
|
outRect.SetActive(result.isOut);
|
|
return;
|
}
|
|
//动画顺序 : 罐子摇一摇0.5秒-停止动-裂开特效-罐子提前消失-展示特效
|
canImage.SetActive(true);
|
//随机1-6
|
int random = UnityEngine.Random.Range(1, 7);
|
canImage.SetSprite($"GubaoCan{random}");
|
canImage.SetNativeSize();
|
canImage.transform.localRotation = Quaternion.identity;
|
itemIcon.SetActive(false);
|
itemName.SetActive(false);
|
cntText.SetActive(false);
|
outRect.SetActive(false);
|
newImg.SetActive(false);
|
|
|
showEffect.Stop();
|
|
int delay = isSkip ? 0 : index * 100; // delay 毫秒
|
await UniTask.Delay(delay);
|
|
rotationTween.Play();
|
await UniTask.Delay(300);
|
rotationTween.Stop();
|
openEffect.Play();
|
await UniTask.Delay(200);
|
canImage.SetActive(false);
|
await UniTask.Delay(400);
|
showEffect.effectId = GetShowEffectID(result.itemId, result.count);
|
showEffect.PlayByArrIndex(Math.Max(itemCfg.ItemColor - 1, 0));
|
itemIcon.SetActive(true);
|
itemName.SetActive(true);
|
cntText.SetActive(true);
|
itemIcon.SetItemSprite(result.itemId);
|
itemIcon.SetNativeSize();
|
itemName.text = itemCfg.ItemName;
|
itemName.color = UIHelper.GetFuncQualityColor(itemCfg.ItemColor);
|
cntText.text = "x" + result.count.ToString();
|
if (gbCfg == null)
|
{
|
pieceImg.SetActive(false);
|
newImg.SetActive(false);
|
}
|
else
|
{
|
pieceImg.SetActive(true);
|
if (GubaoManager.Instance.IsActive(result.itemId))
|
{
|
newImg.SetActive(false);
|
}
|
else if (result.count >= gbCfg.UnlockItemCnt && VirtualPackManager.Instance.GetNoPackItemCount(result.itemId) < gbCfg.UnlockItemCnt * 2)
|
{
|
newImg.SetActive(true);
|
}
|
else
|
{
|
newImg.SetActive(false);
|
}
|
}
|
outRect.SetActive(result.isOut);
|
}
|
|
|
int GetShowEffectID(int itemID, int cnt)
|
{
|
var config = GubaoConfig.Get(itemID);
|
if (config == null)
|
{
|
return 1095;
|
}
|
if (cnt >= config.UnlockItemCnt)
|
{
|
return 1094;
|
}
|
return 1095;
|
}
|
}
|