using Cal;
using System;
using System.Collections.Generic;
namespace ET
{
public static class SelectTargetHelper
{
///
/// 选取可以攻击的目标
///
public static void SelectUnitByFlags(List sourceList, List retList, TargetFlagType flags)
{
retList.Clear();
if (sourceList == null || sourceList.Count == 0)
return;
foreach (Unit u in sourceList)
{
if (IsValid(u, flags))
retList.Add(u);
}
}
private static bool IsValid(Unit unit, TargetFlagType flags)
{
if (flags.HasFlag(TargetFlagType.死亡的))
{
if (!unit.IsAlive)
{
return false;
}
}
if (flags.HasFlag(TargetFlagType.无敌的))
{
}
if (flags.HasFlag(TargetFlagType.隐身的))
{
}
if (flags.HasFlag(TargetFlagType.免疫控制的))
{
}
if (flags.HasFlag(TargetFlagType.召唤的))
{
}
return true;
}
public static void GetTarget(SelectTargetBase selectTarget, ISkillSender skillSender, Action action)
{
TargetableUnitBase targetBase = null;
switch (selectTarget)
{
default:
break;
case SelectSingleTarget singleTarget:
targetBase = singleTarget.GetTarget(skillSender);
break;
case SelectMultiTarget selectMultiTarget:
targetBase = selectMultiTarget.GetTarget(skillSender);
break;
}
if (!targetBase) return;
if (targetBase is TargetableSingleUnit singleUnit)
{
Unit target = singleUnit.target;
if (!target)
{
Log.ErrorDetail($"单体目标为空 {skillSender}");
targetBase.Dispose();
return;
}
action?.Invoke(target, skillSender);
}
else if (targetBase is TargetableMultiUnit multiUnit)
{
List targetList = multiUnit.targetList;
if (targetList == null)
{
Log.ErrorDetail($"多个目标为空 {skillSender}");
targetBase.Dispose();
return;
}
foreach (Unit target in targetList)
{
action?.Invoke(target, skillSender);
}
}
targetBase.Dispose();
}
}
}