From bc871b112bf04df5b5dcc3fadb77ac0f276749c8 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 17 十一月 2025 02:01:58 +0800
Subject: [PATCH] 328 【主界面】坐骑系统 竞技场布阵的显隐 引导点战锤的时候不暂停游戏;引导的时候如果是功能开启,不显示战力变化避免遮挡

---
 Main/Component/UI/Effect/BattleEffectPlayer.cs |  169 +++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 125 insertions(+), 44 deletions(-)

diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 480cae5..8dbbc57 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -30,11 +30,53 @@
         }
     }
 
+    private Bone followedBone;
+
+    public bool isBindBone = false;
+
     public bool isRedCamp = true;
     public EffectConfig effectConfig;
 
     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;  //鐣岄潰鐗规晥涓�鑸笉闇�瑕佽嚜鎴戦攢姣侊紝璺熼殢鐣岄潰鎴栬�呯埗瀵硅薄閿�姣佸氨琛�
@@ -58,8 +100,6 @@
     protected SkeletonAnimation spineComp;
     protected Spine.AnimationState spineAnimationState;
 
-    protected int heroSetedSortingOrder;
-
     public GameObjectPoolManager.GameObjectPool pool;
 
     public Action onComplete;
@@ -70,11 +110,13 @@
 
     protected virtual void OnEnable()
     {
-        if (spineComp != null)
-        {
-            //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
-            spineComp.enabled = false;
-        }
+        // if (spineComp != null)
+        // {
+        //     //闅愯棌锛屼細鏈夐潤鎬佹樉绀洪棶棰�
+        //     spineComp.enabled = false;
+        // }
+
+        ApplySortingOrder();
     }
 
 
@@ -126,6 +168,8 @@
         {
             rectTrans.localScale *= effectConfig.effectScale;
         }
+
+        spineComp.loop = effectConfig.isLoop != 0;
     }
 
     protected virtual void Clear()
@@ -159,24 +203,54 @@
         onComplete?.Invoke();
     }
 
-    public void SetSortingOrder(int _heroSetedSortingOrder)
+    public Func<bool> funcIsHeroFront;
+
+    public void SetSortingOrder(Func<bool> _isHeroFrontCallback)
     {
-        heroSetedSortingOrder = _heroSetedSortingOrder;
+        funcIsHeroFront = _isHeroFrontCallback;
 
-        int so = heroSetedSortingOrder;
+        ApplySortingOrder();
+    }
 
-        if (null != blocker && effectConfig != null)
+
+    public void ApplySortingOrder()
+    {
+        if (null != blocker && effectConfig != null && funcIsHeroFront != null)
         {
-            if (BattleConst.UnactiveHeroSortingOrder == heroSetedSortingOrder)
-            {
-                so = effectConfig.frontBack == 1 ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder;
-            }
-            else
-            {
-                so = effectConfig.frontBack == 1 ? BattleConst.ActiveHeroFrontSortingOrder : BattleConst.ActiveHeroBackSortingOrder;
-            }
+            bool isEffectFront = effectConfig.frontBack == 1;
 
-            blocker.SetSortingOrder(so);
+            bool isHeroFront = funcIsHeroFront();
+
+            int finalSortingOrder = isHeroFront ?
+                (isEffectFront ? BattleConst.ActiveHeroActionSortingOrder : BattleConst.ActiveHeroBackSortingOrder) : (isEffectFront ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder);
+
+
+            blocker.SetSortingOrder(finalSortingOrder);
+        }
+    }
+
+    public void FollowBoneXY()
+    {
+        if (followedBone == null || !isBindBone)
+        {
+            return;
+        }
+
+        Vector2 vector2 = Vector2.zero;
+
+        if (effectConfig.effectPos != null && effectConfig.effectPos.Length >= 2)
+        {
+            vector2 = new Vector2((isRedCamp ? 1f : -1f) * effectConfig.effectPos[0], effectConfig.effectPos[1]);
+        }
+
+        if (spineComp != null)
+        {
+            spineComp.transform.localPosition = new Vector3(followedBone.WorldX + vector2.x, followedBone.WorldY + vector2.y, 0);
+        }
+
+        if (effectTarget != null)
+        {
+            effectTarget.transform.localPosition = new Vector3(followedBone.WorldX + vector2.x, followedBone.WorldY + vector2.y, 0);
         }
     }
 
@@ -269,6 +343,7 @@
         {
             PlayUnityEffect();
         }
+        OnAlphaChanged();
     }
 
     protected void PlaySpineEffect()
@@ -286,6 +361,8 @@
         spineComp.Initialize(true);
         spineComp.timeScale = speedRate;
 
+        spineComp.skeleton.A = Alpha;
+
         spineAnimationState = spineComp.state;
         spineAnimationState.Complete -= OnSpineAnimationComplete;
         spineAnimationState.Complete += OnSpineAnimationComplete;
@@ -295,24 +372,11 @@
 
         blocker.onSortingChanged = OnSortingChanged;
 
-        if (0 != heroSetedSortingOrder)
-        {
-            if (BattleConst.UnactiveHeroSortingOrder == heroSetedSortingOrder)
-            {
-                heroSetedSortingOrder = effectConfig.frontBack == 1 ? BattleConst.UnactiveHeroFrontSortingOrder : BattleConst.UnactiveHeroBackSortingOrder;
-            }
-            else
-            {
-                heroSetedSortingOrder = effectConfig.frontBack == 1 ? BattleConst.ActiveHeroFrontSortingOrder : BattleConst.ActiveHeroBackSortingOrder;
-            }
-
-            blocker.SetSortingOrder(heroSetedSortingOrder);
-        }
+        ApplySortingOrder();
 
         spineComp.enabled = true;
 
         spineComp.timeScale = speedRate;
-        spineAnimationState.TimeScale = speedRate;
 
         Spine.Animation animation = spineAnimationState.Data.SkeletonData.Animations.First();
         spineAnimationState.SetAnimation(0, animation, effectConfig.isLoop != 0);
@@ -496,11 +560,6 @@
             spineComp.timeScale = 0f;
         }
 
-        if (spineAnimationState != null)
-        {
-            spineAnimationState.TimeScale = 0f;
-        }
-
         // Animator鍔ㄧ敾
         foreach (var animator in animatorList)
         {
@@ -521,11 +580,6 @@
         if (spineComp != null)
         {
             spineComp.timeScale = speedRate;
-        }
-
-        if (spineAnimationState != null)
-        {
-            spineAnimationState.TimeScale = speedRate;
         }
 
         // Animator鍔ㄧ敾
@@ -589,4 +643,31 @@
             animator.speed = speedRate;
         }
     }
+
+    public void BindBone(SkeletonAnimation skeletonAnim, string v)
+    {
+        Bone bone = skeletonAnim.skeleton.FindBone(v);
+
+        if (null == bone)
+        {
+             return;
+        }
+
+        isBindBone = true;
+        followedBone = bone;
+
+        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