From cb653cf75b17b9bdca0b5b9e6b88edf1ca72e90c Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 17 十月 2025 09:54:11 +0800
Subject: [PATCH] 0312 删除旧的日常代码3

---
 Main/Component/UI/Effect/BattleEffectPlayer.cs |  314 ++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 256 insertions(+), 58 deletions(-)

diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 1a09695..d740f15 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -30,25 +30,60 @@
         }
     }
 
+    public bool isBindBone = false;
 
-
+    public bool isRedCamp = true;
     public EffectConfig effectConfig;
 
-    public float speedRate = 1f;
+    public float speedRate = 1.5f;
 
+    private float m_Alpha = 1f;
 
+    public float Alpha
+    {
+        get
+        {
+            return m_Alpha;
+        }
+        set
+        {
+            if (value == m_Alpha)
+                return;
 
+            m_Alpha = value;
+            OnAlphaChanged();
+        }
+    }
+
+    private void OnAlphaChanged()
+    {
+        if (spineComp != null)
+        {
+            var skeleton = spineComp.Skeleton;
+            skeleton.A = Alpha;
+            spineComp.LateUpdate();
+        }
+
+        for (int i = 0; i < rendererList.Count; i++)
+        {
+            var renderer = rendererList[i];
+            if (renderer != null && renderer.material != null && renderer.material.HasProperty("_Color"))
+            {
+                Color color = renderer.material.color;
+                color.a = Alpha;
+                renderer.material.color = color;
+            }
+        }
+    }
 
     [Header("鎾斁瀹屾瘯绔嬪嵆鍥炴敹")]
     public bool isReleaseImmediately = false;  //鐣岄潰鐗规晥涓�鑸笉闇�瑕佽嚜鎴戦攢姣侊紝璺熼殢鐣岄潰鎴栬�呯埗瀵硅薄閿�姣佸氨琛�
 
     public Action<BattleEffectPlayer> onDestroy;
 
-    [HideInInspector] public Canvas canvas = null;
-
     [HideInInspector] public GameObject effectTarget = null;
 
-    protected EffectPenetrationBlocker blocker = null;
+    protected RendererAdjuster blocker = null;
 
     protected bool isInit = false;
 
@@ -60,20 +95,26 @@
 
     protected GameObject spineContainer;
 
-    protected SkeletonGraphic spineComp;
+    protected SkeletonAnimation spineComp;
     protected Spine.AnimationState spineAnimationState;
 
     public GameObjectPoolManager.GameObjectPool pool;
 
     public Action onComplete;
 
+    private bool isPlaying = false;
+
+    private float timer = 0f;
+
     protected virtual void OnEnable()
     {
-        if (spineComp != null)
-        {
-            //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
-            spineComp.enabled = false;
-        }
+        // if (spineComp != null)
+        // {
+        //     //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
+        //     spineComp.enabled = false;
+        // }
+
+        ApplySortingOrder();
     }
 
 
@@ -107,13 +148,26 @@
         }
 
         //  鍒濆鍖杝pine缁勪欢
-        if (effectConfig != null && effectConfig.isSpine != 1)
+        if (effectConfig != null && effectConfig.isSpine != 0)
         {
-            GameObject spineContainerPrefab = ResManager.Instance.LoadAsset<GameObject>("UIComp", "SpineContainer");
-            spineContainer = GameObject.Instantiate(spineContainerPrefab, transform);
+            GameObject spineContainerPrefab = ResManager.Instance.LoadAsset<GameObject>("UIComp", "SpineAnimContainer");
+            spineContainer = GameObject.Instantiate(spineContainerPrefab, transform, true);
+            spineContainer.transform.localPosition = Vector3.zero;
         }
         //  鏈夌壒鏁堝彲鑳藉甫spine鍙堝甫unity鐗规晥鐨勬儏鍐�
-        spineComp = gameObject.GetComponentInChildren<SkeletonGraphic>(true);
+        spineComp = gameObject.GetComponentInChildren<SkeletonAnimation>(true);
+
+        if (effectConfig.effectPos != null && effectConfig.effectPos.Length >= 2)
+        {
+            rectTrans.anchoredPosition += new Vector2((isRedCamp ? 1f : -1f) * effectConfig.effectPos[0], effectConfig.effectPos[1]);
+        }
+
+        if (effectConfig.effectScale > 0f)
+        {
+            rectTrans.localScale *= effectConfig.effectScale;
+        }
+
+        spineComp.loop = effectConfig.isLoop != 0;
     }
 
     protected virtual void Clear()
@@ -145,6 +199,32 @@
 
         Clear();
         onComplete?.Invoke();
+    }
+
+    public Func<bool> funcIsHeroFront;
+
+    public void SetSortingOrder(Func<bool> _isHeroFrontCallback)
+    {
+        funcIsHeroFront = _isHeroFrontCallback;
+
+        ApplySortingOrder();
+    }
+
+
+    public void ApplySortingOrder()
+    {
+        if (null != blocker && effectConfig != null && funcIsHeroFront != null)
+        {
+            bool isEffectFront = effectConfig.frontBack == 1;
+
+            bool isHeroFront = funcIsHeroFront();
+
+            int finalSortingOrder = isHeroFront ?
+                (isEffectFront ? BattleConst.ActiveHeroActionSortingOrder : BattleConst.ActiveHeroBackSortingOrder) : (isEffectFront ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder);
+
+
+            blocker.SetSortingOrder(finalSortingOrder);
+        }
     }
 
     public virtual void Play(bool showLog = true)
@@ -181,9 +261,34 @@
             this.gameObject.SetActive(true);
         }
 
-        PlayEffect();
-        
+        isPlaying = true;
+        timer = 0f;
 
+        PlayEffect();
+    }
+
+
+
+    public void Run()
+    {
+        if (null == effectConfig)
+        {
+            return;
+        }
+
+        if (!isPlaying)
+        {
+            return;
+        }
+
+        if (effectConfig.autoDestroy != 0)
+        {
+            timer += Time.deltaTime * speedRate;
+            if (timer >= effectConfig.destroyDelay)
+            {
+                GameObject.DestroyImmediate(gameObject);
+            }
+        }
     }
 
     protected virtual void PlayEffect()
@@ -194,6 +299,15 @@
             return;
         }
 
+        //  濡傛灉delay灏忎簬绛変簬0 閭d細绔嬪埢鎵ц
+        this.DelayTime(effectConfig.delayPlay / speedRate, () =>
+        {
+            PlayEffectInternal();
+        });
+    }
+
+    protected void PlayEffectInternal()
+    {
         if (effectConfig.isSpine != 0)
         {
             PlaySpineEffect();
@@ -202,7 +316,7 @@
         {
             PlayUnityEffect();
         }
-        
+        OnAlphaChanged();
     }
 
     protected void PlaySpineEffect()
@@ -215,18 +329,47 @@
             return;
         }
 
-        SkeletonDataAsset skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("UIEffect/BattleSpine/" + effectConfig.packageName, effectConfig.fxName);
+        SkeletonDataAsset skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("UIEffect/" + effectConfig.packageName, effectConfig.fxName);
         spineComp.skeletonDataAsset = skeletonDataAsset;
         spineComp.Initialize(true);
-        spineComp.raycastTarget = false;
         spineComp.timeScale = speedRate;
 
-        spineAnimationState = spineComp.AnimationState;
+        spineComp.skeleton.A = Alpha;
+
+        spineAnimationState = spineComp.state;
         spineAnimationState.Complete -= OnSpineAnimationComplete;
         spineAnimationState.Complete += OnSpineAnimationComplete;
 
+        // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
+        blocker = spineComp.AddMissingComponent<RendererAdjuster>();
+
+        blocker.onSortingChanged = OnSortingChanged;
+
+        ApplySortingOrder();
+
+        spineComp.enabled = true;
+
+        spineComp.timeScale = speedRate;
+        spineAnimationState.TimeScale = speedRate;
+
         Spine.Animation animation = spineAnimationState.Data.SkeletonData.Animations.First();
-        spineAnimationState.SetAnimation(0, animation, false);
+        spineAnimationState.SetAnimation(0, animation, effectConfig.isLoop != 0);
+
+        SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
+
+    }
+
+    private bool CheckForAdditiveBlend(Spine.Skeleton skeleton)
+    {
+        // 閬嶅巻鎵�鏈夋彃妲斤紝妫�鏌ユ槸鍚︽湁鐩稿姞妯″紡
+        foreach (var slot in skeleton.Slots)
+        {
+            if (slot.Data.BlendMode == Spine.BlendMode.Additive)
+            {
+                return true;
+            }
+        }
+        return false;
     }
 
     protected void PlayUnityEffect()
@@ -262,20 +405,44 @@
 
         OnUnityAnimationComplete();
 
-        if (null == canvas)
-            canvas = GetComponentInParent<Canvas>();
 
         // 娣诲姞鐗规晥绌块�忛樆鎸″櫒
-        blocker = effectTarget.AddMissingComponent<EffectPenetrationBlocker>();
+        blocker = effectTarget.AddMissingComponent<RendererAdjuster>();
 
-        //  濡傛灉娌℃湁canvas鐨勮瘽 姝e父鏄洜涓轰笉鍦˙attleWin涓嬮潰鐨勮妭鐐� 鎰忔�濆氨鏄綋鍓嶆病鏈夋樉绀� 绛夊埌鍒囧洖鎴樻枟鐨勬椂鍊欏啀閫氳繃BattleField.UpdateCanvas鏉ユ洿鏂�
-        if (canvas != null)
-        {
-            blocker.SetParentCanvas(canvas);
-        }
+        blocker.onSortingChanged = OnSortingChanged;
 
         SoundPlayer.Instance.PlayUIAudio(effectConfig.audio);
 
+    }
+
+    void LateUpdate()
+    {
+        if (string.IsNullOrEmpty(sortingLayer))
+        {
+            return;
+        }
+
+        OnSortingChanged(sortingLayer, sortingOrder);
+    }
+
+    public string sortingLayer;
+    public int sortingOrder;
+    public RectTransform rectTrans;
+
+    protected void OnSortingChanged(string _sortingLayer, int _sortingOrder)
+    {
+        if (null == spineComp)
+            return;
+            
+        sortingLayer = _sortingLayer;
+        sortingOrder = _sortingOrder;
+        // 澶勭悊鎺掑簭鍙樺寲
+        var renderers = spineComp.GetComponents<Renderer>();
+        foreach (var renderer in renderers)
+        {
+            renderer.sortingLayerName = sortingLayer;
+            renderer.sortingOrder = sortingOrder;
+        }
     }
 
     protected void OnDestroy()
@@ -325,25 +492,23 @@
 
 
     //  鍒涘缓鍚庣殑鐗规晥浼氳嚜鍔ㄩ殣钘� 闇�瑕佹墜鍔ㄨ皟鐢≒lay鎵嶈兘鎾斁
-    public static BattleEffectPlayer Create(int effectId, Transform parent, bool createNewChild = false)
+    public static BattleEffectPlayer Create(int effectId, Transform parent, bool isRedCamp)
     {
         // 鐩存帴鍒涘缓鐗规晥鎾斁鍣紝涓嶄娇鐢ㄥ璞℃睜
-        BattleEffectPlayer BattleEffectPlayer = null;
+        BattleEffectPlayer battleEffectPlayer = null;
 
-        if (createNewChild)
-        {
-            GameObject newGo = new GameObject("BattleEffectPlayer_" + effectId);
-            newGo.transform.SetParent(parent, false);
-            BattleEffectPlayer = newGo.AddComponent<BattleEffectPlayer>();
-        }
-        else
-        {
-            BattleEffectPlayer = parent.AddMissingComponent<BattleEffectPlayer>();
-        }
+        GameObject newGo = new GameObject("BattleEffectPlayer_" + effectId);
+        newGo.transform.SetParent(parent, false);
+        battleEffectPlayer = newGo.AddComponent<BattleEffectPlayer>();
+        battleEffectPlayer.rectTrans = newGo.AddMissingComponent<RectTransform>();
+        
+        battleEffectPlayer.effectId = effectId;
 
-        BattleEffectPlayer.effectId = effectId;
-        BattleEffectPlayer.SetActive(true);
-        return BattleEffectPlayer;
+        // 璁剧疆闃佃惀
+        battleEffectPlayer.isRedCamp = isRedCamp;
+
+        battleEffectPlayer.SetActive(true);
+        return battleEffectPlayer;
     }
 
     /// <summary>
@@ -359,7 +524,7 @@
 
     public void Pause()
     {
-        if (effectTarget == null) return;
+        // if (effectTarget == null) return;
 
         // Spine鍔ㄧ敾
         // var spineGraphics = effectTarget.GetComponentsInChildren<SkeletonGraphic>(true);
@@ -367,6 +532,11 @@
         if (spineComp != null)
         {
             spineComp.timeScale = 0f;
+        }
+
+        if (spineAnimationState != null)
+        {
+            spineAnimationState.TimeScale = 0f;
         }
 
         // Animator鍔ㄧ敾
@@ -384,11 +554,16 @@
 
     public void Resume()
     {
-        if (effectTarget == null) return;
+        // if (effectTarget == null) return;
 
         if (spineComp != null)
         {
             spineComp.timeScale = speedRate;
+        }
+
+        if (spineAnimationState != null)
+        {
+            spineAnimationState.TimeScale = speedRate;
         }
 
         // Animator鍔ㄧ敾
@@ -438,21 +613,44 @@
         return true;
     }
 
-    /// <summary>
-    /// 璁剧疆閬僵锛堟敮鎸丷ectMask2D銆丮ask銆丼moothMask绛夛級
-    /// </summary>
-    public void SetMask(RectTransform maskArea = null)
+    public void SetSpeedRatio(float ratio)
     {
-        if (effectTarget == null || blocker == null)
-            return;
-
-        // 浼樺厛浣跨敤浼犲叆鐨刴askArea
-        if (maskArea != null)
+        speedRate = ratio;
+        if (spineComp != null)
         {
-            blocker.PerformMask(maskArea);
-            return;
+            spineComp.timeScale = speedRate;
+        }
+
+        // Animator鍔ㄧ敾
+        foreach (var animator in animatorList)
+        {
+            animator.speed = speedRate;
         }
     }
 
+    public void BindBone(SkeletonAnimation skeletonAnim, string v)
+    {
+        Bone bone = skeletonAnim.skeleton.FindBone(v);
 
+        if (null == bone)
+        {
+             return;
+        }
+
+        isBindBone = true;
+
+        BoneFollower boneFollower = gameObject.AddMissingComponent<BoneFollower>();
+        boneFollower.boneName = v;
+        boneFollower.skeletonRenderer = skeletonAnim;
+        
+        boneFollower.followBoneRotation = false;
+        boneFollower.followXYPosition = true;
+        boneFollower.followZPosition = false;
+        boneFollower.followLocalScale = false;
+        boneFollower.followParentWorldScale = false;
+        boneFollower.followSkeletonFlip = false;
+
+        boneFollower.Initialize();
+        boneFollower.LateUpdate();
+    }
 }

--
Gitblit v1.8.0