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