Remove optional gameversion for enc generators

Simplifies some of the logic a little.
This commit is contained in:
Kurt 2022-05-04 22:28:39 -07:00
parent 824e868efe
commit ea87140aea
6 changed files with 28 additions and 59 deletions

View File

@ -43,7 +43,7 @@ public abstract record EncounterStatic(GameVersion Version) : IEncounterable, IM
private const string _name = "Static Encounter";
public string Name => _name;
public string LongName => Version == GameVersion.Any ? _name : $"{_name} ({Version})";
public string LongName => $"{_name} ({Version})";
public bool IsShiny => Shiny.IsShiny();
public bool IsRandomUnspecificForm => Form >= FormDynamic;

View File

@ -110,7 +110,7 @@ private static IEnumerable<IEncounterable> GenerateRawEncounters3CXD(PKM pkm)
}
// Encounter Slots
foreach (var z in GetValidWildEncounters34(pkm, chain))
foreach (var z in GetValidWildEncounters(pkm, chain))
{
var match = z.GetMatchRating(pkm);
if (match == PartialMatch)
@ -167,7 +167,7 @@ private static IEnumerable<IEncounterable> GenerateRawEncounters3(PKM pkm, Legal
// Encounter Slots
var slots = FrameFinder.GetFrames(info.PIDIV, pkm).ToList();
foreach (var z in GetValidWildEncounters34(pkm, chain))
foreach (var z in GetValidWildEncounters(pkm, chain))
{
var match = z.GetMatchRating(pkm);
if (match == PartialMatch)

View File

@ -74,7 +74,7 @@ private static IEnumerable<IEncounterable> GenerateRawEncounters4(PKM pkm, Legal
}
var slots = FrameFinder.GetFrames(info.PIDIV, pkm).ToList();
foreach (var slot in GetValidWildEncounters34(pkm, chain))
foreach (var slot in GetValidWildEncounters(pkm, chain))
{
var z = (EncounterSlot4)slot;
var match = z.GetMatchRating(pkm);

View File

@ -23,7 +23,7 @@ namespace PKHeX.Core
{
public static class EncounterSlotGenerator
{
public static IEnumerable<EncounterSlot> GetPossible(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource = Any)
public static IEnumerable<EncounterSlot> GetPossible(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource)
{
var possibleAreas = GetAreasByGame(pkm, gameSource);
return possibleAreas.SelectMany(z => z.GetSpecies(chain));
@ -40,7 +40,7 @@ public static IEnumerable<EncounterSlot> GetPossible(PKM pkm, IReadOnlyList<EvoC
SI => SlotsSV,
C => SlotsC,
_ => GetEncounterSlots(pkm, gameSource),
_ => GetEncounterTable(pkm, gameSource),
};
private static IEnumerable<EncounterSlot> GetRawEncounterSlots(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource)
@ -57,46 +57,20 @@ private static IEnumerable<EncounterSlot> GetRawEncounterSlots(PKM pkm, IReadOnl
}
}
public static IEnumerable<EncounterSlot> GetValidWildEncounters34(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource = Any)
public static IEnumerable<EncounterSlot> GetValidWildEncounters12(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource)
{
if (gameSource == Any)
gameSource = (GameVersion)pkm.Version;
var slots = GetRawEncounterSlots(pkm, chain, gameSource);
return slots; // defer deferrals to the method consuming this collection
}
public static IEnumerable<EncounterSlot> GetValidWildEncounters12(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource = Any)
{
if (gameSource == Any)
gameSource = (GameVersion)pkm.Version;
return GetRawEncounterSlots(pkm, chain, gameSource);
}
public static IEnumerable<EncounterSlot> GetValidWildEncounters(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource = Any)
public static IEnumerable<EncounterSlot> GetValidWildEncounters(PKM pkm, IReadOnlyList<EvoCriteria> chain)
{
if (gameSource == Any)
gameSource = (GameVersion)pkm.Version;
var gameSource = (GameVersion)pkm.Version;
return GetRawEncounterSlots(pkm, chain, gameSource);
}
public static IEnumerable<EncounterArea> GetEncounterSlots(PKM pkm, GameVersion gameSource = Any)
private static IEnumerable<EncounterArea> GetEncounterAreas(PKM pkm, GameVersion gameSource)
{
if (gameSource == Any)
gameSource = (GameVersion)pkm.Version;
return GetEncounterTable(pkm, gameSource);
}
private static IEnumerable<EncounterArea> GetEncounterAreas(PKM pkm, GameVersion gameSource = Any)
{
if (gameSource == Any)
gameSource = (GameVersion)pkm.Version;
var slots = GetEncounterSlots(pkm, gameSource: gameSource);
var slots = GetEncounterTable(pkm, gameSource);
bool noMet = !pkm.HasOriginalMetLocation || (pkm.Format == 2 && gameSource != C);
if (noMet)
return slots;
@ -106,7 +80,7 @@ private static IEnumerable<EncounterArea> GetEncounterAreas(PKM pkm, GameVersion
internal static EncounterSlot? GetCaptureLocation(PKM pkm, IReadOnlyList<EvoCriteria> chain)
{
return GetPossible(pkm, chain)
return GetPossible(pkm, chain, (GameVersion)pkm.Version)
.OrderBy(z => !chain.Any(s => s.Species == z.Species && s.Form == z.Form))
.ThenBy(z => z.LevelMin)
.FirstOrDefault();
@ -157,7 +131,7 @@ private static IEnumerable<EncounterArea> GetEncounterAreas(PKM pkm, GameVersion
_ => Array.Empty<EncounterArea>(),
};
private static IEnumerable<EncounterArea> GetEncounterTableGSC(PKM pkm)
private static EncounterArea[] GetEncounterTableGSC(PKM pkm)
{
if (!ParseSettings.AllowGen2Crystal(pkm))
return SlotsGS;

View File

@ -22,11 +22,8 @@ namespace PKHeX.Core
{
public static class EncounterStaticGenerator
{
public static IEnumerable<EncounterStatic> GetPossible(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource = Any)
public static IEnumerable<EncounterStatic> GetPossible(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource)
{
if (gameSource == Any)
gameSource = (GameVersion)pkm.Version;
var table = gameSource switch
{
RD or GN or BU or YW => StaticRBY.Where(z => z.Version.Contains(gameSource)),
@ -51,16 +48,15 @@ static IEnumerable<EncounterStatic> GetEvents(GameVersion g)
return table.Where(e => chain.Any(d => d.Species == e.Species));
}
public static IEnumerable<EncounterStatic> GetValidStaticEncounter(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource = Any)
public static IEnumerable<EncounterStatic> GetValidStaticEncounter(PKM pkm, IReadOnlyList<EvoCriteria> chain)
{
if (gameSource == Any)
gameSource = (GameVersion)pkm.Version;
return GetValidStaticEncounter(pkm, chain, (GameVersion)pkm.Version);
}
public static IEnumerable<EncounterStatic> GetValidStaticEncounter(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource)
{
var table = GetEncounterStaticTable(pkm, gameSource);
var poss = table.Where(e => chain.Any(d => d.Species == e.Species));
// Back Check against pkm
return GetMatchingStaticEncounters(pkm, poss, chain);
return GetMatchingStaticEncounters(pkm, table, chain);
}
public static IEnumerable<EncounterStatic> GetValidGBGifts(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion gameSource)
@ -142,7 +138,7 @@ private static int GetVCSpecies(IReadOnlyList<EvoCriteria> chain, PKM pkm, int m
case 2:
return EncounterStatic7.GetVC2(MaxSpeciesID_2, (byte)pkm.Met_Level);
default:
return GetPossible(pkm, chain)
return GetPossible(pkm, chain, (GameVersion)pkm.Version)
.OrderBy(z => !chain.Any(s => s.Species == z.Species && s.Form == z.Form))
.ThenBy(z => z.LevelMin)
.FirstOrDefault();

View File

@ -42,22 +42,21 @@ public static IEnumerable<EncounterTradeGB> GetValidEncounterTradesVC(PKM pkm, I
}
}
public static IEnumerable<EncounterTrade> GetValidEncounterTrades(PKM pkm, IReadOnlyList<EvoCriteria> chain, GameVersion game = Any)
public static IEnumerable<EncounterTrade> GetValidEncounterTrades(PKM pkm, IReadOnlyList<EvoCriteria> chain)
{
if (game == Any)
game = (GameVersion)pkm.Version;
// Pre-filter for some language scenarios
int lang = pkm.Language;
if (lang == (int)LanguageID.UNUSED_6) // invalid language
return Array.Empty<EncounterTrade>();
if (lang == (int)LanguageID.Hacked && !EncounterTrade5PID.IsValidMissingLanguage(pkm)) // Japanese trades in BW have no language ID
return Array.Empty<EncounterTrade>();
var poss = GetPossible(chain, game);
return GetValidEncounterTrades(pkm, chain, poss);
var game = (GameVersion)pkm.Version;
var table = GetTable(game);
return GetValidEncounterTrades(pkm, chain, table);
}
private static IEnumerable<EncounterTrade> GetValidEncounterTrades(PKM pkm, IReadOnlyList<EvoCriteria> chain, IEnumerable<EncounterTrade> poss)
private static IEnumerable<EncounterTrade> GetValidEncounterTrades(PKM pkm, IReadOnlyList<EvoCriteria> chain, EncounterTrade[] poss)
{
foreach (var p in poss)
{
@ -81,7 +80,7 @@ private static IEnumerable<EncounterTradeGB> GetTableVC(GameVersion game)
return Array.Empty<EncounterTradeGB>();
}
private static IEnumerable<EncounterTrade> GetTable(GameVersion game) => game switch
private static EncounterTrade[] GetTable(GameVersion game) => game switch
{
R or S or E => Encounters3.TradeGift_RSE,
FR or LG => Encounters3.TradeGift_FRLG,