NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Character/Helper/CharacterSkillHelper.cs

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>();
}
}
}
}