81 lines
3.2 KiB
C#
Executable File
81 lines
3.2 KiB
C#
Executable File
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;
|
|
}
|
|
TargetableUnitComponent 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)
|
|
{
|
|
Unit currtarget = component.currTarget;
|
|
if (!list.Contains(currtarget))
|
|
currtarget = null;
|
|
RandomHelper.SelectUnits(list, currtarget, SkillHotfixHelper.RandomNumber(skillSender.skillLogic.skillConfigId, self.minCount, self.maxCount, self.isRndom));
|
|
}
|
|
}
|
|
}
|