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