Refactoring

change some expressions for better perf/readability
This commit is contained in:
Kurt 2020-07-19 17:48:45 -05:00
parent 9c99e7ab7b
commit a6a3c6eaaa
10 changed files with 23 additions and 26 deletions

View file

@ -170,14 +170,14 @@ namespace PKHeX.Core
private static List<EncounterArea2> GetAreas2Fishing(byte[] data, ref int ofs) private static List<EncounterArea2> GetAreas2Fishing(byte[] data, ref int ofs)
{ {
var areas = new List<EncounterArea2>(); var areas = new List<EncounterArea2>();
var types = new[] { SlotType.Old_Rod, SlotType.Good_Rod, SlotType.Super_Rod };
while (ofs != 0x18C) while (ofs != 0x18C)
{ {
var old = GetSlots2Fishing(data, ref ofs, SlotType.Old_Rod);
var good = GetSlots2Fishing(data, ref ofs, SlotType.Good_Rod);
var super = GetSlots2Fishing(data, ref ofs, SlotType.Super_Rod);
areas.Add(new EncounterArea2 areas.Add(new EncounterArea2
{ {
Slots = GetSlots2Fishing(data, ref ofs, types[0]) Slots = ArrayUtil.ConcatAll(old, good, super),
.Concat(GetSlots2Fishing(data, ref ofs, types[1]))
.Concat(GetSlots2Fishing(data, ref ofs, types[2])).ToArray()
}); });
} }

View file

@ -1058,16 +1058,11 @@ namespace PKHeX.Core
#region Alt Slots #region Alt Slots
internal static readonly int[] SafariZoneLocation_4 =
{
52, 202
};
private static readonly EncounterArea4DPPt[] DPPt_Unown = private static readonly EncounterArea4DPPt[] DPPt_Unown =
{ {
new EncounterArea4DPPt { new EncounterArea4DPPt {
Location = 53, // Solaceon Ruins Location = 53, // Solaceon Ruins
Slots = new int[25].Select((_, i) => new EncounterSlot { Species = 201, LevelMin = 14, LevelMax = 30, Type = SlotType.Grass, Form = i+1 }).ToArray() // B->?, Unown A is loaded from encounters raw file Slots = Enumerable.Range(1, 25).Select(i => new EncounterSlot { Species = 201, LevelMin = 14, LevelMax = 30, Type = SlotType.Grass, Form = i }).ToArray() // B->?, Unown A is loaded from encounters raw file
}, },
}; };
@ -1488,7 +1483,7 @@ namespace PKHeX.Core
SlotsHGSS_BCC, SlotsHGSS_BCC,
new EncounterArea4HGSS { new EncounterArea4HGSS {
Location = 209, // Ruins of Alph Location = 209, // Ruins of Alph
Slots = new int[25].Select((_, i) => new EncounterSlot { Species = 201, LevelMin = 5, LevelMax = 5, Type = SlotType.Grass, Form = i+1 }).ToArray() // B->?, Unown A is loaded from encounters raw file Slots = Enumerable.Range(1, 25).Select((_, i) => new EncounterSlot { Species = 201, LevelMin = 5, LevelMax = 5, Type = SlotType.Grass, Form = i }).ToArray() // B->?, Unown A is loaded from encounters raw file
}, },
SlotsHGSS_SafariZone, SlotsHGSS_SafariZone,
//Some edge cases //Some edge cases

View file

@ -9,13 +9,13 @@ namespace PKHeX.Core
/// </summary> /// </summary>
public sealed class ValidEncounterMoves public sealed class ValidEncounterMoves
{ {
public IReadOnlyList<int>[] LevelUpMoves { get; } = Empty; public IReadOnlyList<int>[] LevelUpMoves { get; }
public IReadOnlyList<int>[] TMHMMoves { get; } = Empty; public IReadOnlyList<int>[] TMHMMoves { get; } = Empty;
public IReadOnlyList<int>[] TutorMoves { get; } = Empty; public IReadOnlyList<int>[] TutorMoves { get; } = Empty;
public int[] Relearn = Array.Empty<int>(); public int[] Relearn = Array.Empty<int>();
private const int EmptyCount = PKX.Generation + 1; // one for each generation index (and 0th) private const int EmptyCount = PKX.Generation + 1; // one for each generation index (and 0th)
private static readonly List<int>[] Empty = new int[EmptyCount].Select(_ => new List<int>()).ToArray(); private static readonly IReadOnlyList<int>[] Empty = Enumerable.Repeat((IReadOnlyList<int>)new List<int>(), EmptyCount).ToArray();
public ValidEncounterMoves(PKM pkm, LevelUpRestriction restrict, IEncounterable encounter) public ValidEncounterMoves(PKM pkm, LevelUpRestriction restrict, IEncounterable encounter)
{ {

View file

@ -15,7 +15,7 @@ namespace PKHeX.Core
public static CheckResult[] VerifyRelearn(PKM pkm, LegalInfo info) public static CheckResult[] VerifyRelearn(PKM pkm, LegalInfo info)
{ {
if (info.Generation < 6 || pkm is IBattleVersion v && v.BattleVersion != 0) if (info.Generation < 6 || (pkm is IBattleVersion v && v.BattleVersion != 0))
return VerifyRelearnNone(pkm, info); return VerifyRelearnNone(pkm, info);
return info.EncounterMatch switch return info.EncounterMatch switch

View file

@ -884,7 +884,7 @@ namespace PKHeX.Core
// TypeEncounter TallGrass discard any cave or city // TypeEncounter TallGrass discard any cave or city
var ver = (GameVersion)pkm.Version; var ver = (GameVersion)pkm.Version;
var IsDPPt = ver == GameVersion.D || ver == GameVersion.P || ver == GameVersion.Pt; var IsDPPt = ver == GameVersion.D || ver == GameVersion.P || ver == GameVersion.Pt;
return pkm.IsShiny && IsDPPt && sl.TypeEncounter == EncounterType.TallGrass && !Encounters4.SafariZoneLocation_4.Contains(sl.Location); return pkm.IsShiny && IsDPPt && sl.TypeEncounter == EncounterType.TallGrass && !Locations.IsSafariZoneLocation4(sl.Location);
case PGT _: // manaphy case PGT _: // manaphy
return IsG4ManaphyPIDValid(val, pkm); return IsG4ManaphyPIDValid(val, pkm);
case PCD d when d.Gift.PK.PID != 1: case PCD d when d.Gift.PK.PID != 1:

View file

@ -97,5 +97,7 @@
public static bool IsPtHGSSLocation(int location) => 111 < location && location < 2000; public static bool IsPtHGSSLocation(int location) => 111 < location && location < 2000;
public static bool IsPtHGSSLocationEgg(int location) => 2010 < location && location < 3000; public static bool IsPtHGSSLocationEgg(int location) => 2010 < location && location < 3000;
public static bool IsEventLocation5(int location) => 40000 < location && location < 50000; public static bool IsEventLocation5(int location) => 40000 < location && location < 50000;
public static bool IsSafariZoneLocation4(int loc) => loc == 52 || loc == 202;
} }
} }

View file

@ -388,7 +388,7 @@ namespace PKHeX.Core
var bv = pk8.BattleVersion; var bv = pk8.BattleVersion;
if (bv != 0) if (bv != 0)
{ {
if (bv != (int)GameVersion.SW && bv != (int)GameVersion.SH || pk8.SWSH) if ((bv != (int)GameVersion.SW && bv != (int)GameVersion.SH) || pk8.SWSH)
data.AddLine(GetInvalid(LStatBattleVersionInvalid)); data.AddLine(GetInvalid(LStatBattleVersionInvalid));
} }

View file

@ -192,12 +192,12 @@ namespace PKHeX.Core
SeenFlagOffsets = SeenFlagOffsets.Where(z => z >= 0).ToArray(); SeenFlagOffsets = SeenFlagOffsets.Where(z => z >= 0).ToArray();
} }
private void LoadBlocks(out int[] blockOrder, out int[] blockOfs) private void LoadBlocks(out short[] blockOrder, out int[] blockOfs)
{ {
int[] o1 = GetBlockOrder(0); var o1 = GetBlockOrder(0);
if (Data.Length > SaveUtil.SIZE_G3RAWHALF) if (Data.Length > SaveUtil.SIZE_G3RAWHALF)
{ {
int[] o2 = GetBlockOrder(0xE000); var o2 = GetBlockOrder(0xE000);
ActiveSAV = GetActiveSaveIndex(o1, o2); ActiveSAV = GetActiveSaveIndex(o1, o2);
blockOrder = ActiveSAV == 0 ? o1 : o2; blockOrder = ActiveSAV == 0 ? o1 : o2;
} }
@ -215,15 +215,15 @@ namespace PKHeX.Core
} }
} }
private int[] GetBlockOrder(int ofs) private short[] GetBlockOrder(int ofs)
{ {
int[] order = new int[BLOCK_COUNT]; short[] order = new short[BLOCK_COUNT];
for (int i = 0; i < BLOCK_COUNT; i++) for (int i = 0; i < BLOCK_COUNT; i++)
order[i] = BitConverter.ToInt16(Data, ofs + (i * SIZE_BLOCK) + 0xFF4); order[i] = BitConverter.ToInt16(Data, ofs + (i * SIZE_BLOCK) + 0xFF4);
return order; return order;
} }
private int GetActiveSaveIndex(int[] BlockOrder1, int[] BlockOrder2) private int GetActiveSaveIndex(short[] BlockOrder1, short[] BlockOrder2)
{ {
int zeroBlock1 = Array.IndexOf(BlockOrder1, 0); int zeroBlock1 = Array.IndexOf(BlockOrder1, 0);
int zeroBlock2 = Array.IndexOf(BlockOrder2, 0); int zeroBlock2 = Array.IndexOf(BlockOrder2, 0);
@ -276,7 +276,7 @@ namespace PKHeX.Core
private int ActiveSAV; private int ActiveSAV;
private int ABO => ActiveSAV*SIZE_BLOCK*0xE; private int ABO => ActiveSAV*SIZE_BLOCK*0xE;
private readonly int[] BlockOrder; private readonly short[] BlockOrder;
private readonly int[] BlockOfs; private readonly int[] BlockOfs;
public int GetBlockOffset(int block) => BlockOfs[block]; public int GetBlockOffset(int block) => BlockOfs[block];

View file

@ -452,9 +452,9 @@ namespace PKHeX.Core
return false; return false;
} }
private int[] MatchMysteryGifts(DataMysteryGift[] value) private byte[] MatchMysteryGifts(DataMysteryGift[] value)
{ {
int[] cardMatch = new int[8]; byte[] cardMatch = new byte[8];
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {
if (!(value[i] is PGT pgt)) if (!(value[i] is PGT pgt))

View file

@ -149,7 +149,7 @@ namespace PKHeX.WinForms
int tabcount = lines[0].Count(c => c == '\t'); int tabcount = lines[0].Count(c => c == '\t');
newlines[0] = lines[0].Replace('\t', '|'); newlines[0] = lines[0].Replace('\t', '|');
newlines[1] = string.Join(":--:", new int[tabcount + 2].Select(_ => '|')); // 2 pipes for each end newlines[1] = string.Join(":--:", Enumerable.Repeat('|', tabcount + 2)); // 2 pipes for each end
for (int i = 1; i < lines.Length; i++) for (int i = 1; i < lines.Length; i++)
newlines[i + 1] = lines[i].Replace('\t', '|'); newlines[i + 1] = lines[i].Replace('\t', '|');
return newlines; return newlines;