From 431c17a1b8f1ec3112c84e03cbc872d201e8969c Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 15 九月 2025 15:31:09 +0800
Subject: [PATCH] 0312 资源临时放UI目录处理

---
 Main/System/Battle/Skill/SkillBase.cs |  219 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 144 insertions(+), 75 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 6282832..2ce14ec 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -4,7 +4,6 @@
 using DG.Tweening;
 using Spine;
 using System.Linq;
-using PlasticGui.WorkspaceWindow.BranchExplorer;
 
 
 public class SkillBase
@@ -39,6 +38,8 @@
 
 	protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
 
+	protected bool moveFinished = false;
+
 	public SkillBase(BattleObject _caster, SkillConfig _skillCfg, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null)
 	{
 		caster = _caster;
@@ -46,6 +47,8 @@
 		tagUseSkillAttack = vNetData;
 		battleField = _battleField;
 		packList = _packList;
+
+		
 
 	}
 
@@ -93,16 +96,16 @@
 	// 1路绉诲姩鍒拌窛绂婚樀瀹逛綅缃畁鐮佺殑璺濈锛堝2鍙蜂綅锛�5鍙蜂綅锛夐噴鏀撅紙鍗虫垬鍦轰腑澶绫伙級
 	public virtual void Cast()
 	{
-		BattleDebug.LogError(GetType().Name + " Skill Cast Start");
+		EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, battleField.guid, skillConfig, caster.teamHero);
+
 		//	楂樹寒鎵�鏈夋湰娆℃妧鑳界浉鍏崇殑鐩爣
 		HighLightAllTargets();
 
 		//	璺濈閰嶆垚璐熸暟瑕佽浆韬� TurnBack
-		BattleDebug.LogError(GetType().Name + " Skill CastMode : " + skillConfig.castMode);
 		switch (skillConfig.castMode)
 		{
 			case SkillCastMode.Self:
-				CastImpl();
+				CastImpl(OnAttackFinish);
 				break;
 			case SkillCastMode.Enemy:
 				CastToEnemy();
@@ -113,31 +116,55 @@
 			case SkillCastMode.Allies:
 				CastToAllies();
 				break;
-			// case SkillCastMode.DashCast:
-			// 	DashToTarget(() => BackToOrigin(OnSkillFinished));
-			// 	break;
+			case SkillCastMode.DashCast:
+				DashCast(OnAttackFinish);
+				break;
 			default:
-				BattleDebug.LogError("鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹傝鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
-				OnSkillFinished();
+				Debug.LogError("寮哄埗缁撴潫鎶�鑳� 鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹傝鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
+				ForceFinished();
 				break;
 		}
+
 	}
 
-	protected void MoveToTarget(RectTransform target, Vector2 offset, float duration, Action onComplete = null)
+	//	鍐叉挒鏀诲嚮
+	protected void DashCast(Action _onComplete)
 	{
-		BattleDebug.LogError("Move to target , target is " + target.name);
+		Debug.LogError("DashCast 杩樻病瀹炵幇");
+		ForceFinished();
+		//	YYL TODO
+
+		// var entry = caster.motionBase.PlayAnimation(skillConfig.GetMotionName(), false);
+		// float animationTime = entry.AnimationTime;
+
+		// int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
+
+		// BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
+
+		// RectTransform targetTrans = battleField.GetTeamNode(battleCamp, mainTargetPosNum);
+
+		// var tweener = BattleUtility.MoveToTarget(caster.heroRectTrans, targetTrans, new Vector2(skillConfig.CastDistance, 0), animationTime * 0.9f, () =>
+		// {
+		// 	caster.motionBase.PlayAnimation(MotionName.idle, true);
+		// 	_onComplete?.Invoke();
+		// });
+		// battleField.battleTweenMgr.OnPlayTween(tweener);
+	}
+
+	protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null)
+	{
 		//	鍘熷湴閲婃斁
 		if (skillConfig.CastDistance >= 9999)
 		{
-			onComplete?.Invoke();
+			_onComplete?.Invoke();
 			return;
 		}
 
 		caster.motionBase.PlayAnimation(MotionName.run, true);
-		var tweener = BattleUtility.MoveToTarget(caster.heroRectTrans, target, offset, duration, () =>
+		var tweener = BattleUtility.MoveToTarget(caster.heroRectTrans, target, offset, () =>
 		{
 			caster.motionBase.PlayAnimation(MotionName.idle, true);
-			onComplete?.Invoke();
+			_onComplete?.Invoke();
 		});
 		battleField.battleTweenMgr.OnPlayTween(tweener);
 	}
@@ -159,7 +186,7 @@
 
 		RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillConfig);
 
-		MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), moveTime, () =>
+		MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), () =>
 		{
 			//	鍒颁綅缃浆韬�(涓嶄竴瀹氶潪瑕佽浆韬� 浣嗘槸娴佺▼瑕佸啓)
 			TurnBack(() =>
@@ -171,12 +198,8 @@
 						() =>
 						{
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
-							{
-								TurnBack(null, 1f);
-								caster.motionBase.PlayAnimation(MotionName.idle, true);
-								OnAllAttackMoveFinished();
-							});
+							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, 
+								OnAttackFinish);
 						}
 					, -1f);
 				});
@@ -191,22 +214,18 @@
 		// 鐩爣鏄晫鏂逛富鐩爣
 		if (tagUseSkillAttack.HurtCount <= 0)
 		{
-			BattleDebug.LogError("鎶�鑳芥敾鍑诲寘娌℃湁鐩爣 HurtCount <= 0");
+			Debug.LogError("鎶�鑳芥敾鍑诲寘娌℃湁鐩爣 HurtCount <= 0");
 			OnSkillFinished();
 			return;
 		}
 
-		var mainHurt = tagUseSkillAttack.HurtList[0];
+		int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
 
-		BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)mainHurt.ObjID);
-		if (mainTarget == null)
-		{
-			BattleDebug.LogError("鐩爣涓虹┖ mainTarget == null ObjID : " + mainHurt.ObjID);
-			OnSkillFinished();
-			return;
-		}
+		BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
 
-		MoveToTarget(mainTarget.heroRectTrans, new Vector2(skillConfig.CastDistance, 0), moveTime, () =>
+		RectTransform targetTrans = battleField.GetTeamNode(battleCamp, mainTargetPosNum);
+
+		MoveToTarget(targetTrans, new Vector2(skillConfig.CastDistance, 0), () =>
 		{
 			//	鍒颁綅缃浆韬�(涓嶄竴瀹氶潪瑕佽浆韬� 浣嗘槸娴佺▼瑕佸啓)
 			TurnBack(() =>
@@ -217,13 +236,9 @@
 					TurnBack(
 						() =>
 						{
+							RectTransform rectTransform = battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum);
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
-							{
-								TurnBack(null, 1f);
-								caster.motionBase.PlayAnimation(MotionName.idle, true);
-								OnAllAttackMoveFinished();
-							});
+							MoveToTarget(rectTransform, Vector2.zero, OnAttackFinish);
 						}
 					, -1f);
 				});
@@ -233,14 +248,14 @@
 
 	protected virtual void OnAllAttackMoveFinished()
 	{
-		
+		moveFinished = true;
 	}
 
 	protected void CastToAllies()
 	{
 		RectTransform target = battleField.GetTeamNode(caster.Camp, skillConfig);
 
-		MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), moveTime, () =>
+		MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), () =>
 		{
 			//	鍒颁綅缃浆韬�(涓嶄竴瀹氶潪瑕佽浆韬� 浣嗘槸娴佺▼瑕佸啓)
 			TurnBack(() =>
@@ -252,17 +267,20 @@
 						() =>
 						{
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () =>
-							{
-								TurnBack(null, 1f);
-								caster.motionBase.PlayAnimation(MotionName.idle, true);
-								OnAllAttackMoveFinished();
-							});
+							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum),
+								Vector2.zero, OnAttackFinish);
 						}
 					, -1f);
 				});
 			}, -1f);
 		});
+	}
+
+	protected void OnAttackFinish()
+	{
+		TurnBack(null, 1f);
+		OnAllAttackMoveFinished();
+		caster.motionBase.PlayAnimation(MotionName.idle, true);
 	}
 
 
@@ -283,17 +301,20 @@
 	}
 
 	//	鎶�鑳藉紑濮�
-	public virtual void OnSkillStart()
+	public void OnSkillStart()
 	{
 		skillEffect = SkillEffectFactory.CreateSkillEffect(
 				caster,
 				skillConfig,
 				tagUseSkillAttack
 			);
-		if (skillEffect != null)
+		// if (skillEffect != null)
 		{
 			skillEffect.Play(OnHitTargets);
 		}
+
+		
+
 	}
 
 	//	鎶�鑳藉墠鎽囧抚缁撴潫
@@ -308,12 +329,18 @@
 	/// <param name="times"></param>
 	public virtual void OnMiddleFrameStart(int times)
 	{
-		skillEffect.OnMiddleFrameStart(times);
+		// if (skillEffect != null)
+		{
+			skillEffect.OnMiddleFrameStart(times);
+		}
 	}
 
 	public virtual void OnMiddleFrameEnd(int times, int hitIndex)
 	{
-		skillEffect.OnMiddleFrameEnd(times, hitIndex);
+		// if (skillEffect != null)
+		{
+			skillEffect.OnMiddleFrameEnd(times, hitIndex);
+		}
 	}
 
 	/// <summary>
@@ -321,7 +348,10 @@
 	/// </summary>
 	public virtual void OnFinalFrameStart()
 	{
-
+		// if (skillEffect != null)
+		{
+			skillEffect.OnFinalFrameStart();
+		}
 	}
 
 	/// <summary>
@@ -329,7 +359,12 @@
 	/// </summary>
 	public virtual void OnFinalFrameEnd()
 	{
+		// if (skillEffect != null)
+		{
+			skillEffect.OnFinalFrameEnd();
+		}
 
+		HandleDead();
 	}
 
 
@@ -341,7 +376,7 @@
 		HashSet<BattleObject> highlightList = new HashSet<BattleObject>(battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack));
 		highlightList.Add(caster);
 
-
+		// caster.battleField.skillMask
 		//	鎶婅繖浜汢O鍏ㄩ珮浜� 鎴栬�呰鎶婇櫎浜嗚繖浜涚殑閮芥斁鍦ㄩ伄缃╁悗闈�
 		//	YYL TODO
 	}
@@ -356,23 +391,44 @@
 			BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
 			if (target == null)
 			{
-				BattleDebug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+				Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
 				continue;
 			}
 
-			// 浼ゅ鍒嗗竷 (涓囧垎姣�)
-			int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
-
-			long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
-
-			// 淇濊瘉鎵�鏈夊垎閰嶉」鍔犺捣鏉ョ瓑浜巘otalDamage锛岄伩鍏嶅洜鏁撮櫎瀵艰嚧鐨勮宸�
-			List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage);
-
-			OnHitEachTarget(target, totalDamage, damageList, ref hurt);
+			OnHitEachTarget(_hitIndex, target, hurt);
 		}
-
-		HandleDead();
+		
 	}
+
+
+	protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
+	{
+		// 浼ゅ鍒嗗竷 (涓囧垎姣�)
+		// Debug.LogError("skillConfig.DamageDivide.Count " + skillConfig.DamageDivide.Length + " _hitIndex " + _hitIndex);
+		int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
+
+		long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
+
+		// 淇濊瘉鎵�鏈夊垎閰嶉」鍔犺捣鏉ョ瓑浜巘otalDamage锛岄伩鍏嶅洜鏁撮櫎瀵艰嚧鐨勮宸�
+		List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage);
+		// public uint ObjID;
+		// public uint AttackTypes;        // 椋樿绫诲瀷姹囨�伙紝鏀寔澶氱绫诲瀷骞跺瓨锛屽鏃犺闃插尽涓旀毚鍑诲悓鏃惰鏍兼尅锛屼簩杩涘埗鎴栬繍绠楁渶缁堝�硷紱0-澶辫触锛�1-鏅�氾紱2-鍥炶锛�5-鏍兼尅锛�6-鏃犺闃插尽锛�7-鏆村嚮锛�9-闂伩
+		// public uint HurtHP;        // 椋樿鍊硷紝姹備綑浜块儴鍒�
+		// public uint HurtHPEx;        // 椋樿鍊硷紝鏁撮櫎浜块儴鍒�
+		// public uint CurHP;        // 鏇存柊鍓╀綑琛�閲忥紝姹備綑浜块儴鍒�
+		// public uint CurHPEx;        // 鏇存柊鍓╀綑琛�閲忥紝鏁撮櫎浜块儴鍒�
+		// public uint SuckHP;        // 鏈浼ゅ杞寲鐨勫惛琛�閲�
+		// public uint BounceHP;        // 鏈浼ゅ鍙嶅脊鐨勪激瀹抽噺
+
+
+		//	TODO YYL AttackTypes  瑕佽〃鐜版垚浠�涔堟牱鍛紵 鏀寔澶氱绫诲瀷骞跺瓨锛屽鏃犺闃插尽涓旀毚鍑诲悓鏃惰鏍兼尅锛屼簩杩涘埗鎴栬繍绠楁渶缁堝�硷紱0-澶辫触锛�1-鏅�氾紱2-鍥炶锛�5-鏍兼尅锛�6-鏃犺闃插尽锛�7-鏆村嚮锛�9-闂伩
+		target.Hurt(damageList, totalDamage, hurt, skillConfig);
+
+		//	TODO YYL 杩欓噷鏄鍋氱粺涓�璁$畻鍚庡啀hurt璺焥uckhp杩樻槸鎬庢牱
+		caster.SuckHp(hurt.SuckHP, skillConfig);//	鍚歌
+		caster.HurtByReflect(hurt.BounceHP, skillConfig);// 鍙嶅脊浼ゅ
+	}
+
 
 	protected void HandleDead()
 	{
@@ -390,7 +446,6 @@
 		// 澶勭悊鎺夎惤鍖� 鎻愬墠distribute涔嬪悗 PackManager鎵嶆湁鎺夎惤鐗� 鎵�浠ヤ笉璺焌ssignexp涓�鏍穌istribute
 		foreach (var _dropPack in dropPackList)
 		{
-			BattleDebug.LogError("distribute pack " + _dropPack.GetType().Name);
 			PackageRegedit.Distribute(_dropPack);
 			packList.Remove(_dropPack);
 		}
@@ -433,8 +488,6 @@
 			packList.Remove(deadPack);
 		}
 		deadPackList.Clear();
-
-
 	}
 
 
@@ -482,12 +535,6 @@
 	}
 
 
-
-	protected virtual void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
-	{
-		target.Hurt(damageList, totalDamage, hurt.AttackTypes);
-
-	}
 
 	protected void CheckAfterDeadhPack()
 	{
@@ -558,12 +605,35 @@
 			}
 		}
 
-		return isFinished;
+		return isFinished && moveFinished;
 	}
 
 	public virtual void ForceFinished()
 	{
+		skillEffect?.ForceFinished();
 		isFinished = true;
+		moveFinished = true;
+
+		while (packList.Count > 0)
+		{
+			var pack = packList[0];
+			packList.RemoveAt(0);
+
+			if (pack is CustomHB426CombinePack)
+			{
+				var combinePack = pack as CustomHB426CombinePack;
+				if (combinePack.startTag.Tag.StartsWith("Skill_"))
+				{
+					BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
+					otherSkillAction = combinePack.CreateSkillAction();
+
+					//	寮哄埗缁撴潫鍏朵粬鎶�鑳�
+					otherSkillAction.ForceFinish();
+					return;
+				}
+			}
+			PackageRegedit.Distribute(pack);
+		}
 	}
 
 	public void OnSkillFinished()
@@ -576,7 +646,6 @@
 			}
 		}
 
-		BattleDebug.LogError(GetType().Name + " Skill Finished");
 		while (packList.Count > 0)
 		{
 			var pack = packList[0];
@@ -587,11 +656,11 @@
 				var combinePack = pack as CustomHB426CombinePack;
 				if (combinePack.startTag.Tag.StartsWith("Skill_"))
 				{
+					BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
 					otherSkillAction = combinePack.CreateSkillAction();
 					return;
 				}
 			}
-			BattleDebug.LogError("distribute pack " + pack.GetType().Name);
 			PackageRegedit.Distribute(pack);
 		}
 

--
Gitblit v1.8.0