using Cal; using System; using System.Collections.Generic; namespace ET { public static class SelectMultiTargetSystem { public static TargetableUnitBase GetTarget(this SelectMultiTarget self, ISkillSender skillSender) { if (skillSender?.caster == null) { Log.Error($"skillSender is null :{skillSender == null} caster is null :{skillSender?.caster == null}"); return null; } var targetComponent = skillSender.caster.GetComponent(); if (targetComponent == null) { Log.Warning($"战斗已经结束"); return null; } List list; if (self.flags != TargetFlagType.无) { list = targetComponent.targetList; targetComponent.hasCurrList = false; switch (self.teamType) { case Cal.TeamType.无: break; case Cal.TeamType.敌方队伍: SelectTargetHelper.SelectUnitByFlags(targetComponent.allEnermy, list, self.flags); break; case Cal.TeamType.友方队伍: SelectTargetHelper.SelectUnitByFlags(targetComponent.allTeam, list, self.flags); break; case Cal.TeamType.全体队伍: SelectTargetHelper.SelectUnitByFlags(targetComponent.allTarget, list, self.flags); break; default: break; } } else { switch (self.teamType) { default: case Cal.TeamType.无: list = new List(); break; case Cal.TeamType.敌方队伍: list = targetComponent.currEnermyList; break; case Cal.TeamType.友方队伍: list = targetComponent.currFriendlyList; break; case Cal.TeamType.全体队伍: list = targetComponent.currAllList; break; } } if (!targetComponent.hasCurrList) { targetComponent.hasCurrList = true; SelectUnits(self, list, targetComponent, skillSender); } TargetableMultiUnit targetableMultiUnit = EntityFactory.Create>(Game.Scene, list); return targetableMultiUnit; } private static void SelectUnits(SelectMultiTarget self, List list, TargetableUnitComponent component, ISkillSender skillSender) { var currtarget = component.currTarget; if (!list.Contains(currtarget)) currtarget = null; RandomHelper.SelectUnits(list, currtarget, SkillHotfixHelper.RandomNumber(skillSender.skillLogic.skillConfigId, self.minCount, self.maxCount, self.isRndom)); } } }