84 lines
2.6 KiB
C#
84 lines
2.6 KiB
C#
using System.Collections.Generic;
|
|
using cfg.SkillCfg;
|
|
using Gameplay.Unit;
|
|
namespace Gameplay.Character.Helper
|
|
{
|
|
public static class CharacterSkillHelper
|
|
{
|
|
|
|
/// <summary>
|
|
/// 随机选择指定个数目标
|
|
/// 当数量不满足时,返回全部目标
|
|
/// </summary>
|
|
/// <param name="allTargets"></param>
|
|
/// <param name="count"></param>
|
|
/// <returns></returns>
|
|
private static List<GameUnit> _RandomSelectTargets(List<GameUnit> allTargets,
|
|
int count)
|
|
{
|
|
if (allTargets.Count <= count)
|
|
{
|
|
return allTargets;
|
|
}
|
|
var result = PhxhSDK.Utils.GetRandomElementFromList(allTargets, count);
|
|
return result;
|
|
}
|
|
|
|
private static List<GameUnit> _RandomSelectNoFullHpTargets(List<GameUnit> allTargets,
|
|
int count)
|
|
{
|
|
if (allTargets.Count <= count)
|
|
{
|
|
return allTargets;
|
|
}
|
|
|
|
var noFullHpTargets = new List<GameUnit>();
|
|
var fullHpTargets = new List<GameUnit>();
|
|
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<GameUnit> RandomSelectTargets(List<GameUnit> 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<GameUnit>();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|