zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Server/Hotfix/Game/Helper/SelectTargetHelper.cs

118 lines
3.3 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
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;
2021-04-11 19:50:39 +08:00
foreach (Unit u in sourceList)
2021-04-08 20:09:59 +08:00
{
if (IsValid(u, flags))
retList.Add(u);
}
}
private static bool IsValid(Unit unit, TargetFlagType flags)
{
if (flags.HasFlag(TargetFlagType.))
{
if (!unit.IsAlive)
{
return false;
}
}
2023-09-07 00:06:37 +08:00
2021-04-08 20:09:59 +08:00
if (flags.HasFlag(TargetFlagType.))
{
}
2023-09-07 00:06:37 +08:00
2021-04-08 20:09:59 +08:00
if (flags.HasFlag(TargetFlagType.))
{
}
2023-09-07 00:06:37 +08:00
2021-04-08 20:09:59 +08:00
if (flags.HasFlag(TargetFlagType.))
{
}
2023-09-07 00:06:37 +08:00
2021-04-08 20:09:59 +08:00
if (flags.HasFlag(TargetFlagType.))
{
}
2023-09-07 00:06:37 +08:00
2021-04-08 20:09:59 +08:00
return true;
}
2023-09-07 00:06:37 +08:00
public static void GetTarget(SelectTargetBase selectTarget, ISkillSender skillSender, SkillAction action)
2021-04-08 20:09:59 +08:00
{
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)
{
2021-04-11 19:50:39 +08:00
Unit target = singleUnit.target;
2021-04-08 20:09:59 +08:00
if (!target)
{
Log.ErrorDetail($"单体目标为空 {skillSender}");
targetBase.Dispose();
return;
}
2023-09-07 00:06:37 +08:00
try
{
if (action != null)
action.Invoke(target, skillSender).Coroutine();
}
catch (Exception e)
{
Log.Error(e);
}
2021-04-08 20:09:59 +08:00
}
else if (targetBase is TargetableMultiUnit multiUnit)
{
2021-04-11 19:50:39 +08:00
List<Unit> targetList = multiUnit.targetList;
2021-04-08 20:09:59 +08:00
if (targetList == null)
{
Log.ErrorDetail($"多个目标为空 {skillSender}");
targetBase.Dispose();
return;
}
2023-09-07 00:06:37 +08:00
2021-04-11 19:50:39 +08:00
foreach (Unit target in targetList)
2021-04-08 20:09:59 +08:00
{
2023-09-07 00:06:37 +08:00
try
{
if (action != null)
action.Invoke(target, skillSender).Coroutine();
}
catch (Exception e)
{
Log.Error(e);
}
2021-04-08 20:09:59 +08:00
}
}
2023-09-07 00:06:37 +08:00
2021-04-08 20:09:59 +08:00
targetBase.Dispose();
}
}
2023-09-07 00:06:37 +08:00
}