From cee6719bfd5339dd2f9b068c232df70163325324 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期三, 01 四月 2026 10:44:46 +0800
Subject: [PATCH] 492 武将登场和返场修复,开启下一期活动,未清空旧的获奖记录bug
---
Main/System/Battle/SkillEffect/BulletSkillEffect.cs | 541 +++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 436 insertions(+), 105 deletions(-)
diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index 588a317..1022169 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -12,164 +12,486 @@
// protected List<BattleObject> targets; // 鐩爣鍒楄〃
protected List<BulletCurve> bulletCurves = new List<BulletCurve>();
+
+ // 鏁e皠鎶�鑳藉嚮涓鏁板櫒锛岀敤浜庡垽鏂槸鍚︽墍鏈夌洰鏍囬兘宸插嚮涓�
+ private int scatterHitCount = 0;
+ private int scatterTotalTargets = 0;
- public BulletSkillEffect(SkillConfig _skillConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
- : base(_skillConfig, _caster, _tagUseSkillAttack)
+
+ public BulletSkillEffect(SkillBase _skillBase, SkillConfig _skillConfig, SkillSkinConfig _skillSkinConfig, BattleObject _caster, HB427_tagSCUseSkill _tagUseSkillAttack)
+ : base(_skillBase, _skillConfig, _skillSkinConfig, _caster, _tagUseSkillAttack)
{
}
+
- public override void OnMiddleFrameStart(int times)
+
+ public override void OnMiddleFrameEnd(int times, int index)
{
+ base.OnMiddleFrameEnd(times, index);
// 寮瑰皠 鍙﹀鐨勫仛娉曚簡
- if (skillConfig.effectType == SkillEffectType.Bullet && skillConfig.BulletPath == 4)
+ if (skillSkinConfig.effectType == SkillEffectType.Bullet && skillSkinConfig.BulletPath == 4)
{
var hurt = tagUseSkillAttack.HurtList[0];
BattleObject targetObject = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
if (targetObject == null)
{
- BattleDebug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
return;
}
- ShotToTarget(targetObject);
+ ShotToTarget(targetObject, index);
}
// 鏅�氱殑鍋氭硶 鍖哄垎鎵撳悜闃佃惀鎴栬�呮墦鍚戜釜浣�
else
{
- Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHitFormation = (_hitIndex, _hurtList) =>
+ // 鍖哄垎鏁e皠璺熻寖鍥存敾鍑�
+ if (skillConfig.Scattering == 1)
{
- onHit?.Invoke(_hitIndex, tagUseSkillAttack.HurtList.ToList());
- };
- switch (skillConfig.castMode)
+ // 鏁e皠
+ ScatterShot(index);
+ }
+ else
{
- case SkillCastMode.Self:
- onHitFormation?.Invoke(0, tagUseSkillAttack.HurtList.ToList());
- BattleDebug.LogError("瀛愬脊鐨勭洰鏍囨槸鑷繁锛屾殏鏃朵笉鏀寔 鍗忓晢绋嬪簭瀹屾垚");
- break;
- case SkillCastMode.Enemy:
- var targetNode = caster.battleField.GetTeamNode(caster.GetEnemyCamp(), skillConfig);
- ShotToFormation(targetNode, onHitFormation);
- break;
- case SkillCastMode.Target:
- for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
- {
- var hurt = tagUseSkillAttack.HurtList[i];
- BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
- if (target == null)
- {
- BattleDebug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
- continue;
- }
-
- ShotToTarget(target);
- }
- break;
- case SkillCastMode.Allies:
- var healNode = caster.battleField.GetTeamNode(caster.Camp, skillConfig);
- ShotToFormation(healNode, onHitFormation);
- break;
- default:
- BattleDebug.LogError("鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹傝鑱旂郴绋嬪簭 " + skillConfig.SkillID);
- break;
+ switch (skillConfig.TagAim)
+ {
+ case 0:
+ AllAreaShoting(index);
+ break;
+ case 1:
+ OneTargetShoting(index);
+ break;
+ case 2:
+ FrontRowShoting(index);
+ break;
+ case 3:
+ BackRowShoting(index);
+ break;
+ case 4:
+ VerticalRowShoting(index);
+ break;
+ case 5:
+ SelfShoting(index);
+ break;
+ default:
+ Debug.LogError("瀛愬脊鐗规晥娌℃湁閰嶇疆姝g‘鐨凾agAim锛屽己鍒剁粨鏉熷瓙寮圭壒鏁� TagAim: " + skillConfig.TagAim);
+ ForceFinished();
+ break;
+ }
}
}
}
-
- public override void Play(Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> _onHit)
+ // 0 鍏ㄩ儴鑼冨洿锛�
+ private void AllAreaShoting(int index)
{
- base.Play(_onHit);
+ if (skillConfig.TagCount == 0 || skillConfig.TagCount >= 6)
+ {
+ // 鑻agCount鐩爣涓暟涓�0鎴�6锛屾牴鎹甌agFriendly鏁屾垜閰嶇疆锛屼唬琛ㄤ綔鐢ㄤ簬鏁屾柟鍏ㄤ綋鎴栨垜鏂瑰叏浣擄紝姝ゆ椂涓荤洰鏍囦负鏁屾垜绔欎綅涓殑2鍙蜂綅缃�
+ BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
+ ShotToIndex(battleCamp, 1, index);
+ }
+ else
+ {
+ // 鑻agCount鐩爣涓暟涓�1~5涓紝浠h〃闅忔満浣滅敤浜庢晫鏂规垨鎴戞柟x涓灏嗭紝姝ゆ椂鎵�鏈夎闅忔満鍒扮殑瀵硅薄閮戒负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級
+ ShotEachTargets(index);
+ }
+ }
+
+ // 1 瀵逛綅锛�
+ private void OneTargetShoting(int index)
+ {
+ // 榛樿鍙��1涓紝瀵逛綅瑙勫垯涓篈1浼樺厛鎵揃1锛孉2浼樺厛鎵揃2锛孉3浼樺厛鎵揃3锛屽浣嶇洰鏍囨浜℃椂锛屼紭鍏堝墠鎺掞紝
+ // 姣斿B2宸茬粡姝讳骸锛岄偅涔圓2灏嗕紭鍏堟墦B1锛屽墠鎺�1銆�2銆�3鍙蜂綅缃叏閮ㄦ浜′箣鍚庢墠寮�濮嬮�夋嫨鍚庢帓4銆�5銆�6鍙蜂綅缃紝
+ // 瀵逛綅鍙彲閫�1涓洰鏍囷紝鍗充富鐩爣
+
+ if (tagUseSkillAttack.HurtList.Length > 1)
+ {
+ Debug.LogError("鏈嶅姟鍣� 瀵逛綅鏀诲嚮鐩爣鏁伴噺閿欒锛屽簲璇ュ彧鏈変竴涓洰鏍� 鎶�鑳絠d" + skillConfig.SkillID);
+ }
+
+ var hurt = tagUseSkillAttack.HurtList[0];
+ BattleObject targetObject = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (targetObject == null)
+ {
+ Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ return;
+ }
+ ShotToTarget(targetObject, index);
+ }
+
+ // 2 鍓嶆帓锛�
+ private void FrontRowShoting(int index)
+ {
+ // 1銆�2銆�3鍙蜂綅涓哄墠鎺掞紝榛樿2鍙蜂綅缃负涓荤洰鏍囷紝褰�1銆�2銆�3鍙蜂綅缃鑹插叏閮ㄦ浜★紝鍓嶆帓灏嗘浛鎹㈡垚鍚庢帓锛�5鍙蜂綅缃彉鏇翠负涓荤洰鏍囷紝
+ // 鑻ラ厤缃甌agAffect缁嗗垎鐩爣锛屼笖浜烘暟灏忎簬3锛屽垯鎵�鏈夎閫夋嫨鐩爣鍧囦负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級
+ // 锛堝嵆鍓嶆帓榛樿2鍙蜂綅鎴�5鍙蜂綅瑙勫垯鏃犳晥锛屽疄闄呬綔鐢ㄥ灏戜汉灏辨槸澶氬皯涓富鐩爣锛�
+
+ BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
+
+ if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3)
+ {
+ ShotEachTargets(index);
+ }
+ else
+ {
+ int targetIndex = int.MaxValue;
+ int minimumIndex = int.MaxValue;
+
+ foreach (var hurt in tagUseSkillAttack.HurtList)
+ {
+ BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (target == null)
+ {
+ Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+
+ minimumIndex = Mathf.Min(target.GetPositionNum(), minimumIndex);
+
+ if (target.Camp == battleCamp && target.GetPositionNum() < 3)
+ {
+ targetIndex = 1;
+ break;
+ }
+ }
+
+ if (targetIndex == int.MaxValue)
+ {
+ targetIndex = (minimumIndex >= 3) ? 4 : 1;
+ }
+ else
+ {
+ targetIndex = 1;
+ }
+
+ ShotToIndex(battleCamp, targetIndex, index);
+ }
}
- protected void ShotToFormation(RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> _onHit)
+ private void ShotToIndex(BattleCamp camp, int targetIndex, int bulletIndex)
{
- BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.effectNode);
+ RectTransform targetTransform = caster.battleField.GetTeamNode(camp, targetIndex);
+ BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillSkinConfig.BulletEffectId, caster.GetRectTransform(), caster.Camp, caster.GetModelScale());
RectTransform effectTrans = effectPlayer.transform as RectTransform;
- var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, (index, hitList) =>
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, skillSkinConfig, effectPlayer, targetTransform, tagUseSkillAttack.HurtList.ToList(), bulletIndex, (index, hitList) =>
{
- // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
- _onHit?.Invoke(index, hitList);
-
+ if (isFinish)
+ return;
// 鍑讳腑灏遍攢姣佸瓙寮�
- caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
+ caster.battleField.battleEffectMgr.RemoveEffect(skillSkinConfig.BulletEffectId, effectPlayer);
// 鎾斁瀛愬脊鐖嗙偢鐗规晥
+
+ BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
+ // 棣栧厛鏄洰鏍囪韩涓婄垎鐐�
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffectId, targetTransform, caster.Camp, 1f);
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect2, targetTransform, caster.Camp, 1f);
foreach (var hurt in hitList)
{
BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
if (targetObj == null)
{
- BattleDebug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
continue;
}
- var effect1 = caster.battleField.battleEffectMgr.PlayEffect(targetObj.ObjID, skillConfig.ExplosionEffectId, targetObj.heroGo.transform);
- var effect2 = caster.battleField.battleEffectMgr.PlayEffect(targetObj.ObjID, skillConfig.ExplosionEffect2, targetObj.heroGo.transform);
- if (effect1 != null)
- {
- effect1.transform.localRotation = effectTrans.localRotation;
- }
- if (effect2 != null)
- {
- effect2.transform.localRotation = effectTrans.localRotation;
- }
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect3, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect4, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
}
- });
-
- bulletCurves.Add(bulletCurve);
-
- }
-
- protected void ShotToTarget(BattleObject target)
- {
- BattleDebug.LogError("鍙戝皠瀛愬脊 " + skillConfig.BulletEffectId);
- BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans);
-
-
- var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, (index, hitList) =>
- {
// 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
onHit?.Invoke(index, hitList);
-
- BattleDebug.LogError("鍥炴敹瀛愬脊 " + skillConfig.BulletEffectId);
- // 鎾斁瀛愬脊鐖嗙偢鐗规晥
-
-
- foreach (var hurt in hitList)
- {
- BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
- if (targetObj == null)
- {
- BattleDebug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
- continue;
- }
-
- if (skillConfig.ExplosionEffectId > 0)
- {
- var eft = caster.battleField.battleEffectMgr.PlayEffect(targetObj.ObjID, skillConfig.ExplosionEffectId, targetObj.heroGo.transform);
- eft.transform.localRotation = effectPlayer.transform.localRotation;
- }
-
- if (skillConfig.ExplosionEffect2 > 0)
- {
- var eft = caster.battleField.battleEffectMgr.PlayEffect(targetObj.ObjID, skillConfig.ExplosionEffect2, targetObj.heroGo.transform);
- eft.transform.localRotation = effectPlayer.transform.localRotation;
- }
- }
-
- // 鍑讳腑灏遍攢姣佸瓙寮�
- caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
isFinish = true;
});
bulletCurves.Add(bulletCurve);
}
+ // 3 鍚庢帓锛�
+ private void BackRowShoting(int index)
+ {
+ // 4銆�5銆�6鍙蜂綅涓哄悗鎺掞紝榛樿5鍙蜂綅缃负涓荤洰鏍囷紝褰�4銆�5銆�6鍙蜂綅缃鑹插叏閮ㄦ浜★紝鍚庢帓鎺掑皢鏇挎崲鎴愬墠鎺掞紝2鍙蜂綅缃彉鏇翠负涓荤洰鏍囷紝
+ // 鑻ラ厤缃甌agAffect缁嗗垎鐩爣锛屼笖浜烘暟灏忎簬3锛屽垯鎵�鏈夎閫夋嫨鐩爣鍧囦负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級
+ // 锛堝嵆鍓嶆帓榛樿2鍙蜂綅鎴�5鍙蜂綅瑙勫垯鏃犳晥锛屽疄闄呬綔鐢ㄥ灏戜汉灏辨槸澶氬皯涓富鐩爣锛�
+
+ BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
+
+ if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3)
+ {
+ ShotEachTargets(index);
+ }
+ else
+ {
+ int targetIndex = int.MaxValue;
+ int maxinumIndex = int.MinValue;
+
+ foreach (var hurt in tagUseSkillAttack.HurtList)
+ {
+ BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (target == null)
+ {
+ Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+
+ if (target.Camp == battleCamp && target.GetPositionNum() > 3)
+ {
+ targetIndex = 4;
+ break;
+ }
+
+ maxinumIndex = Mathf.Max(target.GetPositionNum(), maxinumIndex);
+ }
+
+ if (targetIndex == int.MaxValue)
+ {
+ targetIndex = (maxinumIndex < 3) ? 1 : 4;
+ }
+ else
+ {
+ targetIndex = 4;
+ }
+
+ ShotToIndex(battleCamp, targetIndex, index);
+ }
+ }
+
+ // 4 绾垫帓锛�
+ private void VerticalRowShoting(int index)
+ {
+ // 绾垫帓鍒嗗埆涓�1銆�4锛�2銆�5锛�3銆�6锛屼笁缁勭旱鎺掞紝鎸夊浣嶈鍒欓�夋嫨锛岄粯璁�1鍙枫��2鍙锋垨3鍙蜂负涓荤洰鏍囷紝鍓嶆帓1銆�2銆�3鍙蜂綅缃叏閮ㄦ瀹屽悗锛�4鍙枫��5鍙锋垨6鍙蜂负涓荤洰鏍�
+ BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
+ // 鏀诲嚮mininumIndex鐩爣
+ int minimumIndex = int.MaxValue;
+ foreach (var hurt in tagUseSkillAttack.HurtList)
+ {
+ BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (target == null)
+ {
+ Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+
+ minimumIndex = Mathf.Min(target.GetPositionNum(), minimumIndex);
+ }
+
+ if (minimumIndex != int.MaxValue)
+ {
+ ShotToIndex(battleCamp, minimumIndex, index);
+ }
+ else
+ {
+ Debug.LogError("绾垫帓鏀诲嚮娌℃湁鐩爣 寮哄埗缁撴潫瀛愬脊鐗规晥");
+ ForceFinished();
+ }
+
+
+ }
+
+ // 5 鑷繁锛�
+ private void SelfShoting(int index)
+ {
+ // 榛樿鍙�夎嚜宸憋紝鑷繁涓轰富鐩爣
+ ShotToIndex(caster.Camp, caster.GetPositionNum(), index);
+ }
+
+ // 鏁e皠
+ private void ScatterShot(int index)
+ {
+ // 鍙湪绗竴娆″彂灏勬椂鍒濆鍖栨暎灏勮鏁板櫒
+ if (index == 0)
+ {
+ scatterHitCount = 0;
+ // 鎬诲嚮涓暟 = 鍙戝皠娆℃暟 脳 鐩爣鏁伴噺
+ scatterTotalTargets = skillSkinConfig.ActiveFrames.Length * tagUseSkillAttack.HurtList.Length;
+ }
+
+ // 澶勭悊鏁e皠閫昏緫
+ for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
+ {
+ var hurt = tagUseSkillAttack.HurtList[i];
+ BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (target == null)
+ {
+ Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ // 鐩爣涓虹┖鏃跺噺灏戝搴斿彂灏勬鏁扮殑鎬荤洰鏍囨暟
+ if (index == 0) scatterTotalTargets--;
+ continue;
+ }
+ ScatterShot(target, hurt, index, i);
+ }
+ }
+
+ private void ScatterShot(BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, int bulletIndex, int order)
+ {
+ BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillSkinConfig.BulletEffectId, caster.GetRectTransform(), caster.Camp, caster.GetModelScale());
+
+ bool shotToSelf = target.ObjID == caster.ObjID;
+
+ effectPlayer.Alpha = shotToSelf ? 0f : 1f;
+
+ var tempOrder = order;
+
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, skillSkinConfig, effectPlayer, target.GetRectTransform(),
+ new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt }, bulletIndex, (index, hitList) =>
+ {
+ foreach (var hurt in hitList)
+ {
+ BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (targetObj == null)
+ {
+ Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffectId, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect2, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect3, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect4, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ }
+
+ // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
+ onHit?.Invoke(index, hitList);
+ // 鍑讳腑灏遍攢姣佸瓙寮�
+ caster.battleField.battleEffectMgr.RemoveEffect(skillSkinConfig.BulletEffectId, effectPlayer);
+
+ // 澧炲姞鏁e皠鍑讳腑璁℃暟
+ scatterHitCount++;
+
+ // 鍒ゆ柇鏄惁鎵�鏈夊彂灏勬鏁扮殑鎵�鏈夌洰鏍囬兘宸插嚮涓�
+ if (scatterHitCount >= scatterTotalTargets)
+ {
+ isFinish = true;
+ }
+ });
+
+ bulletCurves.Add(bulletCurve);
+ }
+
+ protected void ShotToTarget(BattleObject target, int bulletIndex)
+ {
+ BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillSkinConfig.BulletEffectId, caster.GetRectTransform(), caster.Camp, caster.GetModelScale());
+
+ bool shotToSelf = target.ObjID == caster.ObjID;
+
+ effectPlayer.Alpha = shotToSelf ? 0f : 1f;
+
+ int bounceHitIndex = 0;
+
+ int tempBulletIndex = bulletIndex;
+
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, skillSkinConfig, effectPlayer, target.GetRectTransform(), tagUseSkillAttack.HurtList.ToList(), bulletIndex, (index, hitList) =>
+ {
+ if (skillSkinConfig.BulletPath == 4)
+ {
+ if (bounceHitIndex >= hitList.Count)
+ {
+ return;
+ }
+ var hurt = hitList[bounceHitIndex++];
+ BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (targetObj != null)
+ {
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffectId, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect2, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect3, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect4, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ }
+ else
+ {
+ Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ }
+
+ // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
+ onHit?.Invoke(index, new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt });
+
+ if (bounceHitIndex >= tagUseSkillAttack.HurtList.Length)
+ {
+ caster.battleField.battleEffectMgr.RemoveEffect(skillSkinConfig.BulletEffectId, effectPlayer);
+ }
+
+ if (isFinish)
+ return;
+
+ if (tempBulletIndex >= skillSkinConfig.ActiveFrames.Length - 1 && bounceHitIndex >= hitList.Count)
+ {
+ isFinish = true;
+ }
+ }
+ else
+ {
+ foreach (var hurt in hitList)
+ {
+ BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (targetObj == null)
+ {
+ Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffectId, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect2, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect3, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ PlayExplosionEffect(skillSkinConfig.ExplosionEffect4, targetObj.GetTransform(), caster.Camp, targetObj.GetModelScale());
+ }
+
+ // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
+ onHit?.Invoke(index, hitList);
+ // 鍑讳腑灏遍攢姣佸瓙寮�
+
+ caster.battleField.battleEffectMgr.RemoveEffect(skillSkinConfig.BulletEffectId, effectPlayer);
+
+ if (isFinish)
+ return;
+
+ if (bulletIndex >= skillSkinConfig.ActiveFrames.Length - 1)
+ {
+ isFinish = true;
+ }
+ }
+
+
+ });
+
+ bulletCurves.Add(bulletCurve);
+ }
+
+
+
+ protected void PlayExplosionEffect(int effectId, Transform parent, BattleCamp camp, float _scaleRatio)
+ {
+ if (effectId <= 0)
+ return;
+
+ var effect = caster.battleField.battleEffectMgr.PlayEffect(caster, effectId, parent, camp, _scaleRatio);
+ if (effect != null)
+ {
+ effect.transform.localRotation = parent.localRotation;
+ if (effect.transform.localScale.x < 0f)
+ {
+ effect.transform.localRotation *= Quaternion.Euler(0, 180, 0);
+ }
+ }
+ }
+
+ private void ShotEachTargets(int index)
+ {
+ for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
+ {
+ var hurt = tagUseSkillAttack.HurtList[i];
+ BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (target == null)
+ {
+ Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+ ShotToTarget(target, index);
+ }
+ }
public override void Run()
@@ -181,15 +503,24 @@
}
}
+ public override void ForceFinished()
+ {
+ base.ForceFinished();
+ foreach (var bulletCurve in bulletCurves)
+ {
+ bulletCurve.ForceFinish();
+ }
+ }
+
public override bool IsFinished()
{
- bool isCurveFinish = false;
+ bool isCurveFinish = bulletCurves.Count <= 0;
foreach (var bulletCurve in bulletCurves)
{
isCurveFinish |= bulletCurve.IsFinished;
}
- return isCurveFinish && isFinish;
+ return isCurveFinish && base.IsFinished();
}
}
\ No newline at end of file
--
Gitblit v1.8.0