using System.Diagnostics.CodeAnalysis; using PkmnLib.Static.Species; using PkmnLib.Static.Utils; namespace PkmnLib.Static.Libraries; /// <summary> /// The library for all abilities in the game. /// </summary> public interface IReadOnlyAbilityLibrary { /// <summary> /// Tries to get an ability from the library. Returns false if the ability is not found. /// </summary> bool TryGet(StringKey key, [MaybeNullWhen(false)] out IAbility value); /// <summary> /// Gets a random ability from the library. /// </summary> IAbility GetRandom(IRandom random); /// <summary> /// The amount of abilities in the library. /// </summary> int Count { get; } /// <summary> /// Whether the library is empty. /// </summary> bool IsEmpty { get; } } /// <inheritdoc cref="IReadOnlyAbilityLibrary"/> public class AbilityLibrary : DataLibrary<IAbility>, IReadOnlyAbilityLibrary;