using System.Linq;
using static PKHeX.Core.LegalityCheckStrings;
namespace PKHeX.Core
{
///
/// Verify Evolution Information for a matched
///
public static class EvolutionVerifier
{
///
/// Verifies Evolution scenarios of an for an input and relevant .
///
/// Source data to verify
/// Source supporting information to verify with
///
public static CheckResult VerifyEvolution(PKM pkm, LegalInfo info)
{
return IsValidEvolution(pkm, info)
? new CheckResult(CheckIdentifier.Evolution)
: new CheckResult(Severity.Invalid, V86, CheckIdentifier.Evolution);
}
///
/// Checks if the Evolution from the source is valid.
///
/// Source data to verify
/// Source supporting information to verify with
/// Evolution is valid or not
private static bool IsValidEvolution(PKM pkm, LegalInfo info)
{
int species = pkm.Species;
if (info.EncounterMatch.Species == species)
return true;
if (info.EncounterMatch.EggEncounter && species == 350 && pkm.Format >= 5 && !pkm.IsUntraded) // Prism Scale
return true;
if (!Legal.IsEvolutionValid(pkm, info.EncounterMatch.Species, info.EncounterMatch.LevelMin))
return false;
// If current species evolved with a move evolution and encounter species is not current species check if the evolution by move is valid
// Only the evolution by move is checked, if there is another evolution before the evolution by move is covered in IsEvolutionValid
if (Legal.SpeciesEvolutionWithMove.Contains(pkm.Species))
return Legal.IsEvolutionValidWithMove(pkm, info);
return true;
}
}
}