From bae41593e19d32046f77ed1f036089e015380b99 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 30 七月 2025 22:25:18 +0800
Subject: [PATCH] 117 【武将】武将系统 - 布阵临时版

---
 Main/System/Battle/Skill/SkillBase.cs |  197 +++++++++++++++++++++++++++----------------------
 1 files changed, 109 insertions(+), 88 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 71f78b2..64964ac 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -25,35 +25,41 @@
 
 	protected int curFrame = 0;
 
-	protected List<int> triggerFrames = new List<int>();
+	protected List<GameNetPackBasic> packList;
 
-	public SkillBase(BattleObject _caster, SkillConfig _skillCfg, H0604_tagUseSkillAttack vNetData, BattleField _battleField = null)
+	protected SkillBase otherSkill;
+
+	public SkillBase(BattleObject _caster, SkillConfig _skillCfg, H0604_tagUseSkillAttack vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null)
 	{
 		caster = _caster;
 		skillConfig = _skillCfg;
 		tagUseSkillAttack = vNetData;
 		battleField = _battleField;
+		packList = _packList;
 
-		triggerFrames.Clear();
-		triggerFrames.AddRange(skillConfig.TriggerFrames);
-	}
+	}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
 
 	public virtual void Run()
 	{
 		if (startCounting)
 		{
 			curFrame++;
-
-			if (triggerFrames.Contains(curFrame))
-			{
-				OnTriggerEvent(triggerFrames.IndexOf(curFrame), curFrame);
-			}
 		}
 	}
 
-	protected virtual void OnTriggerEvent(int triggerIndex, int triggerFrame)
+	protected virtual void OnActiveSkillFrame()
 	{
 
+	}
+
+	protected virtual void OnStartSkillFrame()
+	{
+
+	}
+
+	protected virtual void OnEndSkillFrame()
+	{
+		
 	}
 
 	public void Pause()
@@ -74,17 +80,33 @@
 		//	楂樹寒鎵�鏈夋湰娆℃妧鑳界浉鍏崇殑鐩爣
 		HighLightAllTargets();
 
+		//	璺濈閰嶆垚璐熸暟瑕佽浆韬� TurnBack
+
 		switch (skillConfig.castMode)
 		{
-			case SkillCastMode.StandCast:
+			case SkillCastMode.Self:
 				PlayCastAnimation(() => DoSkillLogic(OnSkillFinished));
 				break;
-			case SkillCastMode.MoveToTarget:
-				MoveToTarget(_onComplete: () => TurnBack(() => PlayCastAnimation(() => DoSkillLogic(() => { BackToOrigin(OnSkillFinished); }))));
+			case SkillCastMode.Enemy:
+				MoveToTarget(caster.GetEnemyCamp(), skillConfig.CastIndexNum, _onComplete: () => TurnBack(() => PlayCastAnimation(() => DoSkillLogic(() => { BackToOrigin(OnSkillFinished); }))));
 				break;
-			case SkillCastMode.DashCast:
-				DashToTarget(() => BackToOrigin(OnSkillFinished));
+			case SkillCastMode.Target:
+				// 鐩爣鏄晫鏂逛富鐩爣
+				BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.AttackID);
+				if (mainTarget == null)
+				{
+					Debug.LogError("鐩爣涓虹┖ mainTarget == null AttackID : " + tagUseSkillAttack.AttackID);
+					OnSkillFinished();
+					return;
+				}
+				MoveToTarget(mainTarget.Camp, mainTarget.teamHero.positionNum, _onComplete: () => TurnBack(() => PlayCastAnimation(() => DoSkillLogic(() => { BackToOrigin(OnSkillFinished); }))));
 				break;
+			case SkillCastMode.Allies:
+				MoveToTarget(caster.Camp, skillConfig.CastIndexNum, _onComplete: () => TurnBack(() => PlayCastAnimation(() => DoSkillLogic(() => { BackToOrigin(OnSkillFinished); }))));
+				break;
+			// case SkillCastMode.DashCast:
+			// 	DashToTarget(() => BackToOrigin(OnSkillFinished));
+			// 	break;
 			default:
 				Debug.LogError("鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹傝鑱旂郴绛栧垝");
 				break;
@@ -92,73 +114,40 @@
 	}
 
 	//	鍐插埡鐨勬妧鑳� 鍔ㄤ綔 璺熺Щ鍔� 鏄悓鏃惰繘琛岀殑 绉诲姩鍒扮洰鏍囩殑涓�鐬棿灏辫杩涜鎶�鑳介�昏緫
-	protected void DashToTarget(Action _onComplete)
-	{
-		TrackEntry entry = PlayCastAnimation();
-		//	鍋氫竴涓井寰殑鎻愬墠
-		MoveToTarget(entry.TrackTime - 0.05f, () => DoSkillLogic(_onComplete));
-	}
+	// protected void DashToTarget(Action _onComplete)
+	// {
+	// 	TrackEntry entry = PlayCastAnimation();
+	// 	BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.AttackID);
+	// 	if (mainTarget == null)
+	// 	{
+	// 		Debug.LogError("鐩爣涓虹┖ mainTarget == null AttackID : " + tagUseSkillAttack.AttackID);
+	// 		_onComplete?.Invoke();
+	// 		return;
+	// 	}
 
-	protected void GetTargetNode()
-	{
-		targetNode = null;
+	// 	//	鍋氫竴涓井寰殑鎻愬墠
+	// 	MoveToTarget(mainTarget.Camp, mainTarget.teamHero.positionNum, entry.AnimationEnd - 0.05f, () => DoSkillLogic(_onComplete));
+	// }
 
-		if (skillConfig.castMode == SkillCastMode.StandCast)
-		{
-			//	鍘熷湴鏂芥硶
-			targetNode = caster.heroGo.transform as RectTransform;
-		}
-		else if (skillConfig.castMode == SkillCastMode.MoveToTarget || skillConfig.castMode == SkillCastMode.DashCast)
-		{
-			if (tagUseSkillAttack.AttackID <= 0)
-			{
-				Debug.LogError("鎶�鑳芥病鏈夋寚瀹氱洰鏍�");
-				return;
-			}
-
-			//	绉诲姩鍒扮洰鏍囦綅缃柦娉�
-			BattleObject _mainTarget = battleField.battleObjMgr.GetBattleObject((int)tagUseSkillAttack.AttackID);
-			if (_mainTarget == null)
-			{
-				Debug.LogError("鎶�鑳芥寚瀹氱殑鐩爣涓嶅瓨鍦�");
-				return;
-			}
-
-			targetNode = _mainTarget.heroGo.transform as RectTransform;
-		}
-		else if (skillConfig.castMode == SkillCastMode.MoveToFormation)
-		{
-			//	TODO YYL
-			targetNode = /*caster.GetEnemyTeamNode();*/ battleField.GetTeamNode(caster.Camp == BattleCamp.Blue ? BattleCamp.Red : BattleCamp.Blue);
-		}
-		else
-		{
-			Debug.LogError("鏈煡鐨勬柦娉曟柟寮� 鎶�鑳絠d锛�" + skillConfig.SkillID);
-			return;
-		}
-	}
-
-	protected List<BattleObject> GetTargetList()
-	{
-		return battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack);
-	}
-
+	//	杩欓噷鍏跺疄鏄妧鑳藉悗鎽囩粨鏉熺殑鍦版柟
 	protected virtual void DoSkillLogic(Action _onComplete = null)
 	{
-		//	瀛愮被瀹炵幇鍏蜂綋鐨勬妧鑳介�昏緫
+		
 	}
 
 	protected TrackEntry PlayCastAnimation(Action onComplete = null)
 	{
 		// 鎾斁鏂芥硶鍔ㄤ綔
-		MotionName motionName = skillConfig.GetMotionName();
-		TrackEntry trackEntry = caster.motionBase.PlayAnimation(motionName, false, onComplete);
-		return trackEntry;
+		return caster.motionBase.PlaySkillAnimation(skillConfig, onComplete,
+				OnStartSkillFrame,//鏀诲嚮鍓嶆憞缁撴潫
+				OnActiveSkillFrame);//鏀诲嚮涓憞缁撴潫
 	}
 
-	public void MoveToTarget(float duration = 0.2f, Action _onComplete = null)
+	public void MoveToTarget(BattleCamp camp, int index, float duration = 0.2f, Action _onComplete = null)
 	{
-		GetTargetNode();
+		// GetTargetNode();
+		targetNode = battleField.GetTeamNode(camp, index);
+
 		Vector2 offset = new Vector2(skillConfig.CastDistance, 0);
 		RectTransform selfRect = caster.heroGo.transform as RectTransform;
 		RectTransform targetRect = targetNode;
@@ -171,6 +160,7 @@
 	{
 		if (skillConfig.CastDistance < 0)
 		{
+			//	杞韩
 			caster.heroGo.transform.localScale = new Vector3(-1, 1, 1);
 		}
 		_onComplete?.Invoke();
@@ -184,6 +174,7 @@
 			.SetEase(Ease.Linear)
 			.OnComplete(() =>
 			{
+				//	杞垚姝g‘鏂瑰悜
 				caster.heroGo.transform.localScale = Vector3.one;
 				_onComplete?.Invoke();
 			});
@@ -203,6 +194,53 @@
 		//	YYL TODO
 	}
 
+	//	鍛戒腑鐩爣鍚庣殑鍥炶皟 姝e父鏄互鍚勬妧鑳界殑鏂瑰紡鏉ュ鐞嗙殑
+	protected virtual void OnHitTargets(int _hitIndex, List<H0604_tagUseSkillAttack.tagSkillHurtObj> hitList)
+	{
+		for (int i = 0; i < hitList.Count; i++)
+		{
+			H0604_tagUseSkillAttack.tagSkillHurtObj hurt = hitList[i];
+
+			BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+			if (target == null)
+			{
+				Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+				continue;
+			}
+
+			// 浼ゅ缁撶畻
+			int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
+
+			List<long> damageList = new List<long>();
+
+			long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
+
+			for (int j = 0; j < damageDivide.Length; j++)
+			{
+				long damage = totalDamage * damageDivide[j] / 10000;
+				damageList.Add(damage);
+			}
+
+			OnHitEachTarget(target, damageList, ref hurt);
+		}
+	}
+
+	protected virtual void OnHitEachTarget(BattleObject target, List<long> damageList, ref H0604_tagUseSkillAttack.tagSkillHurtObj hurt)
+	{
+		target.Hurt(damageList, hurt.AttackType);
+
+				//	鍑讳腑鐩爣鐨勬椂鍊�,涓嶇杩戞垬杩滅▼ 閮界‘璁や竴涓嬫槸鍚︽湁鐖嗙偢鐗规晥 鐒跺悗鎾斁
+		if (skillConfig.ExplosionEffectId > 0)
+		{
+			// 鎾斁鐖嗙偢鐗规晥
+			target.battleField.battleEffectMgr.PlayEffect(
+				target.ObjID,
+				skillConfig.ExplosionEffectId,
+				target.heroGo.transform
+			);
+		}
+	}
+
 	public virtual bool IsFinished()
 	{
 		return isFinished;
@@ -217,21 +255,4 @@
 	{
 		isFinished = true;
 	}
-
-#if UNITY_EDITOR_STOP_USING
-	public virtual List<BattleObject> GetTargetList(BattleField _battleField)
-	{
-		SkillTargetType targetType = SkillTargetType.Enemy;
-		SkillTargetRangeType rangeType = SkillTargetRangeType.LowestHP;
-
-		List<BattleObject> affectList = _battleField.battleObjMgr.GetTargetList(caster, targetType, rangeType);
-		return affectList;
-	}
-
-	public virtual List<Dictionary<int, List<int>>> GetDamageList(BattleField _battleField)
-	{
-		Debug.LogError("SkillBase GetDamageList should be overridden by derived class");
-		return null;
-	}
-#endif
 }
\ No newline at end of file

--
Gitblit v1.8.0