From 7a4f40a5a1c8b9209ec9263240143865491af77b Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 15 十月 2025 21:21:53 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts

---
 Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs          |    7 +++
 Main/System/FirstCharge/FirstChargeManager.cs                      |    2 -
 Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs    |    2 
 Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs  |    2 
 Main/System/Battle/Motion/MotionBase.cs                            |    2 
 Main/System/FirstCharge/FirstChargeHeroInfoWin.cs                  |    3 -
 Main/System/BoneField/BoneFieldWin.cs                              |    1 
 Main/System/Battle/Buff/BattleObjectBuffMgr.cs                     |   14 ++++++-
 Main/System/FirstCharge/FirstChargeDayAward.cs                     |    1 
 Main/Component/UI/Common/PopupWindowsProcessor.cs                  |   26 +++++++++++--
 Main/System/BoneField/BoneFieldManager.cs                          |    3 -
 Main/System/FirstCharge/FirstChargeWin.cs                          |   10 ++--
 Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs    |    2 
 Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs |    2 
 Main/Component/UI/Effect/BattleEffectPlayer.cs                     |   28 ++++++++++++++
 15 files changed, 80 insertions(+), 25 deletions(-)

diff --git a/Main/Component/UI/Common/PopupWindowsProcessor.cs b/Main/Component/UI/Common/PopupWindowsProcessor.cs
index 413d3be..8e65e67 100644
--- a/Main/Component/UI/Common/PopupWindowsProcessor.cs
+++ b/Main/Component/UI/Common/PopupWindowsProcessor.cs
@@ -1,4 +1,3 @@
-using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
@@ -11,13 +10,18 @@
 {
     // 寮圭獥闃熷垪锛屽瓨鍌ㄥ緟澶勭悊鐨勫脊绐楄姹�
     List<PopupWindow> popupWindowQueue = new List<PopupWindow>();
-    
+
     // 褰撳墠姝e湪鏄剧ず鐨勫脊绐�
     PopupWindow currentWindow;
 
+    float firstTime = 0; //鎵撳紑HomeWin鏃剁殑鏃堕棿
+    float stayTime;
+    bool homeWinFirstOpened = false; //HomeWin鏄惁绗竴娆℃墦寮�
+
+
     // 涓婃寮圭獥鏃堕棿锛岀敤浜庢帶鍒跺脊绐椾箣闂寸殑闂撮殧
     float lastTime = 0; //涓婃寮圭獥鏃堕棿
-    
+
     /// <summary>
     /// 娣诲姞涓�涓脊绐楀埌澶勭悊闃熷垪
     /// </summary>
@@ -58,6 +62,7 @@
         }
     }
 
+
     /// <summary>
     /// LateUpdate涓鐞嗗脊绐楅槦鍒楋紝纭繚鍦ㄦ墍鏈夊叾浠栭�昏緫澶勭悊瀹屾瘯鍚庢墠鏄剧ず寮圭獥
     /// </summary>
@@ -95,6 +100,17 @@
         if (!UIManager.Instance.IsOpened<HomeWin>())
             return;
 
+        // 绗竴娆℃墦寮�HomeWin鏃惰褰曟椂闂�
+        if (!homeWinFirstOpened)
+        {
+            firstTime = Time.realtimeSinceStartup;
+            homeWinFirstOpened = true;
+            stayTime = float.Parse(FuncConfigConfig.Get("PopWin").Numerical1);
+            return;
+        }
+        // 绛夊緟x绉�
+        if (Time.realtimeSinceStartup - firstTime < stayTime)
+            return;
 
         if (UIManager.Instance.IsOpened(popupWindowQueue[0].window))
         {
@@ -104,6 +120,8 @@
 
         if (UIManager.Instance.ExistAnyFullScreenOrMaskWin(popupWindowQueue[0].window))
             return;
+
+
 
         if (currentWindow.window != null)
         {
@@ -130,7 +148,7 @@
     {
         // 绐楀彛鍚嶇О
         public string window;
-        
+
         // 鍔熻兘ID锛岀敤浜庢寚瀹氱獥鍙g殑鍏蜂綋鍔熻兘鎴栨樉绀烘ā寮�
         public int functionId;
 
diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 09a6e93..d740f15 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -30,6 +30,8 @@
         }
     }
 
+    public bool isBindBone = false;
+
     public bool isRedCamp = true;
     public EffectConfig effectConfig;
 
@@ -625,4 +627,30 @@
             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();
+    }
 }
diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index e221da3..104fbcf 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using Spine.Unity;
 using UnityEngine;
 
 
@@ -31,6 +32,10 @@
             BattleEffectPlayer effectPlayer = kv.Value.Key;
             if (null != effectPlayer)
             {
+                if (effectPlayer.isBindBone)
+                {
+                    continue;
+                }
                 effectPlayer.transform.position = battleObject.heroRectTrans.position;
                 var effectPos = effectPlayer.effectConfig.effectPos;
                 if (null != effectPos && effectPos.Length >= 2)
@@ -113,14 +118,14 @@
             return;
         }
 
-        bool isNew = false;
+        // bool isNew = false;
         if (buffDataDict.ContainsKey(vNetData.BuffID))
         {
             buffDataDict[vNetData.BuffID] = vNetData;
         }
         else
         {
-            isNew = true;
+            // isNew = true;
             buffDataDict.Add(vNetData.BuffID, vNetData);
         }
 
@@ -138,6 +143,11 @@
                     else
                     {
                         BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.BuffEffect, battleObject.heroRectTrans, battleObject.Camp);
+
+                        BoneFollower boneFollower = effect.AddMissingComponent<BoneFollower>();
+
+                        effect.BindBone(battleObject.motionBase.skeletonAnim, "hit");
+                        
                         HashSet<uint> buffIdSet = new HashSet<uint>();
                         buffIdSet.Add(vNetData.BuffID);
                         buffEffectDict.Add(skillConfig.BuffEffect, new KeyValuePair<BattleEffectPlayer, HashSet<uint>>(effect, buffIdSet));
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 4502828..304d99e 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -18,7 +18,7 @@
     public Action OnHitAnimationComplete;
     private List<Action> runningActions = new List<Action>();
 
-    protected SkeletonAnimation skeletonAnim;
+    public SkeletonAnimation skeletonAnim;
     protected Spine.AnimationState animState;
     protected Spine.Skeleton skeleton;
     protected float defaultMixDuration = 0f;
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
index d307197..db0849c 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
@@ -15,7 +15,7 @@
     public override void Reset()
     {
         base.Reset();
-        start = WorldToLocalAnchoredPosition(bulletTrans.position);
+        start = WorldToLocalAnchoredPosition(bulletTrans.position) + bulletOffset;
         end = WorldToLocalAnchoredPosition(target.position);
         duration = Vector2.Distance(start, end) / skillConfig.BulletFlySpeed;
         control = (start + end) / 2 + Vector2.up * 100f;
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
index 1f20599..9c1e0a3 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
@@ -28,7 +28,7 @@
         bounceElapsed = 0f;
         if (hurtList.Count > 0)
         {
-            start = WorldToLocalAnchoredPosition(bulletTrans.position);
+            start = WorldToLocalAnchoredPosition(bulletTrans.position) + bulletOffset;
             end = WorldToLocalAnchoredPosition(target.position);
             duration = Vector2.Distance(start, end) / skillConfig.BulletFlySpeed;
         }
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
index 974b025..be527cd 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
@@ -12,6 +12,8 @@
     protected RectTransform target;
     protected Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit;
 
+    protected Vector2 bulletOffset = Vector2.zero;
+
     protected bool finished = false;
     protected float duration = 0f;
     protected float elapsed = 0f;
@@ -44,6 +46,11 @@
                 out localPoint);
             bulletTrans.anchoredPosition = localPoint;
         }
+
+        if (bulletEffect.effectConfig.effectPos != null && bulletEffect.effectConfig.effectPos.Length >= 2)
+        {
+            bulletOffset = new Vector2(bulletEffect.effectConfig.effectPos[0], bulletEffect.effectConfig.effectPos[1]);
+        }
     }
 
     public virtual void Reset()
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
index 33db2ab..b70d473 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
@@ -19,7 +19,7 @@
     {
         base.Reset();
         hitTriggered = false;
-        start = WorldToLocalAnchoredPosition(bulletTrans.position);
+        start = WorldToLocalAnchoredPosition(bulletTrans.position) + bulletOffset;
         end = WorldToLocalAnchoredPosition(target.position);
         duration = Vector2.Distance(start, end) / skillConfig.BulletFlySpeed;
         Vector2 dir = (end - start).normalized;
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
index 1ab621f..09c334f 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
@@ -16,7 +16,7 @@
     public override void Reset()
     {
         base.Reset();
-        start = WorldToLocalAnchoredPosition(bulletTrans.position);
+        start = WorldToLocalAnchoredPosition(bulletTrans.position) + bulletOffset;
         end = WorldToLocalAnchoredPosition(target.position);
         duration = Vector2.Distance(start, end) / skillConfig.BulletFlySpeed;
         // BattleUtility.MarkStartAndEnd(bulletTrans, target);
diff --git a/Main/System/BoneField/BoneFieldManager.cs b/Main/System/BoneField/BoneFieldManager.cs
index d7fc492..e4e4857 100644
--- a/Main/System/BoneField/BoneFieldManager.cs
+++ b/Main/System/BoneField/BoneFieldManager.cs
@@ -1,5 +1,4 @@
 using System.Collections.Generic;
-using DG.DemiEditor;
 using LitJson;
 public class BoneFieldManager : GameSystemManager<BoneFieldManager>
 {
@@ -161,7 +160,7 @@
 
     public void UpdateFBEnd(H0320_tagFBEnd vNetData)
     {
-        if (vNetData.Msg.IsNullOrEmpty())
+        if (vNetData.Msg == null)
             return;
         ChallengeResultData result = ChallengeResultData.FromJson(vNetData.Msg);
         if (result == null || result.itemInfo.IsNullOrEmpty())
diff --git a/Main/System/BoneField/BoneFieldWin.cs b/Main/System/BoneField/BoneFieldWin.cs
index 8a05b7a..2b81791 100644
--- a/Main/System/BoneField/BoneFieldWin.cs
+++ b/Main/System/BoneField/BoneFieldWin.cs
@@ -1,4 +1,3 @@
-using System;
 using System.Collections.Generic;
 using UnityEngine;
 public class BoneFieldWin : UIBase
diff --git a/Main/System/FirstCharge/FirstChargeDayAward.cs b/Main/System/FirstCharge/FirstChargeDayAward.cs
index d14dbeb..f2ac4d7 100644
--- a/Main/System/FirstCharge/FirstChargeDayAward.cs
+++ b/Main/System/FirstCharge/FirstChargeDayAward.cs
@@ -1,4 +1,3 @@
-using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
diff --git a/Main/System/FirstCharge/FirstChargeHeroInfoWin.cs b/Main/System/FirstCharge/FirstChargeHeroInfoWin.cs
index 67e5c3f..16054aa 100644
--- a/Main/System/FirstCharge/FirstChargeHeroInfoWin.cs
+++ b/Main/System/FirstCharge/FirstChargeHeroInfoWin.cs
@@ -1,6 +1,3 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
 using UnityEngine;
 
 public class FirstChargeHeroInfoWin : UIBase
diff --git a/Main/System/FirstCharge/FirstChargeManager.cs b/Main/System/FirstCharge/FirstChargeManager.cs
index beba184..629108f 100644
--- a/Main/System/FirstCharge/FirstChargeManager.cs
+++ b/Main/System/FirstCharge/FirstChargeManager.cs
@@ -1,7 +1,5 @@
 using System;
-using System.Collections;
 using System.Collections.Generic;
-using System.Linq;
 using UnityEngine;
 
 public class FirstChargeManager : GameSystemManager<FirstChargeManager>
diff --git a/Main/System/FirstCharge/FirstChargeWin.cs b/Main/System/FirstCharge/FirstChargeWin.cs
index 30f1e62..2f45ca0 100644
--- a/Main/System/FirstCharge/FirstChargeWin.cs
+++ b/Main/System/FirstCharge/FirstChargeWin.cs
@@ -1,15 +1,15 @@
-using System;
-using System.Collections;
 using System.Collections.Generic;
-using System.Data;
 using UnityEngine;
 
 public class FirstChargeWin : FunctionsBaseWin
 {
+
     [Header("鏍囩椤�")]
     [SerializeField] TextEx[] txtTabTitles;
     [SerializeField] ButtonEx[] btnTabs;
     [SerializeField] RedpointBehaviour[] rpTabs;
+    [SerializeField] int fontSizeBefore = 24;
+    [SerializeField] int fontSizeAfter = 30;
     [Header("涓荤墿鍝�")]
     [SerializeField] TextEx txtName;
     [SerializeField] TextEx txtDesc;
@@ -43,8 +43,6 @@
         btnBuy.SetListener(OnClickBuyButton);
         btnPreviewHero.SetListener(OnClickPreviewHero);
     }
-
-
 
     protected override void OnPreOpen()
     {
@@ -250,6 +248,8 @@
     {
         for (int i = 0; i < btnTabs.Length; i++)
         {
+            txtTabTitles[i].fontSize = i == functionOrder ? fontSizeAfter : fontSizeBefore;
+
             int firstID = model.GetFirstIDByTabIndex(i);
             FirstChargeData firstChargeData;
             if (!model.TryGetFirstChargeDataByFirstId(firstID, out firstChargeData))

--
Gitblit v1.8.0