Extract item restrictions to separate class

Move similar classes to folder
This commit is contained in:
Kurt
2020-01-16 19:27:29 -08:00
parent baf46f9a3a
commit c739af4767
7 changed files with 58 additions and 34 deletions

View File

@@ -448,39 +448,6 @@ internal static int GetMaxLanguageID(int generation)
};
}
private static bool[] GetReleasedHeldItems(int generation)
{
return generation switch
{
2 => ReleasedHeldItems_2,
3 => ReleasedHeldItems_3,
4 => ReleasedHeldItems_4,
5 => ReleasedHeldItems_5,
6 => ReleasedHeldItems_6,
7 => ReleasedHeldItems_7,
8 => ReleasedHeldItems_8,
_ => Array.Empty<bool>()
};
}
internal static bool IsHeldItemAllowed(PKM pkm)
{
if (pkm is PB7)
return pkm.HeldItem == 0;
return IsHeldItemAllowed(pkm.HeldItem, pkm.Format);
}
private static bool IsHeldItemAllowed(int item, int generation)
{
if (item == 0)
return true;
if (item < 0)
return false;
var items = GetReleasedHeldItems(generation);
return items.Length > item && items[item];
}
private static bool IsEvolvedFormChange(PKM pkm)
{
if (pkm.IsEgg)

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using static PKHeX.Core.Legal;
namespace PKHeX.Core
{
/// <summary>
/// Information about Held Item Restrictions
/// </summary>
public static class ItemRestrictions
{
/// <summary>
/// Checks if a <see cref="PKM.HeldItem"/> is available to be held in the current <see cref="PKM.Format"/>.
/// </summary>
/// <param name="pk">Entity data</param>
/// <returns>True if able to be held, false if not</returns>
public static bool IsHeldItemAllowed(PKM pk)
{
if (pk is PB7)
return pk.HeldItem == 0;
return IsHeldItemAllowed(pk.HeldItem, pk.Format);
}
/// <summary>
/// Checks if an <see cref="item"/> is available to be held in <see cref="generation"/>.
/// </summary>
/// <param name="item">Held Item ID</param>
/// <param name="generation">Generation Number</param>
/// <returns>True if able to be held, false if not</returns>
public static bool IsHeldItemAllowed(int item, int generation)
{
if (item == 0)
return true;
if (item < 0)
return false;
var items = GetReleasedHeldItems(generation);
return items.Count > item && items[item];
}
private static IReadOnlyList<bool> GetReleasedHeldItems(int generation)
{
return generation switch
{
2 => ReleasedHeldItems_2,
3 => ReleasedHeldItems_3,
4 => ReleasedHeldItems_4,
5 => ReleasedHeldItems_5,
6 => ReleasedHeldItems_6,
7 => ReleasedHeldItems_7,
8 => ReleasedHeldItems_8,
_ => Array.Empty<bool>()
};
}
}
}

View File

@@ -12,7 +12,7 @@ public sealed class ItemVerifier : Verifier
public override void Verify(LegalityAnalysis data)
{
var pkm = data.pkm;
if (!Legal.IsHeldItemAllowed(pkm))
if (!ItemRestrictions.IsHeldItemAllowed(pkm))
data.AddLine(GetInvalid(LItemUnreleased));
if (pkm.Format == 3 && pkm.HeldItem == 175) // Enigma Berry