using System.Collections.Generic;
using cfg.SkillCfg;
using Gameplay.Unit;
namespace Gameplay.Character.Helper
{
public static class CharacterSkillHelper
{
///
/// 随机选择指定个数目标
/// 当数量不满足时,返回全部目标
///
///
///
///
private static List _RandomSelectTargets(List allTargets,
int count)
{
if (allTargets.Count <= count)
{
return allTargets;
}
var result = PhxhSDK.Utils.GetRandomElementFromList(allTargets, count);
return result;
}
private static List _RandomSelectNoFullHpTargets(List allTargets,
int count)
{
if (allTargets.Count <= count)
{
return allTargets;
}
var noFullHpTargets = new List();
var fullHpTargets = new List();
foreach (var target in allTargets)
{
if (target.aliveData.currentHp < target.aliveData.maxHp)
{
noFullHpTargets.Add(target);
}
else
{
fullHpTargets.Add(target);
}
}
if (noFullHpTargets.Count >= count)
{
return _RandomSelectTargets(noFullHpTargets, count);
}
var remainCount = count - noFullHpTargets.Count;
if (fullHpTargets.Count >= remainCount)
{
var remainTargets = _RandomSelectTargets(fullHpTargets, remainCount);
noFullHpTargets.AddRange(remainTargets);
return noFullHpTargets;
}
// 理论上不会走到这里
return allTargets;
}
public static List RandomSelectTargets(List allTargets,
int count,
ETargetPrefer preferType)
{
switch (preferType)
{
case ETargetPrefer.None:
return _RandomSelectTargets(allTargets, count);
case ETargetPrefer.PreferNoFullHp:
return _RandomSelectNoFullHpTargets(allTargets, count);
default:
DebugUtil.LogError("暂未处理的目标优先类型: {0}", preferType);
return new List();
}
}
}
}