From 09bc892c7283df8757a07b646d5af21ddaa263d1 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 06 十一月 2025 18:22:34 +0800
Subject: [PATCH] 164 天子的考验-客户端
---
Main/System/Battle/SkillEffect/BulletSkillEffect.cs | 113 +++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 98 insertions(+), 15 deletions(-)
diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index 22d88ed..4d8362e 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -12,6 +12,10 @@
// 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)
@@ -19,6 +23,7 @@
{
}
+
public override void OnMiddleFrameEnd(int times, int index)
@@ -43,7 +48,7 @@
if (skillConfig.Scattering == 1)
{
// 鏁e皠
- ShotEachTargets(index);
+ ScatterShot(index);
}
else
{
@@ -89,7 +94,7 @@
{
// 鑻agCount鐩爣涓暟涓�1~5涓紝浠h〃闅忔満浣滅敤浜庢晫鏂规垨鎴戞柟x涓灏嗭紝姝ゆ椂鎵�鏈夎闅忔満鍒扮殑瀵硅薄閮戒负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級
ShotEachTargets(index);
- }
+ }
}
// 1 瀵逛綅锛�
@@ -123,7 +128,7 @@
BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
- if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3)
+ if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3)
{
ShotEachTargets(index);
}
@@ -167,11 +172,11 @@
private void ShotToIndex(BattleCamp camp, int targetIndex, int bulletIndex)
{
RectTransform targetTransform = caster.battleField.GetTeamNode(camp, targetIndex);
- BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
+ BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
RectTransform effectTrans = effectPlayer.transform as RectTransform;
- var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, targetTransform, tagUseSkillAttack, bulletIndex, (index, hitList) =>
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, targetTransform, tagUseSkillAttack.HurtList.ToList(), bulletIndex, (index, hitList) =>
{
if (isFinish)
return;
@@ -194,6 +199,7 @@
}
PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect4, targetObj.heroGo.transform, caster.Camp);
}
// 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
@@ -214,7 +220,7 @@
BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
- if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3)
+ if (skillConfig.TagAffect != 0 || skillConfig.TagCount < 3)
{
ShotEachTargets(index);
}
@@ -293,16 +299,46 @@
ShotToIndex(caster.Camp, caster.teamHero.positionNum, index);
}
- protected void ShotToTarget(BattleObject target, int bulletIndex)
+ // 鏁e皠
+ private void ScatterShot(int index)
{
- BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
-
- var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, bulletIndex, (index, hitList) =>
+ // 鍙湪绗竴娆″彂灏勬椂鍒濆鍖栨暎灏勮鏁板櫒
+ if (index == 0)
{
- if (isFinish)
- return;
-
+ scatterHitCount = 0;
+ // 鎬诲嚮涓暟 = 鍙戝皠娆℃暟 脳 鐩爣鏁伴噺
+ scatterTotalTargets = skillConfig.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, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
+
+ bool shotToSelf = target.ObjID == caster.ObjID;
+
+ effectPlayer.Alpha = shotToSelf ? 0f : 1f;
+
+ var tempOrder = order;
+
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans,
+ new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt }, bulletIndex, (index, hitList) =>
+ {
foreach (var hurt in hitList)
{
BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
@@ -315,12 +351,59 @@
PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp);
PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp);
PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect4, targetObj.heroGo.transform, caster.Camp);
}
// 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
onHit?.Invoke(index, hitList);
// 鍑讳腑灏遍攢姣佸瓙寮�
caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.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, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
+
+ bool shotToSelf = target.ObjID == caster.ObjID;
+
+ effectPlayer.Alpha = shotToSelf ? 0f : 1f;
+
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack.HurtList.ToList(), 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(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect4, targetObj.heroGo.transform, caster.Camp);
+ }
+
+ // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
+ onHit?.Invoke(index, hitList);
+ // 鍑讳腑灏遍攢姣佸瓙寮�
+ caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
+
+ if (isFinish)
+ return;
if (bulletIndex >= skillConfig.ActiveFrames.Length - 1)
{
@@ -336,7 +419,7 @@
if (effectId <= 0)
return;
- var effect = caster.battleField.battleEffectMgr.PlayEffect(0, effectId, parent, camp);
+ var effect = caster.battleField.battleEffectMgr.PlayEffect(caster, effectId, parent, camp);
if (effect != null)
{
effect.transform.localRotation = parent.localRotation;
@@ -383,7 +466,7 @@
public override bool IsFinished()
{
- bool isCurveFinish = false;
+ bool isCurveFinish = bulletCurves.Count <= 0;
foreach (var bulletCurve in bulletCurves)
{
--
Gitblit v1.8.0