using System;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
public class TianziDamageBar : MonoBehaviour
|
{
|
[SerializeField] IntensifySmoothSlider m_IntensifySlider;
|
[SerializeField] Text m_HurtInfo;
|
[SerializeField] Text m_BoxCount;
|
|
int bossId;
|
ulong nowHunt; // 当前对Boss的伤害
|
ulong nowHpMax; // 当前Boss最大血量
|
int nowHpNum; // 当前是Boss第几条血
|
public event Action<int> StageUp;
|
public event Action<float, int> ValueChangeAction;
|
public event Action<ulong, ulong> ChangeEndAction;
|
|
public void Awake()
|
{
|
m_IntensifySlider.StageUpAction += OnStageUp;
|
m_IntensifySlider.ValueChangeAction += OnValueChange;
|
m_IntensifySlider.ChangeEndAction += OnChangeEndAction;
|
|
}
|
public void OnDestroy()
|
{
|
m_IntensifySlider.StageUpAction -= OnStageUp;
|
m_IntensifySlider.ValueChangeAction -= OnValueChange;
|
m_IntensifySlider.ChangeEndAction -= OnChangeEndAction;
|
}
|
|
private void OnChangeEndAction()
|
{
|
ChangeEndAction.Invoke(nowHunt, nowHpMax);
|
m_HurtInfo.text = Language.Get("BoneField09", nowHunt, UIHelper.ReplaceLargeNum(nowHpMax));
|
}
|
|
private void OnValueChange(float nowValue, int CurrentStage)
|
{
|
int hpNum = CurrentStage;
|
if (!TianziConfig.TryGetTianziConfigByBossIDAndHPNum(bossId, hpNum, out TianziConfig tianziConfig))
|
return;
|
ulong hpMax = (ulong)tianziConfig.MaxHP;
|
if (hpMax > 0)
|
{
|
m_HurtInfo.text = Language.Get("BoneField09", (int)(nowValue * hpMax), UIHelper.ReplaceLargeNum(hpMax));
|
}
|
//Debug.Log($"TianziDamageBar nowValue {nowValue} CurrentStage {CurrentStage} 时间: {DateTime.Now:HH:mm:ss}");
|
ValueChangeAction?.Invoke(nowValue, CurrentStage);
|
}
|
|
private void OnStageUp(int stage)
|
{
|
m_BoxCount.text = Language.Get("TianziBillborad07", Mathf.Max(stage - 1, 0));
|
StageUp?.Invoke(stage);
|
}
|
|
public void Init()
|
{
|
int dataMapID = TianziBillboradManager.Instance.DataMapID;
|
int lineID = TianziBillboradManager.Instance.todayLineID;
|
if (!TianziBillboradManager.Instance.TryGetBossConfig(dataMapID, lineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig))
|
return;
|
bossId = npcConfig.NPCID;
|
nowHpNum = 1; // 默认从第1条血开始
|
if (!TianziConfig.TryGetTianziConfigByBossIDAndHPNum(bossId, nowHpNum, out TianziConfig tianziConfig))
|
return;
|
if (TianziBillboradManager.Instance.loaclHpNum > 0)
|
{
|
nowHunt = TianziBillboradManager.Instance.loaclNowHunt;
|
nowHpMax = TianziBillboradManager.Instance.loaclMaxHp;
|
nowHpNum = TianziBillboradManager.Instance.loaclHpNum;
|
m_BoxCount.text = Language.Get("TianziBillborad07", Mathf.Max(nowHpNum - 1, 0));
|
}
|
else
|
{
|
m_IntensifySlider.stage = 0;
|
m_IntensifySlider.ResetStage();
|
nowHunt = 0; // 初始血量为0
|
nowHpMax = (ulong)tianziConfig.MaxHP;
|
m_BoxCount.text = Language.Get("TianziBillborad07", 0);
|
}
|
|
|
|
// 除零保护
|
float percentage = 0f;
|
if (nowHpMax > 0)
|
{
|
percentage = Mathf.Clamp(nowHunt, 0, nowHpMax) / (float)nowHpMax;
|
}
|
|
m_IntensifySlider.value = percentage;
|
m_IntensifySlider.stage = nowHpNum; // 设置当前阶段
|
m_HurtInfo.text = Language.Get("BoneField09", nowHunt, UIHelper.ReplaceLargeNum(nowHpMax));
|
}
|
|
|
// public event Action IsLastHitUnLockEvent;
|
// public void Show(ulong hp, ulong maxHp, BattleDmgInfo info) // 显示伤害条
|
// {
|
// if (!TianziConfig.TryGetTianziConfigByBossIDAndMaxHP(bossId, (long)maxHp, out TianziConfig tianziConfig))
|
// return;
|
// if (info.isLastHit && isLock)
|
// {
|
// isLock = false;
|
// IsLastHitUnLockEvent?.Invoke();
|
// }
|
|
// int hpNum = tianziConfig.HPNum;
|
// ulong hunt = maxHp - hp;
|
|
// if (maxHp < nowHpMax)
|
// {
|
// Debug.LogWarning($"TianziDamageBar SkillID {info.skillConfig.SkillID} hp {hp} maxHp {maxHp} hunt {hunt} nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax {nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
// return;
|
// }
|
|
// if (!isLock)
|
// {
|
// // 根据maxHp获得当前是第几条血
|
// nowHpNum = hpNum;
|
// nowHunt = hunt;
|
// nowHpMax = maxHp;
|
// // 除零保护
|
// float percentage = 0f;
|
// if (nowHpMax > 0)
|
// {
|
// percentage = Mathf.Clamp(nowHunt, 0, nowHpMax) / (float)nowHpMax;
|
// }
|
// m_IntensifySlider.value = percentage;
|
// m_IntensifySlider.stage = nowHpNum; // 设置当前阶段
|
// Debug.Log($"TianziDamageBar SkillID {info.skillConfig.SkillID} hp {hp} maxHp {maxHp} hunt {hunt} nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax {nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
// }
|
// }
|
|
// bool isLock = false;
|
// public void ShowByB419(ulong hp, ulong maxHp)
|
// {
|
// if (!TianziConfig.TryGetTianziConfigByBossIDAndMaxHP(bossId, (long)maxHp, out TianziConfig tianziConfig))
|
// return;
|
|
// isLock = true;
|
|
// int hpNum = tianziConfig.HPNum;
|
// ulong hunt = maxHp - hp;
|
|
// if (maxHp < nowHpMax)
|
// {
|
// Debug.LogWarning($"TianziDamageBar B419 hp {hp} maxHp {maxHp} hunt {hunt} nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax {nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
// return;
|
// }
|
// nowHpNum = hpNum;
|
// nowHunt = hunt;
|
// nowHpMax = maxHp;
|
// // 除零保护
|
// float percentage = 0f;
|
// if (nowHpMax > 0)
|
// {
|
// percentage = Mathf.Clamp(nowHunt, 0, nowHpMax) / (float)nowHpMax;
|
// }
|
// m_IntensifySlider.value = percentage;
|
// m_IntensifySlider.stage = nowHpNum; // 设置当前阶段
|
// Debug.Log($"TianziDamageBar B419 hp {hp} maxHp {maxHp} hunt {hunt} nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax{nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
// }
|
|
|
public void Show(ulong totalHP) // 显示伤害条
|
{
|
if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, totalHP, out TianziConfig tianziConfig))
|
return;
|
ulong endMaxHp = (ulong)tianziConfig.MaxHP;
|
int endHpNum = tianziConfig.HPNum;
|
ulong endNowHunt = TianziConfig.GetCurrentHPDamage(bossId, totalHP);
|
|
nowHpNum = endHpNum;
|
nowHunt = endNowHunt;
|
nowHpMax = endMaxHp;
|
|
// 除零保护
|
float percentage = 0f;
|
if (nowHpMax > 0)
|
{
|
percentage = Mathf.Clamp(nowHunt, 0, nowHpMax) / (float)nowHpMax;
|
}
|
m_IntensifySlider.value = percentage;
|
m_IntensifySlider.stage = nowHpNum; // 设置当前阶段
|
//Debug.Log($"TianziDamageBar end nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax{nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
}
|
|
|
public void Show(BattleDmgInfo _damageInfo)
|
{
|
if (_damageInfo == null)
|
return;
|
//闪避和回血类不算伤害
|
if (_damageInfo.IsType(DamageType.Dodge) || _damageInfo.IsType(DamageType.Recovery))
|
return;
|
var damages = _damageInfo.damageList;
|
for (int i = 0; i < damages.Count; i++)
|
{
|
ulong hunt = (ulong)damages[i];
|
TianziBillboradManager.Instance.loaclAllHunt += hunt;
|
if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, TianziBillboradManager.Instance.loaclAllHunt, out TianziConfig tianziConfig))
|
return;
|
TianziBillboradManager.Instance.loaclMaxHp = (ulong)tianziConfig.MaxHP;
|
TianziBillboradManager.Instance.loaclHpNum = tianziConfig.HPNum;
|
TianziBillboradManager.Instance.loaclNowHunt = TianziConfig.GetCurrentHPDamage(bossId, TianziBillboradManager.Instance.loaclAllHunt);
|
|
// if (loaclMaxHp < nowHpMax || loaclHpNum < nowHpNum)
|
// {
|
// Debug.LogWarning($"TianziDamageBar hunt {hunt} loaclAllHunt {loaclAllHunt} loaclHpNum {loaclHpNum} loaclNowHunt {loaclNowHunt} nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax{nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
// return;
|
// }
|
|
// if (loaclNowHunt < nowHunt)
|
// {
|
// Debug.LogWarning($"TianziDamageBar hunt {hunt} loaclAllHunt {loaclAllHunt} loaclHpNum {loaclHpNum} loaclNowHunt {loaclNowHunt} nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax{nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
// return;
|
// }
|
nowHunt = TianziBillboradManager.Instance.loaclNowHunt;
|
nowHpMax = TianziBillboradManager.Instance.loaclMaxHp;
|
nowHpNum = TianziBillboradManager.Instance.loaclHpNum;
|
// 除零保护
|
float percentage = 0f;
|
if (nowHpMax > 0)
|
{
|
percentage = Mathf.Clamp(nowHunt, 0, nowHpMax) / (float)nowHpMax;
|
}
|
m_IntensifySlider.value = percentage;
|
m_IntensifySlider.stage = nowHpNum;
|
//Debug.Log($"TianziDamageBar hunt {hunt} loaclAllHunt {loaclAllHunt} loaclHpNum {loaclHpNum} loaclNowHunt {loaclNowHunt} nowHpNum {nowHpNum} nowHunt {nowHunt} nowHpMax{nowHpMax} 时间: {DateTime.Now:HH:mm:ss}");
|
}
|
}
|
}
|