81 lines
3.2 KiB
C#
81 lines
3.2 KiB
C#
|
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<TargetableUnitComponent>();
|
|||
|
if (targetComponent == null)
|
|||
|
{
|
|||
|
Log.Warning($"战斗已经结束");
|
|||
|
return null;
|
|||
|
}
|
|||
|
List<Unit> 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<Unit>();
|
|||
|
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<TargetableMultiUnit, IEnumerable<Unit>>(Game.Scene, list);
|
|||
|
return targetableMultiUnit;
|
|||
|
}
|
|||
|
private static void SelectUnits(SelectMultiTarget self, List<Unit> 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));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|