From c739af4767765b7a1de4f83301ce9be73077ea37 Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 16 Jan 2020 19:27:29 -0800 Subject: [PATCH] Extract item restrictions to separate class Move similar classes to folder --- PKHeX.Core/Legality/Core.cs | 33 ----------- .../{ => Restrictions}/GBRestrictions.cs | 0 .../Legality/Restrictions/ItemRestrictions.cs | 57 +++++++++++++++++++ .../Legality/{ => Restrictions}/Memories.cs | 0 .../{ => Restrictions}/VivillonTables.cs | 0 .../Legality/{ => Restrictions}/WordFilter.cs | 0 PKHeX.Core/Legality/Verifiers/ItemVerifier.cs | 2 +- 7 files changed, 58 insertions(+), 34 deletions(-) rename PKHeX.Core/Legality/{ => Restrictions}/GBRestrictions.cs (100%) create mode 100644 PKHeX.Core/Legality/Restrictions/ItemRestrictions.cs rename PKHeX.Core/Legality/{ => Restrictions}/Memories.cs (100%) rename PKHeX.Core/Legality/{ => Restrictions}/VivillonTables.cs (100%) rename PKHeX.Core/Legality/{ => Restrictions}/WordFilter.cs (100%) diff --git a/PKHeX.Core/Legality/Core.cs b/PKHeX.Core/Legality/Core.cs index 6c2e22387..45cfc3c6d 100644 --- a/PKHeX.Core/Legality/Core.cs +++ b/PKHeX.Core/Legality/Core.cs @@ -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() - }; - } - - 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) diff --git a/PKHeX.Core/Legality/GBRestrictions.cs b/PKHeX.Core/Legality/Restrictions/GBRestrictions.cs similarity index 100% rename from PKHeX.Core/Legality/GBRestrictions.cs rename to PKHeX.Core/Legality/Restrictions/GBRestrictions.cs diff --git a/PKHeX.Core/Legality/Restrictions/ItemRestrictions.cs b/PKHeX.Core/Legality/Restrictions/ItemRestrictions.cs new file mode 100644 index 000000000..41fd6a3c2 --- /dev/null +++ b/PKHeX.Core/Legality/Restrictions/ItemRestrictions.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; + +using static PKHeX.Core.Legal; + +namespace PKHeX.Core +{ + /// + /// Information about Held Item Restrictions + /// + public static class ItemRestrictions + { + /// + /// Checks if a is available to be held in the current . + /// + /// Entity data + /// True if able to be held, false if not + public static bool IsHeldItemAllowed(PKM pk) + { + if (pk is PB7) + return pk.HeldItem == 0; + return IsHeldItemAllowed(pk.HeldItem, pk.Format); + } + + /// + /// Checks if an is available to be held in . + /// + /// Held Item ID + /// Generation Number + /// True if able to be held, false if not + 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 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() + }; + } + } +} diff --git a/PKHeX.Core/Legality/Memories.cs b/PKHeX.Core/Legality/Restrictions/Memories.cs similarity index 100% rename from PKHeX.Core/Legality/Memories.cs rename to PKHeX.Core/Legality/Restrictions/Memories.cs diff --git a/PKHeX.Core/Legality/VivillonTables.cs b/PKHeX.Core/Legality/Restrictions/VivillonTables.cs similarity index 100% rename from PKHeX.Core/Legality/VivillonTables.cs rename to PKHeX.Core/Legality/Restrictions/VivillonTables.cs diff --git a/PKHeX.Core/Legality/WordFilter.cs b/PKHeX.Core/Legality/Restrictions/WordFilter.cs similarity index 100% rename from PKHeX.Core/Legality/WordFilter.cs rename to PKHeX.Core/Legality/Restrictions/WordFilter.cs diff --git a/PKHeX.Core/Legality/Verifiers/ItemVerifier.cs b/PKHeX.Core/Legality/Verifiers/ItemVerifier.cs index d7830e9b2..7b4291ada 100644 --- a/PKHeX.Core/Legality/Verifiers/ItemVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/ItemVerifier.cs @@ -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