Don't bother cloning sav for Gen1-3 dex edits

No need to clone the save file and allocate 2 bool arrays. Yay old code, why not do it better now? :)
This commit is contained in:
Kurt
2024-05-15 23:50:25 -05:00
parent 99857540ae
commit 4d6ce53bce
2 changed files with 44 additions and 50 deletions

View File

@@ -124,7 +124,6 @@ private void InitializeComponent()
CLB_Caught.Name = "CLB_Caught";
CLB_Caught.Size = new System.Drawing.Size(139, 220);
CLB_Caught.TabIndex = 12;
CLB_Caught.ItemCheck += CLB_Caught_ItemCheck;
//
// Label_Seen
//
@@ -144,7 +143,6 @@ private void InitializeComponent()
CLB_Seen.Name = "CLB_Seen";
CLB_Seen.Size = new System.Drawing.Size(139, 220);
CLB_Seen.TabIndex = 10;
CLB_Seen.ItemCheck += CLB_Seen_ItemCheck;
//
// SAV_SimplePokedex
//
@@ -160,9 +158,12 @@ private void InitializeComponent()
Controls.Add(CLB_Caught);
Controls.Add(Label_Seen);
Controls.Add(CLB_Seen);
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
Icon = Properties.Resources.Icon;
Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
MaximizeBox = false;
MaximumSize = new System.Drawing.Size(347, 427);
MinimizeBox = false;
MinimumSize = new System.Drawing.Size(347, 427);
Name = "SAV_SimplePokedex";
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;

View File

@@ -6,87 +6,80 @@ namespace PKHeX.WinForms;
public partial class SAV_SimplePokedex : Form
{
private readonly SaveFile Origin;
private readonly SaveFile SAV;
private readonly int MaxSpeciesID;
public SAV_SimplePokedex(SaveFile sav)
{
InitializeComponent();
WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
SAV = (Origin = sav).Clone();
seen = new bool[SAV.MaxSpeciesID];
caught = new bool[SAV.MaxSpeciesID];
SAV = sav;
var count = MaxSpeciesID = SAV.MaxSpeciesID;
var speciesNames = GameInfo.Strings.specieslist;
for (int i = 0; i < seen.Length; i++)
{
ushort species = (ushort)(i + 1);
seen[i] = SAV.GetSeen(species);
caught[i] = SAV.GetCaught(species);
CLB_Seen.Items.Add(speciesNames[species]);
CLB_Caught.Items.Add(speciesNames[species]);
CLB_Seen.SetItemChecked(i, seen[i]);
CLB_Caught.SetItemChecked(i, caught[i]);
}
initialized = true;
var speciesNames = GameInfo.Strings.specieslist.AsSpan(1, count);
AddAllSpecies(speciesNames);
LoadAllFlags(SAV, count);
}
private readonly bool[] seen;
private readonly bool[] caught;
private readonly bool initialized;
private void AddAllSpecies(ReadOnlySpan<string> speciesNames)
{
for (int i = 0; i < speciesNames.Length; i++)
{
CLB_Seen.Items.Add(speciesNames[i]);
CLB_Caught.Items.Add(speciesNames[i]);
}
}
private void LoadAllFlags(SaveFile sav, int count)
{
for (int i = 0; i < count; i++)
{
ushort species = (ushort)(i + 1);
CLB_Seen.SetItemChecked(i, sav.GetSeen(species));
CLB_Caught.SetItemChecked(i, sav.GetCaught(species));
}
}
private void SaveAllFlags(SaveFile sav, int count)
{
for (int i = 0; i < count; i++)
{
ushort species = (ushort)(i + 1);
sav.SetSeen(species, CLB_Seen.GetItemChecked(i));
sav.SetCaught(species, CLB_Caught.GetItemChecked(i));
}
}
private void B_Save_Click(object sender, EventArgs e)
{
for (int i = 0; i < seen.Length; i++)
{
ushort species = (ushort)(i + 1);
SAV.SetSeen(species, seen[i]);
SAV.SetCaught(species, caught[i]);
}
Origin.CopyChangesFrom(SAV);
SaveAllFlags(SAV, MaxSpeciesID);
SAV.State.Edited = true;
Close();
}
private void B_Cancel_Click(object sender, EventArgs e)
{
Close();
}
private void B_Cancel_Click(object sender, EventArgs e) => Close();
private void B_SeenAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < SAV.MaxSpeciesID; i++)
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Seen.SetItemChecked(i, true);
}
private void B_SeenNone_Click(object sender, EventArgs e)
{
for (int i = 0; i < SAV.MaxSpeciesID; i++)
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Seen.SetItemChecked(i, false);
}
private void B_CaughtAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < SAV.MaxSpeciesID; i++)
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Caught.SetItemChecked(i, true);
}
private void B_CaughtNone_Click(object sender, EventArgs e)
{
for (int i = 0; i < SAV.MaxSpeciesID; i++)
for (int i = 0; i < MaxSpeciesID; i++)
CLB_Caught.SetItemChecked(i, false);
}
private void CLB_Seen_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (!initialized)
return;
seen[e.Index] = e.NewValue == CheckState.Checked;
}
private void CLB_Caught_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (!initialized)
return;
caught[e.Index] = e.NewValue == CheckState.Checked;
}
}