CTT/Server/Hotfix/Game/SkillSystem/NewSkill/System/SelectMultiTargetSystem.cs

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;
}
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));
}
}
}