Main/Component/UI/Common/IntensifySmoothSlider.cs
@@ -170,14 +170,34 @@ private void CheckForValueChangeNotification(float currentSliderValue) { int currentSegment = GetCurrentSegment(currentSliderValue); // 如果当前的分段索引与上次触发事件时的索引不同,说明已跨越分段边界。 if (currentSegment != m_LastNotifiedSegment) { ValueChangeAction?.Invoke(currentSliderValue, CurrentStage); // 更新“上次触发”的索引为当前索引,防止本分段内重复触发。 m_LastNotifiedSegment = currentSegment; m_LastNotifiedSegment = currentSegment; } } /// <summary> /// 立即设置滑块的状态(值和阶段),而不触发任何事件或平滑动画。 /// </summary> /// <param name="newValue">要设置的新目标值 (0-1)。</param> /// <param name="newStage">要设置的新目标阶段和当前阶段。</param> public void SetStateInstantly(float newValue, int newStage) { this.value = newValue; this.stage = newStage; this.presentStage = newStage; if (m_Slider != null) { m_Slider.value = this.value; } refSpeed = 0f; isMoving = false; // 确保下次 LateUpdate 不会因为索引不匹配而错误触发 ValueChangeAction m_LastNotifiedSegment = GetCurrentSegment(this.value); } } Main/System/Battle/BattleField/TianziBillboradBattleField.cs
@@ -17,6 +17,7 @@ { base.Init(MapID, FuncLineID, extendData, _redTeamList, _blueTeamList, turnMax); TianziBillboradManager.Instance.battleLineID = TianziBillboradManager.Instance.todayLineID; int level = FuncLineID;// 关卡 extendData = _extendData; levelConfig = MainLevelConfig.Get(level); @@ -46,11 +47,6 @@ case 3://战斗结束 break; case 4://结算奖励 if (extendData != null && extendData.ContainsKey("totalHurt")) { ulong totalHurt = ulong.Parse(extendData["totalHurt"].ToString()); TianziBillboradBattleWin.TianziDamageBarEndDataAction?.Invoke(totalHurt); } break; case 5://结束状态标记 break; Main/System/Battle/TianziBillboradBattleWin.cs
@@ -1,6 +1,4 @@ using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using System.Collections.Generic; using LitJson; using UnityEngine; using UnityEngine.UI; @@ -19,7 +17,6 @@ [SerializeField] RectTransform rectBoxEnd; [SerializeField] UIEffectPlayer uiEffectPlayer; public static Action<ulong> TianziDamageBarEndDataAction; protected override void OnPreOpen() { @@ -27,11 +24,8 @@ tianziDamageBar.StageUp += OnStageUp; tianziDamageBar.ValueChangeAction += OnValueChangeAction; tianziDamageBar.ChangeEndAction += OnChangeEndAction; //tianziDamageBar.IsLastHitUnLockEvent += OnIsLastHitUnLockEvent; TianziDamageBarEndDataAction += OnTianziDamageBarEndData; TianziBillboradManager.Instance.OnUpdateBarInfoEvent += OnUpdateBarInfoEvent; MainWin.TabChangeEvent += OnTabChangeEvent; EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnSettlement); EventBroadcast.Instance.AddListener<HB419_tagSCObjHPRefresh>(EventName.BATTLE_TIANZI_REFRESH_HP, OnUpdateHpNum); bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0); if (isOpenBattleChangeTab) @@ -49,12 +43,9 @@ base.OnPreClose(); tianziDamageBar.StageUp -= OnStageUp; tianziDamageBar.ValueChangeAction -= OnValueChangeAction; tianziDamageBar.ChangeEndAction += OnChangeEndAction; //tianziDamageBar.IsLastHitUnLockEvent += OnIsLastHitUnLockEvent; TianziDamageBarEndDataAction -= OnTianziDamageBarEndData; tianziDamageBar.ChangeEndAction -= OnChangeEndAction; TianziBillboradManager.Instance.OnUpdateBarInfoEvent -= OnUpdateBarInfoEvent; MainWin.TabChangeEvent -= OnTabChangeEvent; EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnSettlement); EventBroadcast.Instance.RemoveListener<HB419_tagSCObjHPRefresh>(EventName.BATTLE_TIANZI_REFRESH_HP, OnUpdateHpNum); bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); if (isOpenBattleChangeTab) { @@ -76,12 +67,12 @@ } private void OnTianziDamageBarEndData(ulong obj) private void OnUpdateBarInfoEvent(ulong loaclNowHunt, ulong loaclMaxHp, int loaclHpNum) { tianziDamageBar.Show(obj); tianziDamageBar.Show(loaclNowHunt, loaclMaxHp, loaclHpNum); } private void OnStageUp(int stage) { @@ -139,8 +130,7 @@ DisplaySkillWordsList(lineupConfig); hpB419 = 0; maxHpB419 = 0; tianziDamageBar.Init(); if (null != bossBattleObject) @@ -194,63 +184,7 @@ RefreshBuff(buffList); } private void OnSettlement(string _guid, JsonData data) { if (string.Empty == _guid) return; var battle = BattleManager.Instance.GetBattleField(_guid); if (battle == null) return; var battleName = battle.ToString(); if (battleName != "TianziBillboradBattleField") return; if (data != null && data.ContainsKey("totalHurt")) { ulong totalHurt = ulong.Parse(data["totalHurt"].ToString()); tianziDamageBar.Show(totalHurt); } } private void OnIsLastHitUnLockEvent() { if (bossBattleObject == null) return; bossBattleObject.teamHero.curHp = (long)hpB419; bossBattleObject.teamHero.maxHp = (long)maxHpB419; Debug.Log($"TianziDamageBar OnIsLastHitUnLockEvent hpB419 {hpB419} maxHpB419 {maxHpB419}"); } ulong hpB419; ulong maxHpB419; private void OnUpdateHpNum(HB419_tagSCObjHPRefresh info) { if (bossBattleObject == null || info.ObjID != bossBattleObject.ObjID) return; ulong curHp = (ulong)GeneralDefine.GetFactValue(info.HP, info.HPEx); ulong maxHp = (ulong)GeneralDefine.GetFactValue(info.MaxHP, info.MaxHPEx); hpB419 = curHp; maxHpB419 = maxHp; //tianziDamageBar.ShowByB419(curHp, maxHp); } protected override void OnDamageTaken(BattleDmgInfo info) { base.OnDamageTaken(info); if (info == null || battleField == null || info.battleFieldGuid != battleField.guid) return; if (bossBattleObject != null && info.hurtObj.ObjID == bossBattleObject.ObjID) { TeamHero teamHero = bossBattleObject.teamHero; tianziDamageBar.Show(info); //tianziDamageBar.Show((ulong)teamHero.curHp, (ulong)teamHero.maxHp, info); } } private void OnValueChangeAction(float nowValue, int CurrentStage) { Main/System/TianziBillborad/TianziBillboradManager.cs
@@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using LitJson; using UnityEngine; public class TianziBillboradManager : GameSystemManager<TianziBillboradManager> { public readonly int rankType = 2; // 榜单类型 @@ -12,16 +13,13 @@ public ulong historyHurt; //本考验历史最大伤害 public ulong todayHurt; //本考验今日最大伤害 public bool isSkipSweepTip = false; public ulong loaclNowHunt = 0; public ulong loaclAllHunt = 0; public ulong loaclMaxHp = 0; public int loaclHpNum = 0; public event Action UpdateTianziKYInfoExent; public Dictionary<int, int[][]> rankAwards;// 每日排行奖励 {"名次":[[物品ID, 个数,是否拍品], ...], ...} 配置的名次key,自动按小于等于对应名次给奖励 public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.TianziBillboradRepoint); public override void Init() { EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnSettlement); DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent; DungeonManager.Instance.UpdateFBInfoChangeEvent += OnUpdateFBInfoChangeEvent; AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent; @@ -35,20 +33,14 @@ public override void Release() { EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnSettlement); DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent; DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent; AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; TimeMgr.Instance.OnDayEvent -= OnDayEvent; UpdateTianziKYInfoExent -= OnUpdateTianziKYInfoExent; } public void ClearBar() { loaclNowHunt = 0; loaclAllHunt = 0; loaclMaxHp = 0; loaclHpNum = 0; } private void OnBeforePlayerDataInitializeEvent() @@ -61,6 +53,83 @@ isSkipSweepTip = false; } public int battleLineID; //正在战斗中的LineID public ulong loaclNowHunt = 0; public ulong loaclAllHunt = 0; public ulong loaclMaxHp = 0; public int loaclHpNum = 0; public event Action<ulong, ulong, int> OnUpdateBarInfoEvent; private void OnDamageTaken(BattleDmgInfo info) { BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(DataMapID); if (info == null || battleField == null || battleField.guid != info.battleFieldGuid) return; BattleObject boss = battleField.FindBoss(); if (boss == null || boss.ObjID != info.hurtObj.ObjID) return; ShowBar(info); } public void ShowBar(BattleDmgInfo info) { if (info == null) return; //闪避和回血类不算伤害 if (info.IsType(DamageType.Dodge) || info.IsType(DamageType.Recovery)) return; var damages = info.damageList; for (int i = 0; i < damages.Count; i++) { ulong hunt = (ulong)damages[i]; loaclAllHunt += hunt; if (!TryGetBossConfig(DataMapID, battleLineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig)) return; int bossId = npcConfig.NPCID; if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, loaclAllHunt, out TianziConfig tianziConfig)) return; loaclMaxHp = (ulong)tianziConfig.MaxHP; loaclHpNum = tianziConfig.HPNum; loaclNowHunt = TianziConfig.GetCurrentHPDamage(bossId, loaclAllHunt); OnUpdateBarInfoEvent?.Invoke(loaclNowHunt, loaclMaxHp, loaclHpNum); Debug.Log($"TianziDamageBar hunt {hunt} loaclAllHunt {loaclNowHunt} loaclMaxHp {loaclMaxHp} loaclHpNum {loaclHpNum} 时间: {DateTime.Now:HH:mm:ss}"); } } public void ClearBar() { battleLineID = 0; loaclNowHunt = 0; loaclAllHunt = 0; loaclMaxHp = 0; loaclHpNum = 0; } private void OnSettlement(string _guid, JsonData data) { if (string.Empty == _guid) return; var battle = BattleManager.Instance.GetBattleField(_guid); if (battle == null) return; var battleName = battle.ToString(); if (battleName != "TianziBillboradBattleField") return; if (data == null || !data.ContainsKey("totalHurt")) return; ulong totalHurt = ulong.Parse(data["totalHurt"].ToString()); if (!TryGetBossConfig(DataMapID, battleLineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig)) return; int bossId = npcConfig.NPCID; if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, totalHurt, out TianziConfig tianziConfig)) return; ulong endNowHunt = TianziConfig.GetCurrentHPDamage(bossId, totalHurt); ulong endMaxHp = (ulong)tianziConfig.MaxHP; int endHpNum = tianziConfig.HPNum; OnUpdateBarInfoEvent?.Invoke(endNowHunt, endMaxHp, endHpNum); Debug.Log($"TianziDamageBar end nowHpNum {endHpNum} nowHunt {endNowHunt} nowHpMax{endMaxHp} 时间: {DateTime.Now:HH:mm:ss}"); } private void OnUpdateTianziKYInfoExent() { UpdateRedPoint(); Main/System/TianziBillborad/TianziBillboradPlayerRankCell.cs
Main/System/TianziBillborad/TianziBillboradPlayerRankCell.cs.meta
Main/System/TianziBillborad/TianziBillboradPlayerTop3Cell.cs
Main/System/TianziBillborad/TianziBillboradPlayerTop3Cell.cs.meta
Main/System/TianziBillborad/TianziDamageBar.cs
@@ -58,179 +58,45 @@ 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) if (TianziBillboradManager.Instance.loaclMaxHp > 0) { nowHunt = TianziBillboradManager.Instance.loaclNowHunt; nowHpMax = TianziBillboradManager.Instance.loaclMaxHp; nowHpNum = TianziBillboradManager.Instance.loaclHpNum; m_BoxCount.text = Language.Get("TianziBillborad07", Mathf.Max(nowHpNum - 1, 0)); Show(nowHunt, nowHpMax, nowHpNum); } else { 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; m_IntensifySlider.stage = 0; m_IntensifySlider.ResetStage(); nowHunt = 0; // 初始血量为0 nowHpMax = (ulong)tianziConfig.MaxHP; m_BoxCount.text = Language.Get("TianziBillborad07", 0); Show(nowHunt, nowHpMax, nowHpNum); } } public void Show(ulong hunt, ulong maxHp, int hpNum) { nowHunt = hunt; nowHpMax = maxHp; nowHpNum = hpNum; // 除零保护 float percentage = 0f; if (nowHpMax > 0) { percentage = Mathf.Clamp(nowHunt, 0, nowHpMax) / (float)nowHpMax; } m_IntensifySlider.value = percentage; m_IntensifySlider.stage = nowHpNum; // 设置当前阶段 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}"); } } }