From b9ae79116a9e419b28c38f1c84016ec7938afefa Mon Sep 17 00:00:00 2001 From: yyl <yyl> Date: 星期二, 30 九月 2025 18:13:23 +0800 Subject: [PATCH] 125 战斗 1.快速结束战斗失效的问题 2.角色UI高过外部UI的问题 3.战斗伤害消失的问题 --- Main/System/Battle/BattleField/BattleField.cs | 20 +++--- Main/System/Battle/RecordPlayer/RecordPlayer.cs | 41 ++++++++++--- Main/System/Battle/BattleManager.cs | 2 Main/System/Battle/BattleUtility.cs | 44 ++++++++++++++ Main/System/Battle/Skill/SkillBase.cs | 1 Main/Manager/UIManager.cs | 2 Main/System/Battle/BattleHUDWin.cs | 10 +-- Main/System/Battle/UIComp/DamageLine.cs | 2 Main/System/Battle/Motion/MotionBase.cs | 7 ++ Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs | 22 +++++++ Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs | 2 Main/System/Battle/Define/BattleDmgInfo.cs | 6 ++ 12 files changed, 126 insertions(+), 33 deletions(-) diff --git a/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs b/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs index 7d4214d..d02c2b9 100644 --- a/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs +++ b/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs @@ -63,7 +63,7 @@ temp += " pack type is " + pack.GetType().Name + "\n"; } } - BattleDebug.LogError(temp); + // BattleDebug.LogError(temp); } public void AddPack(GameNetPackBasic pack) diff --git a/Main/Manager/UIManager.cs b/Main/Manager/UIManager.cs index e7cdb06..5be6bdd 100644 --- a/Main/Manager/UIManager.cs +++ b/Main/Manager/UIManager.cs @@ -586,7 +586,7 @@ // 璁剧疆UI鐨勬帓搴忛『搴� ui.SetSortingOrder(sortingOrder); // 鏇存柊褰撳墠鏈�楂樻帓搴忛『搴� - currentHighestSortingOrder += ui.uiLayer == UILayer.Static ? 55/*杩欓噷鏄鑹�+鐗规晥涔嬩笂鐨勫眰绾�*/ : 10; + currentHighestSortingOrder += ui.uiLayer == UILayer.Static ? 155/*杩欓噷鏄鑹�+鐗规晥涔嬩笂鐨勫眰绾�*/ : 10; // Debug.Log(ui.uiName + " order is " + sortingOrder + " " + currentHighestSortingOrder); } diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs index 5a2ae2d..1111307 100644 --- a/Main/System/Battle/BattleField/BattleField.cs +++ b/Main/System/Battle/BattleField/BattleField.cs @@ -478,16 +478,16 @@ int winFaction = (int)turnFightStateData["winFaction"]; //鑾疯儨闃佃惀: 涓�鑸负1鎴栬��2锛屽綋鐜╁鍙戣捣鐨勬垬鏂楁椂锛屽鏋滆幏鑳滈樀钀ヤ笉绛変簬1浠h〃鐜╁澶辫触浜� - if (winFaction == 1) - { - Debug.LogError(guid + " : 鎴樻枟鑳滃埄"); - // 鎴樻枟鑳滃埄 - } - else - { - // 鎴樻枟澶辫触 - Debug.LogError(guid + " : 鎴樻枟澶辫触"); - } + // if (winFaction == 1) + // { + // Debug.LogError(guid + " : 鎴樻枟鑳滃埄"); + // // 鎴樻枟鑳滃埄 + // } + // else + // { + // // 鎴樻枟澶辫触 + // Debug.LogError(guid + " : 鎴樻枟澶辫触"); + // } IsBattleFinish = true; diff --git a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs index fc04597..9cd762e 100644 --- a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs +++ b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs @@ -15,6 +15,11 @@ public override void Run() { + if (isFinish) + { + return; + } + base.Run(); if (!isRunOnce) @@ -63,6 +68,23 @@ } } + public override void ForceFinish() + { + isFinish = true; + + // 鐩存帴缁撴潫 + foreach (var deadPack in deadPackList) + { + BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID); + if (null != deadObj) + { + OnDeathAnimationEnd(deadObj); + } + } + + base.ForceFinish(); + } + private void OnDeathAnimationEnd(BattleObject deadObj) { // 鍙湁涓荤嚎鎺夎惤鐗╁搧 diff --git a/Main/System/Battle/BattleHUDWin.cs b/Main/System/Battle/BattleHUDWin.cs index 6517345..ef233a2 100644 --- a/Main/System/Battle/BattleHUDWin.cs +++ b/Main/System/Battle/BattleHUDWin.cs @@ -54,9 +54,9 @@ ClearContent(guid); } - private void ClearContent(string guid) + private void ClearContent(string guid, bool force = false) { - if (battleField.guid == guid) + if ((battleField != null && battleField.guid == guid) || force) { for (int i = damageContentList.Count - 1; i >= 0; i--) { @@ -105,9 +105,6 @@ private void OnDamageTaken(BattleDmgInfo damageInfo) { - if (battleField.IsBattleEnd()) - return; - GameObject damageContent = damagePrefabPool.Request(); DamageContent content = damageContent.GetComponent<DamageContent>(); damageContent.transform.SetParent(damageNode, false); @@ -141,9 +138,8 @@ if (battleField != null) { battleField.OnBattlePause -= OnBattlePause; - ClearContent(battleField.guid); } - + ClearContent(string.Empty, true); battleField = _battleField; battleField.OnBattlePause += OnBattlePause; } diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs index 9e688d8..2d8d217 100644 --- a/Main/System/Battle/BattleManager.cs +++ b/Main/System/Battle/BattleManager.cs @@ -261,7 +261,7 @@ { str += " " + list[i].GetType().Name + "\n"; } - BattleDebug.LogError(str); + // BattleDebug.LogError(str); return list; } diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs index 03d2cda..3a5e7ee 100644 --- a/Main/System/Battle/BattleUtility.cs +++ b/Main/System/Battle/BattleUtility.cs @@ -102,12 +102,54 @@ var numChar = (char)GetDamageNumKey(config, basePowerStr[i]); if (numChar > 0) { - result += numChar; + result += numChar; } } return result; } + public static string DisplayDamageNum(BattleDmg damage) + { + var config = DamageNumConfig.Get(damage.attackType); + + string result = string.Empty; + + // 濡傛灉鏄棯閬� 鍒欏彧鏄剧ず闂伩涓や釜瀛� + if (damage.IsType(DamageType.Dodge)) + { + result += (char)config.prefix; + } + else + { + result = ConvertToArtFont(config, damage.damage); + } + + return result; + } + + static string ConvertToArtFont(DamageNumConfig config, float _num) + { + var stringBuild = new System.Text.StringBuilder(); + + if (0 != config.plus) + stringBuild.Append((char)config.plus); + if (0 != config.prefix) + stringBuild.Append((char)config.prefix); + + var chars = UIHelper.ReplaceLargeArtNum(_num); + for (var i = 0; i < chars.Length; i++) + { + int numChar = GetDamageNumKey(config, (int)chars[i]); + + if (numChar > 0) + { + stringBuild.Append((char)numChar); + } + } + + return stringBuild.ToString(); + } + public static int GetMainTargetPositionNum(BattleObject caster, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> targetList, SkillConfig skillConfig) { int returnIndex = 0; diff --git a/Main/System/Battle/Define/BattleDmgInfo.cs b/Main/System/Battle/Define/BattleDmgInfo.cs index a299f39..c68f1c1 100644 --- a/Main/System/Battle/Define/BattleDmgInfo.cs +++ b/Main/System/Battle/Define/BattleDmgInfo.cs @@ -4,8 +4,14 @@ { public long damage; public int attackType; + + public bool IsType(DamageType damageType) + { + return (attackType & (int)damageType) == (int)damageType; + } } + public class BattleDmgInfo { diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs index 8bcad86..efaefc5 100644 --- a/Main/System/Battle/Motion/MotionBase.cs +++ b/Main/System/Battle/Motion/MotionBase.cs @@ -224,6 +224,13 @@ updateLocalHandler = () => { + if (skillBase.IsFinished()) + { + isPlaySkillAnimation = false; + RemoveRunAction(updateLocalHandler); + return; + } + float frame = (skillTrackEntry.TrackTime * skillTrackEntry.TimeScale * (float)BattleConst.skillMotionFps); if (currentTrackEntry != skillTrackEntry) diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs index 8d1ca4b..2d26c5f 100644 --- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs +++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs @@ -17,6 +17,8 @@ private float speedRatio = 1.5f; + private bool isForceFinish = false; + public void Init(BattleField _battleField) { Release(); @@ -33,6 +35,11 @@ public void PlayRecord(RecordAction recordAction) { BattleDebug.LogError("Enqueue record action " + recordAction.GetType()); + if (isForceFinish) + { + recordAction.ForceFinish(); + return; + } recordActionQueue.Enqueue(recordAction); } @@ -46,6 +53,12 @@ public void InsertRecord(RecordAction recordAction) { + if (isForceFinish) + { + recordAction.ForceFinish(); + return; + } + BattleDebug.LogError("Insert record action " + recordAction.GetType()); if (currentRecordAction != null) { @@ -65,6 +78,11 @@ public void ImmediatelyPlay(RecordAction recordAction) { + if (isForceFinish) + { + recordAction.ForceFinish(); + return; + } immediatelyActionList.Add(recordAction); } @@ -159,28 +177,28 @@ } + public void HaveRest() { - while (IsPlaying()) - { - ForceFinish(); - } + ForceFinish(); } public void ForceFinish() { - for (int i = 0; i < immediatelyActionList.Count; i++) + isForceFinish = true; + for (int i = immediatelyActionList.Count - 1; i >= 0; i--) { - immediatelyActionList[i].ForceFinish(); + var action = immediatelyActionList[i]; + action.ForceFinish(); + immediatelyActionList.Remove(action); } - immediatelyActionList.Clear(); - - if (currentRecordAction != null) + while (currentRecordAction != null) { - currentRecordAction.ForceFinish(); + var temp = currentRecordAction; + currentRecordAction = null; + temp.ForceFinish(); } - currentRecordAction = null; while (recordActionQueue.Count > 0) { @@ -197,6 +215,7 @@ currentRecordAction = null; recordActionQueue.Clear(); immediatelyActionList.Clear(); + isForceFinish = false; } public void SetSpeedRatio(float ratio) diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs index 1d1ae26..829b7e8 100644 --- a/Main/System/Battle/Skill/SkillBase.cs +++ b/Main/System/Battle/Skill/SkillBase.cs @@ -686,6 +686,7 @@ otherSkillAction.ForceFinish(); otherSkillAction = null; } + HandleDead(); isFinished = true; moveFinished = true; isPlay = true; diff --git a/Main/System/Battle/UIComp/DamageLine.cs b/Main/System/Battle/UIComp/DamageLine.cs index 5d231df..3f37cd5 100644 --- a/Main/System/Battle/UIComp/DamageLine.cs +++ b/Main/System/Battle/UIComp/DamageLine.cs @@ -24,6 +24,6 @@ public void SetDamage(BattleDmg damage) { damageTypeLabel.SetActive(false); - damageValueLabel.text = BattleUtility.DisplayDamageNum(damage.damage, damage.attackType); + damageValueLabel.text = BattleUtility.DisplayDamageNum(damage); } } -- Gitblit v1.8.0