PKHeX/PKHeX.Core/Legality/EvoBase.cs
Kurt 645db23706 Extract EvoBase and MoveList from Core
These are really old bloated parts of the original legality checking logic; separating for now to rewrite.
2020-06-20 19:44:05 -05:00

44 lines
1.5 KiB
C#

using System.Collections.Generic;
namespace PKHeX.Core
{
public static class EvoBase
{
internal static EvoCriteria GetBaseSpecies(PKM pkm, int skipOption = 0)
{
return GetBaseSpecies(pkm, -1, pkm.Format, skipOption);
}
internal static EvoCriteria GetBaseSpecies(PKM pkm, int maxSpeciesOrigin, int generation, int skipOption = 0)
{
int tree = generation;
var table = EvolutionTree.GetEvolutionTree(pkm, tree);
var evos = table.GetValidPreEvolutions(pkm, maxLevel: 100, maxSpeciesOrigin: maxSpeciesOrigin, skipChecks: true);
return GetBaseSpecies(evos, skipOption);
}
private static readonly EvoCriteria Nincada = new EvoCriteria(290, 0)
{
Method = (int)EvolutionType.LevelUp,
MinLevel = 20,
Level = 20,
RequiresLvlUp = true,
};
private static readonly EvoCriteria EvoEmpty = new EvoCriteria(0, 0)
{
Method = (int)EvolutionType.None,
};
internal static EvoCriteria GetBaseSpecies(IReadOnlyList<EvoCriteria> evolutions, int skipOption = 0)
{
int species = evolutions[0].Species;
if (species == (int)Species.Shedinja) // Shedinja
return Nincada; // Nincada
// skip n from end, return species if invalid index
int index = evolutions.Count - 1 - skipOption;
return (uint)index >= evolutions.Count ? EvoEmpty : evolutions[index];
}
}
}