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 StageUp; public event Action ValueChangeAction; public event Action 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}"); } } }