From 6696f835cfba7fd451d7a78342bb56cdc6e2e940 Mon Sep 17 00:00:00 2001 From: yyl <yyl> Date: 星期三, 10 九月 2025 14:23:45 +0800 Subject: [PATCH] 125 【战斗】战斗系统 子弹部分代码 --- Main/System/Battle/SkillEffect/BulletSkillEffect.cs | 240 ++++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 179 insertions(+), 61 deletions(-) diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs index 4e0b138..612bc47 100644 --- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs +++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs @@ -39,93 +39,134 @@ else { // 鍖哄垎鏁e皠璺熻寖鍥存敾鍑� - if (skillConfig.Scattering == 1) { // 鏁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); - continue; - } - - ShotToTarget(target); - } + ShotEachTargets(); } else { - // 鑼冨洿鏀诲嚮 - // 鏀诲嚮鍚戝叧閿綅缃� 鐒跺悗鎵�鏈変汉鍙椾激 - int mainTargetIndex = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig); - - BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp(); - - RectTransform rectTarget = caster.battleField.GetTeamNode(battleCamp, mainTargetIndex); - - Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHitFormation = (_hitIndex, _hurtList) => + switch (skillConfig.TagAim) { - onHit?.Invoke(_hitIndex, tagUseSkillAttack.HurtList.ToList()); - }; - - if (skillConfig.TagCount >= 6) - { - ShotToFormation(rectTarget, onHitFormation); - } - else - { - ShotToFormationEx(rectTarget, onHitFormation); + case 0: + AllAreaShoting(); + break; + case 1: + OneTargetShoting(); + break; + case 2: + FrontRowShoting(); + break; + case 3: + BackRowShoting(); + break; + case 4: + VerticalRowShoting(); + break; + case 5: + SelfShoting(); + break; } } } } - private void ShotToFormationEx(RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> _onHit) + // 0 鍏ㄩ儴鑼冨洿锛� + private void AllAreaShoting() { - BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp); - - RectTransform effectTrans = effectPlayer.transform as RectTransform; - - var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, (index, hitList) => + if (skillConfig.TagCount == 0 || skillConfig.TagCount >= 6) { - // 鍑讳腑灏遍攢姣佸瓙寮� - caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer); - // 鎾斁瀛愬脊鐖嗙偢鐗规晥 - + // 鑻agCount鐩爣涓暟涓�0鎴�6锛屾牴鎹甌agFriendly鏁屾垜閰嶇疆锛屼唬琛ㄤ綔鐢ㄤ簬鏁屾柟鍏ㄤ綋鎴栨垜鏂瑰叏浣擄紝姝ゆ椂涓荤洰鏍囦负鏁屾垜绔欎綅涓殑2鍙蜂綅缃� BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp(); + ShotToIndex(battleCamp, 1); + } + else + { + // 鑻agCount鐩爣涓暟涓�1~5涓紝浠h〃闅忔満浣滅敤浜庢晫鏂规垨鎴戞柟x涓灏嗭紝姝ゆ椂鎵�鏈夎闅忔満鍒扮殑瀵硅薄閮戒负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級 + ShotEachTargets(); + } + } - foreach (var hurt in hitList) + // 1 瀵逛綅锛� + private void OneTargetShoting() + { + // 榛樿鍙��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); + } + + // 2 鍓嶆帓锛� + private void FrontRowShoting() + { + // 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.TagAffect != 3 && skillConfig.TagCount < 3) + { + ShotEachTargets(); + } + else + { + int targetIndex = int.MaxValue; + int minimumIndex = int.MaxValue; + + foreach (var hurt in tagUseSkillAttack.HurtList) { - BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID); - if (targetObj == null) + BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID); + if (target == null) { - Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID); + Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID); continue; } - PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, targetObj.Camp); - PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, targetObj.Camp); - PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, targetObj.Camp); + minimumIndex = Mathf.Min(target.teamHero.positionNum, minimumIndex); + + if (target.Camp == battleCamp && target.teamHero.positionNum < 3) + { + targetIndex = 1; + break; + } } - // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃� - _onHit?.Invoke(index, hitList); - isFinish = true; - }); + if (targetIndex == int.MaxValue) + { + targetIndex = (minimumIndex >= 3) ? 4 : 1; + } + else + { + targetIndex = 1; + } - bulletCurves.Add(bulletCurve); + ShotToIndex(battleCamp, targetIndex); + } + } - protected void ShotToFormation(RectTransform target, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> _onHit) + private void ShotToIndex(BattleCamp camp, int targetIndex) { + RectTransform targetTransform = caster.battleField.GetTeamNode(camp, targetIndex); BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp); RectTransform effectTrans = effectPlayer.transform as RectTransform; - var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, (index, hitList) => + var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, targetTransform, tagUseSkillAttack, (index, hitList) => { if (isFinish) return; @@ -135,8 +176,8 @@ BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp(); // 棣栧厛鏄洰鏍囪韩涓婄垎鐐� - PlayExplosionEffect(skillConfig.ExplosionEffectId, target, battleCamp); - PlayExplosionEffect(skillConfig.ExplosionEffect2, target, battleCamp); + PlayExplosionEffect(skillConfig.ExplosionEffectId, targetTransform, battleCamp); + PlayExplosionEffect(skillConfig.ExplosionEffect2, targetTransform, battleCamp); foreach (var hurt in hitList) { @@ -147,23 +188,86 @@ continue; } - PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, targetObj.Camp); + PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, targetObj.Camp); } // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃� - _onHit?.Invoke(index, hitList); + onHit?.Invoke(index, hitList); isFinish = true; }); bulletCurves.Add(bulletCurve); + } + // 3 鍚庢帓锛� + private void BackRowShoting() + { + // 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.TagAffect != 3 && skillConfig.TagCount < 3) + { + ShotEachTargets(); + } + 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.teamHero.positionNum > 3) + { + targetIndex = 4; + break; + } + + maxinumIndex = Mathf.Max(target.teamHero.positionNum, maxinumIndex); + } + + if (targetIndex == int.MaxValue) + { + targetIndex = (maxinumIndex < 3) ? 1 : 4; + } + else + { + targetIndex = 4; + } + + ShotToIndex(battleCamp, targetIndex); + } + } + + // 4 绾垫帓锛� + private void VerticalRowShoting() + { + // 绾垫帓鍒嗗埆涓�1銆�4锛�2銆�5锛�3銆�6锛屼笁缁勭旱鎺掞紝鎸夊浣嶈鍒欓�夋嫨锛岄粯璁�1鍙枫��2鍙锋垨3鍙蜂负涓荤洰鏍囷紝鍓嶆帓1銆�2銆�3鍙蜂綅缃叏閮ㄦ瀹屽悗锛�4鍙枫��5鍙锋垨6鍙蜂负涓荤洰鏍� + + ShotEachTargets(); + + } + + // 5 鑷繁锛� + private void SelfShoting() + { + // 榛樿鍙�夎嚜宸憋紝鑷繁涓轰富鐩爣 + ShotToIndex(caster.Camp, caster.teamHero.positionNum); } protected void ShotToTarget(BattleObject target) { BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp); - var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, (index, hitList) => { @@ -213,6 +317,20 @@ } } + private void ShotEachTargets() + { + 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); + } + } public override void Run() -- Gitblit v1.8.0