From 2d3a60767d0cd69c8dec97e39937bcd0c667be1c Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 12 十一月 2025 18:54:57 +0800
Subject: [PATCH] 125 战斗 血条&护盾1护盾2表现

---
 Main/System/Battle/UIComp/BattleHeroInfoBar.cs |  100 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 71 insertions(+), 29 deletions(-)

diff --git a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
index d118d33..13400ff 100644
--- a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
+++ b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -87,11 +87,16 @@
         UpdateXP(battleObject.teamHero.rage, battleObject.teamHero.rage, 100, false);
 
         long shieldValue = battleObject.buffMgr.GetShieldValue();
+        long curHp = battleObject.teamHero.curHp;
         long maxHp = battleObject.teamHero.maxHp;
-        //  绗竴鏉℃姢鐩剧殑鍊兼渶澶у�兼槸褰撳墠鐨凪axHp 绗簩鏉℃姢鐩剧殑鏈�澶у�煎叾瀹炰篃鏄疢axHp 澶氫綑鐨勪笉鍋氭樉绀�
-
-        sliderShield1.value = maxHp > 0 ? Mathf.Min((float)shieldValue, (float)maxHp) / (float)maxHp : 0;
-        sliderShield2.value = maxHp > 0 ? Mathf.Max((float)(shieldValue - maxHp), 0f) / (float)maxHp : 0;
+        
+        // 鎶ょ浘1鐨勫�� = min(褰撳墠琛�閲� + 鎶ょ浘鍊�, maxHp) / maxHp
+        float shield1Value = maxHp > 0 ? Mathf.Min((float)(curHp + shieldValue), (float)maxHp) / (float)maxHp : 0;
+        // 鎶ょ浘2鐨勫�� = max(褰撳墠琛�閲� + 鎶ょ浘鍊� - maxHp, 0) / maxHp
+        float shield2Value = maxHp > 0 ? Mathf.Max((float)(curHp + shieldValue - maxHp), 0f) / (float)maxHp : 0;
+        
+        sliderShield1.value = shield1Value;
+        sliderShield2.value = shield2Value;
     }
     
     public void SetActive(bool active)
@@ -117,12 +122,18 @@
             }
         }
 
-        //  check shield buff
+        // check shield buff
         long shieldValue = battleObject.buffMgr.GetShieldValue();
+        long curHp = battleObject.teamHero.curHp;
         long maxHp = battleObject.teamHero.maxHp;
-        //  绗竴鏉℃姢鐩剧殑鍊兼渶澶у�兼槸褰撳墠鐨凪axHp 绗簩鏉℃姢鐩剧殑鏈�澶у�煎叾瀹炰篃鏄疢axHp 澶氫綑鐨勪笉鍋氭樉绀�
-        sliderShield1.value = maxHp > 0 ? Mathf.Min((float)shieldValue, (float)maxHp) / (float)maxHp : 0;
-        sliderShield2.value = maxHp > 0 ? Mathf.Max((float)(shieldValue - maxHp), 0f) / (float)maxHp : 0;
+        
+        // 鎶ょ浘1鐨勫�� = min(褰撳墠琛�閲� + 鎶ょ浘鍊�, maxHp) / maxHp
+        float shield1Value = maxHp > 0 ? Mathf.Min((float)(curHp + shieldValue), (float)maxHp) / (float)maxHp : 0;
+        // 鎶ょ浘2鐨勫�� = max(褰撳墠琛�閲� + 鎶ょ浘鍊� - maxHp, 0) / maxHp
+        float shield2Value = maxHp > 0 ? Mathf.Max((float)(curHp + shieldValue - maxHp), 0f) / (float)maxHp : 0;
+        
+        sliderShield1.value = shield1Value;
+        sliderShield2.value = shield2Value;
     }
     
     /// <summary>
@@ -251,8 +262,6 @@
         KillTween(ref damageSequence);
 
         long maxHp = dmgInfo.battleHurtParam.maxHp;
-        long fromShield = dmgInfo.battleHurtParam.fromShieldValue;
-        long toShield = dmgInfo.battleHurtParam.toShieldValue;
 
         if (maxHp <= 0)
         {
@@ -261,33 +270,66 @@
             return;
         }
 
-        //  绗竴鏉℃姢鐩剧殑鍊兼渶澶у�兼槸褰撳墠鐨凪axHp 绗簩鏉℃姢鐩剧殑鏈�澶у�煎叾瀹炰篃鏄疢axHp 澶氫綑鐨勪笉鍋氭樉绀�
-        float fromValue1 = (float)dmgInfo.battleHurtParam.phase1FromShieldValue / (float)maxHp;
-        float targetValue1 = (float)dmgInfo.battleHurtParam.phase1ToShieldValue / (float)maxHp;
-
-        float fromValue2 = (float)dmgInfo.battleHurtParam.phase2FromShieldValue / (float)maxHp;
-        float targetValue2 = (float)dmgInfo.battleHurtParam.phase2ToShieldValue / (float)maxHp;
+        long fromHp = dmgInfo.battleHurtParam.fromHp;
+        long toHp = dmgInfo.battleHurtParam.toHp;
+        long fromShield = dmgInfo.battleHurtParam.fromShieldValue;
+        long toShield = dmgInfo.battleHurtParam.toShieldValue;
 
         damageSequence = DOTween.Sequence();
 
-        sliderShield2.value = fromValue2;
-        if (fromValue2 > 0  && fromValue2 != targetValue2)
+        // 璁剧疆鍒濆鍊�
+        if (fromShield > 0)
         {
-            damageSequence.Append(sliderShield2.DOValue(targetValue2, 0.2f));
+            // 鎶ょ浘1鐨勫�� = min(褰撳墠琛�閲� + 褰撳墠鎶ょ浘鍊�, maxHp) / maxHp
+            float fromShield1Value = Mathf.Min((float)(fromHp + fromShield), (float)maxHp) / (float)maxHp;
+            // 鎶ょ浘2鐨勫�� = max(褰撳墠琛�閲� + 褰撳墠鎶ょ浘鍊� - maxHp, 0) / maxHp
+            float fromShield2Value = Mathf.Max((float)(fromHp + fromShield - maxHp), 0f) / (float)maxHp;
+            
+            sliderShield1.value = fromShield1Value;
+            sliderShield2.value = fromShield2Value;
+
+            // 濡傛灉鎶ょ浘2鏈夊�硷紝鍏堟挱鏀炬姢鐩�2鐨勫姩鐢�
+            if (fromShield2Value > 0)
+            {
+                // 璁$畻鎶ょ浘2鐨勫垵濮嬪�煎拰鐩爣鍊�
+                long beginShield2Value = fromHp + fromShield - maxHp;
+                long endShield2Value = Mathf.Max(0, (int)(toHp + toShield - maxHp));
+                
+                float toShield2Value = (float)endShield2Value / (float)maxHp;
+
+                if (Mathf.Abs(fromShield2Value - toShield2Value) > 0.001f)
+                {
+                    damageSequence.Append(sliderShield2.DOValue(toShield2Value, 0.2f));
+                }
+            }
+
+            // 鎾斁鎶ょ浘1鐨勫姩鐢�
+            if (fromShield1Value > 0)
+            {
+                // 璁$畻鎶ょ浘1鐨勭洰鏍囧��
+                float toShield1Value = Mathf.Min((float)(toHp + toShield), (float)maxHp) / (float)maxHp;
+
+                if (Mathf.Abs(fromShield1Value - toShield1Value) > 0.001f)
+                {
+                    damageSequence.Append(sliderShield1.DOValue(toShield1Value, 0.2f));
+                }
+            }
+        }
+        else
+        {
+            // 娌℃湁鎶ょ浘锛岀洿鎺ヨ缃负0
+            sliderShield1.value = 0f;
+            sliderShield2.value = 0f;
         }
 
-        sliderShield1.value = fromValue1;
-        if (fromValue1 > 0 && fromValue1 != targetValue1)
-        {
-            damageSequence.Append(sliderShield1.DOValue(targetValue1, 0.2f));
-        }
+        // 琛�閲忓姩鐢�
+        float fromHpValue = (float)fromHp / (float)maxHp;
+        float toHpValue = (float)toHp / (float)maxHp;
+        
+        sliderHp.value = fromHpValue;
 
-        if (dmgInfo.battleHurtParam.fromHp != dmgInfo.battleHurtParam.toHp)
+        if (Mathf.Abs(fromHpValue - toHpValue) > 0.001f)
         {
-            float fromHpValue = (float)dmgInfo.battleHurtParam.fromHp / (float)maxHp;
-            float toHpValue = (float)dmgInfo.battleHurtParam.toHp / (float)maxHp;
-
-            sliderHp.value = fromHpValue;
             damageSequence.Append(sliderHp.DOValue(toHpValue, 0.2f));
         }
 

--
Gitblit v1.8.0