Adds helper function to find what Pokemon evolves into what
This commit is contained in:
parent
38e6630c67
commit
e7cda474f1
|
@ -13,6 +13,10 @@ public interface IReadOnlySpeciesLibrary : IEnumerable<ISpecies>
|
|||
/// Tries to get a species from the library. Returns false if the species is not found.
|
||||
/// </summary>
|
||||
bool TryGet(StringKey key, [MaybeNullWhen(false)] out ISpecies value);
|
||||
|
||||
/// <summary>
|
||||
/// Tried to get a species from the library by its national dex number. Returns false if the species is not found.
|
||||
/// </summary>
|
||||
bool TryGetById(int id, [MaybeNullWhen(false)] out ISpecies value);
|
||||
|
||||
/// <summary>
|
||||
|
@ -29,11 +33,19 @@ public interface IReadOnlySpeciesLibrary : IEnumerable<ISpecies>
|
|||
/// Whether the library is empty.
|
||||
/// </summary>
|
||||
bool IsEmpty { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Finds the Pokémon that evolves into the given species. If the species does not evolve, returns null.
|
||||
/// If multiple species evolve into the given species, returns the first one found.
|
||||
/// </summary>
|
||||
ISpecies? FindPreEvolution(ISpecies species);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="IReadOnlySpeciesLibrary"/>
|
||||
public class SpeciesLibrary : DataLibrary<ISpecies>, IReadOnlySpeciesLibrary
|
||||
{
|
||||
private Dictionary<ISpecies, ISpecies> _preEvolutionCache = new();
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool TryGetById(int id, [MaybeNullWhen(false)] out ISpecies value)
|
||||
{
|
||||
|
@ -41,4 +53,19 @@ public class SpeciesLibrary : DataLibrary<ISpecies>, IReadOnlySpeciesLibrary
|
|||
? (value = species) != null
|
||||
: (value = default) != null;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public ISpecies? FindPreEvolution(ISpecies species)
|
||||
{
|
||||
if (_preEvolutionCache.TryGetValue(species, out var preEvolution))
|
||||
return preEvolution;
|
||||
foreach (var s in this)
|
||||
{
|
||||
if (s.EvolutionData.All(e => e.ToSpecies != species.Name))
|
||||
continue;
|
||||
_preEvolutionCache[species] = s;
|
||||
return s;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue