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