yyl
6 天以前 27874500782d2b516ad8eacbbc22db81bfac7bb0
125 战斗 血量回弹问题处理
2个文件已修改
66 ■■■■ 已修改文件
Main/System/Battle/BattleObject/BattleObject.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/BattleHeroInfoBar.cs 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs
@@ -654,10 +654,10 @@
        {
            case PlayerDataType.HP:
                long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
                bool isMinus = teamHero.curHp > toHp;
                if (!IsTianziBoss())
                {
                    heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, true);
                    heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp, false);
                }
                teamHero.curHp = newValue;
                // Debug.LogError("OnObjPropertyRefreshView " + teamHero.curHp);
@@ -666,7 +666,7 @@
                teamHero.maxHp = newValue;
                if (!IsTianziBoss())
                {
                    heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, true);
                    heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp, false);
                }
                break;
            case PlayerDataType.XP:
Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -26,16 +26,6 @@
        public bool isRage = false;
    }
    
    /// <summary>
    /// 血条更新请求
    /// </summary>
    private class HpUpdateRequest
    {
        public long fromHp;
        public long toHp;
        public long maxHp;
        public bool tween;
    }
    
    [Header("UI Components")]
    public Slider sliderHp;
@@ -70,7 +60,6 @@
    protected Tween shieldTween2;
    protected Sequence damageSequence;
    
    private Queue<HpUpdateRequest> hpUpdateQueue = new Queue<HpUpdateRequest>();
    private Queue<BattleDmgInfo> damageUpdateQueue = new Queue<BattleDmgInfo>();
    
    // 飘字GCD相关
@@ -162,10 +151,10 @@
        sliderShield1.value = shield1Value;
        sliderShield2.value = shield2Value;
        if (!battleObject.IsTianziBoss())
        {
            UpdateHP(curHp, curHp, maxHp, false);
        }
        // if (!battleObject.IsTianziBoss())
        // {
        //     UpdateHP(curHp, curHp, maxHp, false);
        // }
        
    
        // 打印刷新护盾时的状态
@@ -199,27 +188,12 @@
    /// </summary>
    public void UpdateHP(long fromHp, long toHp, long maxHp, bool tween = true)
    {
        // 加入队列
        hpUpdateQueue.Enqueue(new HpUpdateRequest
        {
            fromHp = fromHp,
            toHp = toHp,
            maxHp = maxHp,
            tween = tween
        });
    }
    /// <summary>
    /// 实际执行血量更新
    /// </summary>
    private void ExecuteHpUpdate(HpUpdateRequest request)
    {
        KillTween(ref hpTween);
        
        float fromValue = (float)request.fromHp / (float)request.maxHp;
        float targetValue = (float)request.toHp / (float)request.maxHp;
        float fromValue = (float)fromHp / (float)maxHp;
        float targetValue = (float)toHp / (float)maxHp;
        
        if (request.tween)
        if (tween)
        {
            sliderHp.value = fromValue;
            hpTween = sliderHp.DOValue(targetValue, 0.3f).SetAutoKill(false);
@@ -230,6 +204,7 @@
            sliderHp.value = targetValue;
        }
    }
    /// <summary>
    /// !!!临时的用于天子更新血量显示,等接口完善后删除
@@ -479,15 +454,15 @@
        
        // 记录所有packUID的数据(包括早触发的包),但只采用最大packUID的数据
        // 记录施法者的血量变化
        if (dmgInfo.battleHurtParam.caster?.casterObj != null)
        BattleCastObj battleCastObj = dmgInfo.battleHurtParam.caster;
        if (battleCastObj != null && battleCastObj.casterObj != null)
        {
            BattleCastObj caster = dmgInfo.battleHurtParam.caster;
            long casterID = caster.casterObj.ObjID;
            long casterID = battleCastObj.casterObj.ObjID;
            
            // 获取旧血量用于计算变化
            long oldHp = hpDict.ContainsKey(casterID) ? hpDict[casterID] : caster.fromHp;
            long newHp = caster.toHp;
            long maxHp = caster.maxHp;
            long oldHp = hpDict.ContainsKey(casterID) ? hpDict[casterID] : battleCastObj.fromHp;
            long newHp = battleCastObj.toHp;
            long maxHp = battleCastObj.maxHp;
            long hpChange = newHp - oldHp;
            
            // 只有当前packUID等于最大packUID时才更新记录
@@ -553,13 +528,6 @@
            BattleDmgInfo dmgInfo = damageUpdateQueue.Dequeue();
            CompareAndExchangeLargestPackUIDHp(dmgInfo);
            ExecuteDamageUpdate(dmgInfo);
            return;
        }
        // 其次处理UpdateHP
        else if (hpUpdateQueue.Count > 0)
        {
            HpUpdateRequest request = hpUpdateQueue.Dequeue();
            ExecuteHpUpdate(request);
            return;
        }
    }