From 3686ee9ec43f7afe4f6e8bb7fd9edd546162eeac Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 8 Oct 2020 15:01:23 -0700 Subject: [PATCH] Set suggested Encounter Type on Met Location click too Closes #3010 --- .../Encounters/EncounterSlot/EncounterSlot4.cs | 2 +- .../EncounterSlot/IEncounterTypeTile.cs | 16 ++++++++++++++++ .../EncounterStatic/EncounterStaticTyped.cs | 4 ++-- .../Information/EncounterSuggestion.cs | 2 ++ PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs | 8 +++++++- 5 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 PKHeX.Core/Legality/Encounters/EncounterSlot/IEncounterTypeTile.cs diff --git a/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot4.cs b/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot4.cs index f0274aa52..26e1319b4 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot4.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterSlot/EncounterSlot4.cs @@ -1,6 +1,6 @@ namespace PKHeX.Core { - public sealed class EncounterSlot4 : EncounterSlot, IMagnetStatic, INumberedSlot + public sealed class EncounterSlot4 : EncounterSlot, IMagnetStatic, INumberedSlot, IEncounterTypeTile { public override int Generation => 4; public EncounterType TypeEncounter => ((EncounterArea4)Area).TypeEncounter; diff --git a/PKHeX.Core/Legality/Encounters/EncounterSlot/IEncounterTypeTile.cs b/PKHeX.Core/Legality/Encounters/EncounterSlot/IEncounterTypeTile.cs new file mode 100644 index 000000000..0ef556a60 --- /dev/null +++ b/PKHeX.Core/Legality/Encounters/EncounterSlot/IEncounterTypeTile.cs @@ -0,0 +1,16 @@ +namespace PKHeX.Core +{ + public interface IEncounterTypeTile + { + EncounterType TypeEncounter { get; } + } + + public static class EncounterTypeTileExtensions + { + /// + /// Gets if the resulting will still have a value depending on the current . + /// + /// Generation 6 no longer stores this value. + public static bool HasTypeEncounter(this IEncounterTypeTile _, int format) => format == 4 || format == 5; + } +} diff --git a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticTyped.cs b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticTyped.cs index 438bb2d76..a16c28fca 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticTyped.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterStatic/EncounterStaticTyped.cs @@ -3,7 +3,7 @@ namespace PKHeX.Core { - public sealed class EncounterStaticTyped : EncounterStatic4 + public sealed class EncounterStaticTyped : EncounterStatic4, IEncounterTypeTile { public bool Roaming { get; set; } @@ -33,7 +33,7 @@ protected override void SetMetData(PKM pk, int level, DateTime today) pk.MetDate = today; } - private int[] GetRoamLocations(int species, int type) + private static int[] GetRoamLocations(int species, int type) { switch (species) { diff --git a/PKHeX.Core/Legality/Encounters/Information/EncounterSuggestion.cs b/PKHeX.Core/Legality/Encounters/Information/EncounterSuggestion.cs index f28ef3831..fb6b995b5 100644 --- a/PKHeX.Core/Legality/Encounters/Information/EncounterSuggestion.cs +++ b/PKHeX.Core/Legality/Encounters/Information/EncounterSuggestion.cs @@ -241,5 +241,7 @@ public EncounterSuggestionData(PKM pkm, int met, int lvl) public int LevelMax { get; } public int GetSuggestedMetLevel(PKM pkm) => EncounterSuggestion.GetSuggestedMetLevel(pkm, LevelMin); + public int GetSuggestedEncounterType() => Encounter is IEncounterTypeTile t ? t.TypeEncounter.GetIndex() : 0; + public bool HasEncounterType(int format) => Encounter is IEncounterTypeTile t && t.HasTypeEncounter(format); } } diff --git a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs index b64fadba3..538036fa6 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs @@ -792,7 +792,10 @@ private bool SetSuggestedMetLocation(bool silent = false) minlvl = level; if (Entity.CurrentLevel >= minlvl && Entity.Met_Level == level && Entity.Met_Location == location) - return false; + { + if (!encounter.HasEncounterType(Entity.Format) || WinFormsUtil.GetIndex(CB_EncounterType) == encounter.GetSuggestedEncounterType()) + return false; + } if (minlvl < level) minlvl = level; @@ -813,6 +816,9 @@ private bool SetSuggestedMetLocation(bool silent = false) TB_MetLevel.Text = encounter.GetSuggestedMetLevel(Entity).ToString(); CB_MetLocation.SelectedValue = location; + if (encounter.HasEncounterType(Entity.Format)) + CB_EncounterType.SelectedValue = encounter.GetSuggestedEncounterType(); + if (Entity.Gen6 && Entity.WasEgg && ModifyPKM) Entity.SetHatchMemory6(); }