| | |
| | | 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) |
| | |
| | | |
| | | // 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> |
| | |
| | | KillTween(ref damageSequence); |
| | | |
| | | long maxHp = dmgInfo.battleHurtParam.maxHp; |
| | | long fromShield = dmgInfo.battleHurtParam.fromShieldValue; |
| | | long toShield = dmgInfo.battleHurtParam.toShieldValue; |
| | | |
| | | if (maxHp <= 0) |
| | | { |
| | |
| | | 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)); |
| | | } |
| | | } |
| | | |
| | | sliderShield1.value = fromValue1; |
| | | if (fromValue1 > 0 && fromValue1 != targetValue1) |
| | | // 播放护盾1的动画 |
| | | if (fromShield1Value > 0) |
| | | { |
| | | damageSequence.Append(sliderShield1.DOValue(targetValue1, 0.2f)); |
| | | // 计算护盾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; |
| | | } |
| | | |
| | | if (dmgInfo.battleHurtParam.fromHp != dmgInfo.battleHurtParam.toHp) |
| | | { |
| | | float fromHpValue = (float)dmgInfo.battleHurtParam.fromHp / (float)maxHp; |
| | | float toHpValue = (float)dmgInfo.battleHurtParam.toHp / (float)maxHp; |
| | | // 血量动画 |
| | | float fromHpValue = (float)fromHp / (float)maxHp; |
| | | float toHpValue = (float)toHp / (float)maxHp; |
| | | |
| | | sliderHp.value = fromHpValue; |
| | | |
| | | if (Mathf.Abs(fromHpValue - toHpValue) > 0.001f) |
| | | { |
| | | damageSequence.Append(sliderHp.DOValue(toHpValue, 0.2f)); |
| | | } |
| | | |