More records/sealing

This commit is contained in:
Kurt 2021-12-05 23:54:59 -08:00
parent ffebc74b90
commit cacd6e9965
28 changed files with 47 additions and 115 deletions

View file

@ -4,7 +4,7 @@ namespace PKHeX.Core
{
/// <inheritdoc cref="ISuggestModification"/>
/// <typeparam name="T">Specific (or not) type</typeparam>
public class TypeSuggestion<T> : ISuggestModification where T : PKM
public sealed class TypeSuggestion<T> : ISuggestModification where T : PKM
{
public readonly string Keyword;
public readonly Action<T, string> Action;
@ -35,4 +35,4 @@ namespace PKHeX.Core
return ModifyResult.Modified;
}
}
}
}

View file

@ -1,11 +1,9 @@
using System;
namespace PKHeX.Core
{
/// <summary>
/// Data representing info for an individual slot.
/// </summary>
public interface ISlotInfo : IEquatable<ISlotInfo>
public interface ISlotInfo
{
/// <summary>
/// Indicates the type of format the slot originates. Useful for legality purposes.

View file

@ -5,7 +5,7 @@ namespace PKHeX.Core
/// <summary>
/// Contains slot data and metadata indicating where the <see cref="PKM"/> originated from.
/// </summary>
public class SlotCache : IComparable<SlotCache>
public sealed class SlotCache : IComparable<SlotCache>
{
/// <summary>
/// Information regarding how the <see cref="Entity"/> was obtained.

View file

@ -3,20 +3,12 @@ namespace PKHeX.Core
/// <summary>
/// Box Data <see cref="ISlotInfo"/>
/// </summary>
public class SlotInfoBox : ISlotInfo
public sealed record SlotInfoBox(int Box, int Slot) : ISlotInfo
{
public int Box { get; }
public int Slot { get; }
public SlotOrigin Origin => SlotOrigin.Box;
public bool CanWriteTo(SaveFile sav) => sav.HasBox && !sav.IsSlotLocked(Box, Slot);
public WriteBlockedMessage CanWriteTo(SaveFile sav, PKM pkm) => WriteBlockedMessage.None;
public SlotInfoBox(int box, int slot)
{
Box = box;
Slot = slot;
}
public bool WriteTo(SaveFile sav, PKM pkm, PKMImportSetting setting = PKMImportSetting.UseDefault)
{
sav.SetBoxSlotAtIndex(pkm, Box, Slot, setting, setting);
@ -24,11 +16,5 @@ namespace PKHeX.Core
}
public PKM Read(SaveFile sav) => sav.GetBoxSlotAtIndex(Box, Slot);
private bool Equals(SlotInfoBox other) => Box == other.Box && Slot == other.Slot;
public bool Equals(ISlotInfo other) => other is SlotInfoBox b && Equals(b);
public override bool Equals(object obj) => obj is SlotInfoBox b && Equals(b);
public override int GetHashCode() => (Box * 397) ^ Slot;
}
}

View file

@ -1,14 +1,10 @@
namespace PKHeX.Core
{
public sealed class SlotInfoFile : ISlotInfo
public sealed record SlotInfoFile(string Path) : ISlotInfo
{
public readonly string Path;
public SlotOrigin Origin => SlotOrigin.Party;
public int Slot => 0;
public SlotInfoFile(string path) => Path = path;
public bool Equals(ISlotInfo other) => other is SlotInfoFile f && f.Path == Path;
public bool CanWriteTo(SaveFile sav) => false;
public WriteBlockedMessage CanWriteTo(SaveFile sav, PKM pkm) => WriteBlockedMessage.InvalidDestination;
public bool WriteTo(SaveFile sav, PKM pkm, PKMImportSetting setting = PKMImportSetting.UseDefault) => false;

View file

@ -3,38 +3,21 @@ namespace PKHeX.Core
/// <summary>
/// Miscellaneous origination <see cref="ISlotInfo"/>
/// </summary>
public sealed class SlotInfoMisc : ISlotInfo
public sealed record SlotInfoMisc(byte[] Data, int Slot, int Offset, bool PartyFormat = false) : ISlotInfo
{
public int Slot { get; }
public bool PartyFormat { get; }
public int Offset { get; }
public SlotOrigin Origin => PartyFormat ? SlotOrigin.Party : SlotOrigin.Box;
public bool CanWriteTo(SaveFile sav) => false;
public WriteBlockedMessage CanWriteTo(SaveFile sav, PKM pkm) => WriteBlockedMessage.InvalidDestination;
public StorageSlotType Type { get; init; }
private readonly byte[] Data; // buffer to r/w
public SlotInfoMisc(SaveFile sav, int slot, int offset, bool party = false) : this(GetBuffer(sav), slot, offset, party) { }
public SlotInfoMisc(SaveFile sav, int slot, int offset, bool party = false)
private static byte[] GetBuffer(SaveFile sav) => sav switch
{
Slot = slot;
Offset = offset;
PartyFormat = party;
Data = sav switch
{
SAV4 s => s.General,
SAV3 s3 => s3.Large,
_ => sav.Data,
};
}
public SlotInfoMisc(byte[] data, int slot, int offset, bool party = false)
{
Slot = slot;
Offset = offset;
PartyFormat = party;
Data = data;
}
SAV4 s => s.General,
SAV3 s3 => s3.Large,
_ => sav.Data,
};
public bool WriteTo(SaveFile sav, PKM pkm, PKMImportSetting setting = PKMImportSetting.UseDefault)
{
@ -49,10 +32,5 @@ namespace PKHeX.Core
{
return PartyFormat ? sav.GetPartySlot(Data, Offset) : sav.GetStoredSlot(Data, Offset);
}
private bool Equals(SlotInfoMisc other) => Offset == other.Offset && Data == other.Data;
public bool Equals(ISlotInfo other) => other is SlotInfoMisc p && Equals(p);
public override bool Equals(object obj) => obj is SlotInfoMisc p && Equals(p);
public override int GetHashCode() => Offset;
}
}

View file

@ -5,9 +5,9 @@ namespace PKHeX.Core
/// <summary>
/// Party Data <see cref="ISlotInfo"/>
/// </summary>
public sealed class SlotInfoParty : ISlotInfo
public sealed record SlotInfoParty(int Slot) : ISlotInfo
{
public int Slot { get; private set; }
public int Slot { get; private set; } = Slot;
public SlotOrigin Origin => SlotOrigin.Party;
public bool CanWriteTo(SaveFile sav) => sav.HasParty;
@ -15,8 +15,6 @@ namespace PKHeX.Core
? WriteBlockedMessage.InvalidPartyConfiguration
: WriteBlockedMessage.None;
public SlotInfoParty(int slot) => Slot = slot;
public bool WriteTo(SaveFile sav, PKM pkm, PKMImportSetting setting = PKMImportSetting.UseDefault)
{
if (pkm.Species == 0)
@ -31,10 +29,5 @@ namespace PKHeX.Core
}
public PKM Read(SaveFile sav) => sav.GetPartySlotAtIndex(Slot);
private bool Equals(SlotInfoParty other) => Slot == other.Slot;
public bool Equals(ISlotInfo other) => other is SlotInfoParty p && Equals(p);
public override bool Equals(object obj) => obj is SlotInfoParty p && Equals(p);
public override int GetHashCode() => Slot;
}
}

View file

@ -200,17 +200,7 @@ namespace PKHeX.Core
}
}
private class CombinedReference
{
public readonly SlotCache Slot;
public readonly LegalityAnalysis Analysis;
public CombinedReference(SlotCache slot, LegalityAnalysis analysis)
{
Slot = slot;
Analysis = analysis;
}
}
private sealed record CombinedReference(SlotCache Slot, LegalityAnalysis Analysis);
private void CheckIDReuse()
{

View file

@ -7,7 +7,7 @@ namespace PKHeX.Core
/// <summary>
/// Default formatter for Legality Result displays.
/// </summary>
public class BaseLegalityFormatter : ILegalityFormatter
public sealed class BaseLegalityFormatter : ILegalityFormatter
{
public string GetReport(LegalityAnalysis l)
{

View file

@ -10,7 +10,7 @@ namespace PKHeX.Core
/// <remarks>
/// Serves as the main object that is accessed for stat data in a particular generation/game format.
/// </remarks>
public class PersonalTable
public sealed class PersonalTable
{
/// <summary>
/// Personal Table used in <see cref="GameVersion.BDSP"/>.

View file

@ -7,7 +7,7 @@ namespace PKHeX.Core
/// <summary>
/// Generation 8 <see cref="SaveFile"/> object for <see cref="GameVersion.BDSP"/> games.
/// </summary>
public class SAV8BS : SaveFile, ISaveFileRevision, ITrainerStatRecord
public sealed class SAV8BS : SaveFile, ISaveFileRevision, ITrainerStatRecord
{
// Save Data Attributes
protected internal override string ShortSummary => $"{OT} ({Version}) - {System.LastSavedTime}";
@ -135,7 +135,7 @@ namespace PKHeX.Core
return base.GetFinalData();
}
protected void ReloadBattleTeams()
private void ReloadBattleTeams()
{
if (!State.Exportable)
BoxLayout.ClearBattleTeams();

View file

@ -6,7 +6,7 @@ namespace PKHeX.Core
/// <summary>
/// Tracks information about where the <see cref="SAV"/> originated from, and provides logic for saving to a file.
/// </summary>
public class SaveFileMetadata
public sealed class SaveFileMetadata
{
private readonly SaveFile SAV;

View file

@ -3,7 +3,7 @@
/// <summary>
/// Tracks information about modifications made to a <see cref="SaveFile"/>
/// </summary>
public class SaveFileState
public sealed class SaveFileState
{
/// <summary>
/// Mutable value tracking if the save file has been changed. This is set manually by modifications, and not for all modifications.

View file

@ -5,7 +5,7 @@ namespace PKHeX.Core
/// <summary>
/// Generation 6 Secret Base Decoration Good Inventory stock for a given good-index.
/// </summary>
public class SecretBase6GoodStock
public sealed class SecretBase6GoodStock
{
public const int SIZE = 4;

View file

@ -2,7 +2,7 @@
namespace PKHeX.Core
{
public class SecretBase6PKM
public sealed class SecretBase6PKM
{
public const int SIZE = 0x34;
public readonly byte[] Data;

View file

@ -143,7 +143,7 @@ namespace PKHeX.Core
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class HoneyTree8b
public sealed class HoneyTree8b
{
public const int SIZE = 0xC;

View file

@ -40,7 +40,7 @@ namespace PKHeX.Core
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class FieldObject8b
public sealed class FieldObject8b
{
public const int SIZE = 4 * 17;

View file

@ -153,7 +153,7 @@ namespace PKHeX.Core
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class RecvData8b
public sealed class RecvData8b
{
public const int SIZE = 0xE0;
// private const int ItemCount = 7;
@ -237,7 +237,7 @@ namespace PKHeX.Core
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class OneDay8b
public sealed class OneDay8b
{
public const int SIZE = 0x10;

View file

@ -90,7 +90,7 @@ namespace PKHeX.Core
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public class AffixSealData8b
public sealed class AffixSealData8b
{
public const int SIZE = 8; // u16 id, s16 x,y,z

View file

@ -1,18 +1,9 @@
namespace PKHeX.Core
namespace PKHeX.Core;
public sealed record SlotGroup(string GroupName, PKM[] Slots)
{
public class SlotGroup
{
public readonly string GroupName;
public readonly PKM[] Slots;
#if DEBUG
public override string ToString() => $"{GroupName}: {Slots.Length} {Slots.GetType().Name}";
#endif
public SlotGroup(string name, PKM[] slots)
{
GroupName = name;
Slots = slots;
}
}
#if DEBUG
public override string ToString() => $"{GroupName}: {Slots.Length} {Slots.GetType().Name}";
#endif
}

View file

@ -5,7 +5,7 @@ namespace PKHeX.Core
/// <summary>
/// Logic for recognizing .duc save files dumped via an ARDS.
/// </summary>
public class SaveHandlerARDS : ISaveHandler
public sealed class SaveHandlerARDS : ISaveHandler
{
private const int sizeHeader = 0xA4;
private const int ExpectedSize = SaveUtil.SIZE_G4RAW + sizeHeader; // 0x800A4

View file

@ -6,7 +6,7 @@ namespace PKHeX.Core
/// <summary>
/// Logic for recognizing .dsv save files from DeSmuME.
/// </summary>
public class SaveHandlerDeSmuME : ISaveHandler
public sealed class SaveHandlerDeSmuME : ISaveHandler
{
private const int sizeFooter = 0x7A;
private const int ExpectedSize = SaveUtil.SIZE_G4RAW + sizeFooter;

View file

@ -8,7 +8,7 @@ namespace PKHeX.Core
/// <summary>
/// Logic for recognizing .gci save files.
/// </summary>
public class SaveHandlerGCI : ISaveHandler
public sealed class SaveHandlerGCI : ISaveHandler
{
private const int headerSize = 0x40;
private const int SIZE_G3BOXGCI = headerSize + SaveUtil.SIZE_G3BOX; // GCI data

View file

@ -22,7 +22,7 @@ namespace PKHeX.Drawing.Misc.Properties {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
public sealed class Resources {
private static global::System.Resources.ResourceManager resourceMan;

View file

@ -22,7 +22,7 @@ namespace PKHeX.Drawing.PokeSprite.Properties {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
public sealed class Resources {
private static global::System.Resources.ResourceManager resourceMan;

View file

@ -66,7 +66,7 @@ namespace PKHeX.WinForms.Controls
FlickerInterface();
}
private class ValidationRequiredSet
private sealed class ValidationRequiredSet
{
private readonly Control[] Controls;
private readonly Func<PKM, bool> ShouldCheck;

View file

@ -220,7 +220,7 @@ namespace PKHeX.WinForms
}
[Serializable]
public class AdvancedSettings
public sealed class AdvancedSettings
{
[LocalizedDescription("Allow PKM file conversion paths that are not possible via official methods. Individual properties will be copied sequentially.")]
public bool AllowIncompatibleConversion { get; set; }
@ -265,14 +265,14 @@ namespace PKHeX.WinForms
}
[Serializable]
public class EntityEditorSettings
public sealed class EntityEditorSettings
{
[LocalizedDescription("When changing the Hidden Power type, automatically maximize the IVs to ensure the highest Base Power result. Otherwise, keep the IVs as close as possible to the original.")]
public bool HiddenPowerOnChangeMaxPower { get; set; } = true;
}
[Serializable]
public class EncounterDatabaseSettings
public sealed class EncounterDatabaseSettings
{
[LocalizedDescription("Skips searching if the user forgot to enter Species / Move(s) into the search criteria.")]
public bool ReturnNoneIfEmptySearch { get; set; } = true;
@ -288,7 +288,7 @@ namespace PKHeX.WinForms
}
[Serializable]
public class MysteryGiftDatabaseSettings
public sealed class MysteryGiftDatabaseSettings
{
[LocalizedDescription("Hides gifts if the currently loaded save file cannot (indirectly) receive them.")]
public bool FilterUnavailableSpecies { get; set; } = true;

View file

@ -22,7 +22,7 @@ namespace PKHeX.WinForms.Properties {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
public sealed class Resources {
private static global::System.Resources.ResourceManager resourceMan;