yyl
16 小时以前 2d3a60767d0cd69c8dec97e39937bcd0c667be1c
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;
        //  第一条护盾的值最大值是当前的MaxHp 第二条护盾的最大值其实也是MaxHp 多余的不做显示
        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;
        //  第一条护盾的值最大值是当前的MaxHp 第二条护盾的最大值其实也是MaxHp 多余的不做显示
        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;
        }
        //  第一条护盾的值最大值是当前的MaxHp 第二条护盾的最大值其实也是MaxHp 多余的不做显示
        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));
        }