| | |
| | | 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; |
| | |
| | | protected Tween shieldTween2; |
| | | protected Sequence damageSequence; |
| | | |
| | | private Queue<HpUpdateRequest> hpUpdateQueue = new Queue<HpUpdateRequest>(); |
| | | private Queue<BattleDmgInfo> damageUpdateQueue = new Queue<BattleDmgInfo>(); |
| | | |
| | | // 飘字GCD相关 |
| | |
| | | sliderShield1.value = shield1Value; |
| | | sliderShield2.value = shield2Value; |
| | | |
| | | if (!battleObject.IsTianziBoss()) |
| | | { |
| | | UpdateHP(curHp, curHp, maxHp, false); |
| | | } |
| | | // if (!battleObject.IsTianziBoss()) |
| | | // { |
| | | // UpdateHP(curHp, curHp, maxHp, false); |
| | | // } |
| | | |
| | | |
| | | // 打印刷新护盾时的状态 |
| | |
| | | /// </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); |
| | |
| | | sliderHp.value = targetValue; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// !!!临时的用于天子更新血量显示,等接口完善后删除 |
| | |
| | | |
| | | // 记录所有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时才更新记录 |
| | |
| | | BattleDmgInfo dmgInfo = damageUpdateQueue.Dequeue(); |
| | | CompareAndExchangeLargestPackUIDHp(dmgInfo); |
| | | ExecuteDamageUpdate(dmgInfo); |
| | | return; |
| | | } |
| | | // 其次处理UpdateHP |
| | | else if (hpUpdateQueue.Count > 0) |
| | | { |
| | | HpUpdateRequest request = hpUpdateQueue.Dequeue(); |
| | | ExecuteHpUpdate(request); |
| | | return; |
| | | } |
| | | } |