hch
2025-07-16 7677bf7ab5f15f55b7e1366f1601e541a9a31f4d
Main/Component/UI/Common/ItemBaseEffect.cs
@@ -1,153 +1,121 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
    public class ItemBaseEffect : MonoBehaviour
public class ItemBaseEffect : MonoBehaviour
{
    [SerializeField] EffectPlayer m_SuitEffect;
    int itemId = 0;
    private void OnEnable()
    {
        [SerializeField] UIEffect m_SuitEffect;
        int itemId = 0;
        Display(itemId);
    }
        private void OnEnable()
    public void Display(int itemId, bool dirty = false)
    {
        this.itemId = itemId;
        var curItem = ItemConfig.Get(this.itemId);
        bool isPlay = true;
        if (curItem == null)
        {
            Display(itemId);
            isPlay = false;
            return;
        }
        public void Display(int itemId, bool dirty = false)
        int effectId = 0;
        switch (curItem.ItemColor)
        {
            this.itemId = itemId;
            var curItem = ItemConfig.Get(this.itemId);
            bool isPlay = true;
            if (curItem == null)
            {
                isPlay = false;
                return;
            }
            int effectId = 0;
            switch (curItem.ItemColor)
            {
                case 4:
                    effectId = 7119;
                    break;
                case 5:
                    effectId = 7120;
                    break;
                case 6:
                case 7:
                case 8:
                    effectId = 7121;
                    break;
            }
            if (curItem.BaseEffectID != 0)
            {
                effectId = curItem.BaseEffectID;
            }
            if (m_SuitEffect.effect != effectId)
            {
                //同一个位置替换特效需要先释放
                m_SuitEffect.StopImediatly();
            }
            m_SuitEffect.effect = effectId;
            if (m_SuitEffect.effect == 0)
            {
                isPlay = false;
            }
            if (isPlay)
            {
                m_SuitEffect.Play();
            }
            else
            {
                m_SuitEffect.StopImediatly();
            }
            // if (dirty)
            // {
            //     SnxxzGame.Instance.StartCoroutine(Co_SetOrder(this, transform as RectTransform));
            // }
            case 4:
                effectId = 7119;
                break;
            case 5:
                effectId = 7120;
                break;
            case 6:
            case 7:
            case 8:
                effectId = 7121;
                break;
        }
        public static ItemBaseEffect Create(RectTransform transform)
        if (curItem.BaseEffectID != 0)
        {
            var go = UIUtility.CreateWidget("ItemBaseEffect", "ItemBaseEffect");
            var behaviour = go.GetComponent<ItemBaseEffect>();
            // SnxxzGame.Instance.StartCoroutine(Co_SetOrder(behaviour, transform));
            var scale = 1f;
            var itemBasic = transform.GetComponentInParent<CommonItemBaisc>();
            if (itemBasic == null)
                itemBasic = transform.GetComponentInParent<ItemCell>();
            if (itemBasic != null)
            {
                scale = GetEffectScale(itemBasic.format);
            }
            // else
            // {
            //     var itemBehaviour = transform.GetComponentInParent<ItemBehaviour>();
            //     if (itemBehaviour != null)
            //     {
            //         if (itemBehaviour.backGround != null)
            //         {
            //             var size = itemBehaviour.backGround.rectTransform.rect.width;
            //             scale = size / 84;
            //         }
            //     }
            //     else
            //     {
            //         var findPreciousItemBehaviour = transform.GetComponentInParent<FindPreciousItemBehaviour>();
            //         if (findPreciousItemBehaviour != null)
            //         {
            //             scale = 0.86f;  //暂且写死
            //         }
            //     }
            // }
            var rect = go.transform as RectTransform;
            go.transform.SetParentEx(transform, Vector3.zero, Quaternion.identity, Vector3.one);
            rect.MatchWhith(transform);
            go.transform.localScale = Vector3.one * scale;
            go.transform.SetAsLastSibling();
            return behaviour;
            effectId = curItem.BaseEffectID;
        }
        static IEnumerator Co_SetOrder(ItemBaseEffect behaviour, RectTransform transform)
        if (m_SuitEffect.effectId != effectId)
        {
            yield return null;
            if (transform == null || behaviour == null)
            {
                yield break;
            }
            Canvas canva = transform.GetComponentInParent<Canvas>();
            if (canva != null)
            {
                behaviour.m_SuitEffect.ResetOrder(canva.sortingOrder + 1);
            }
            if (behaviour.m_SuitEffect.maskArea == null)
            {
                behaviour.m_SuitEffect.SetMask();
            }
            //同一个位置替换特效需要先释放
            m_SuitEffect.Stop();
        }
        m_SuitEffect.effectId = effectId;
        static float GetEffectScale(ItemCellformat format)
        if (m_SuitEffect.effectId == 0)
        {
            switch (format)
            {
                case ItemCellformat.Format_80x80:
                    return 0.95f;
                case ItemCellformat.Format_70x70:
                    return 0.83f;
                case ItemCellformat.Format_64x64:
                    return 0.76f;
                default:
                    return 1f;
            }
            isPlay = false;
        }
        if (isPlay)
        {
            m_SuitEffect.SetActive(true);
        }
        else
        {
            m_SuitEffect.SetActive(false);
        }
    }
    public static ItemBaseEffect Create(RectTransform transform)
    {
        var go = UIUtility.CreateWidget("ItemBaseEffect", "ItemBaseEffect");
        var behaviour = go.GetComponent<ItemBaseEffect>();
        var scale = 1f;
        var itemBasic = transform.GetComponentInParent<CommonItemBaisc>();
        if (itemBasic == null)
            itemBasic = transform.GetComponentInParent<ItemCell>();
        if (itemBasic != null)
        {
            scale = GetEffectScale(itemBasic.format);
        }
        else
        {
            var itemBehaviour = transform.GetComponentInParent<ItemBehaviour>();
            if (itemBehaviour != null)
            {
                if (itemBehaviour.backGround != null)
                {
                    var size = itemBehaviour.backGround.rectTransform.rect.width;
                    scale = size / 84;
                }
            }
        }
        var rect = go.transform as RectTransform;
        go.transform.SetParentEx(transform, Vector3.zero, Quaternion.identity, Vector3.one);
        rect.MatchWhith(transform);
        go.transform.localScale = Vector3.one * scale;
        go.transform.SetAsLastSibling();
        return behaviour;
    }
    static float GetEffectScale(ItemCellformat format)
    {
        switch (format)
        {
            case ItemCellformat.Format_100x100:
                return 1.1f;
            case ItemCellformat.Format_80x80:
                return 0.95f;
            case ItemCellformat.Format_70x70:
                return 0.83f;
            case ItemCellformat.Format_64x64:
                return 0.76f;
            default:
                return 1f;
        }
    }
}