CTT/Server/Hotfix/Game/Helper/SelectTargetHelper.cs

97 lines
2.8 KiB
C#

using Cal;
using System;
using System.Collections.Generic;
namespace ET
{
public static class SelectTargetHelper
{
/// <summary>
/// 选取可以攻击的目标
/// </summary>
public static void SelectUnitByFlags(List<Unit> sourceList, List<Unit> retList, TargetFlagType flags)
{
retList.Clear();
if (sourceList == null || sourceList.Count == 0)
return;
foreach (var 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<Unit, ISkillSender> 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)
{
var target = singleUnit.target;
if (!target)
{
Log.ErrorDetail($"单体目标为空 {skillSender}");
targetBase.Dispose();
return;
}
action?.Invoke(target, skillSender);
}
else if (targetBase is TargetableMultiUnit multiUnit)
{
var targetList = multiUnit.targetList;
if (targetList == null)
{
Log.ErrorDetail($"多个目标为空 {skillSender}");
targetBase.Dispose();
return;
}
foreach (var target in targetList)
{
action?.Invoke(target, skillSender);
}
}
targetBase.Dispose();
}
}
}