Load indexes with clamped minmax

Bad DynamaxLevel values no longer throw an exception, and just clamp back to the normal range.
This commit is contained in:
Kurt 2022-06-04 20:21:36 -07:00
parent afed55f1e5
commit 2cfccb8caf

View File

@ -1,4 +1,5 @@
using System;
using System.Windows.Forms;
using PKHeX.Core;
using PKHeX.Drawing;
using PKHeX.Drawing.PokeSprite;
@ -57,9 +58,9 @@ private void SaveOT(PKM pk)
private void LoadPKRS(PKM pk)
{
Label_PKRS.Visible = CB_PKRSStrain.Visible = CHK_Infected.Checked = Label_PKRSdays.Visible = CB_PKRSDays.Visible = pk.PKRS_Infected;
CB_PKRSStrain.SelectedIndex = pk.PKRS_Strain;
LoadClamp(CB_PKRSStrain, pk.PKRS_Strain);
CHK_Cured.Checked = pk.PKRS_Cured;
CB_PKRSDays.SelectedIndex = Math.Min(CB_PKRSDays.Items.Count - 1, pk.PKRS_Days); // clamp to valid day values for the current strain
LoadClamp(CB_PKRSDays, pk.PKRS_Days); // clamp to valid day values for the current strain
}
private void SavePKRS(PKM pk)
@ -73,16 +74,26 @@ private void SavePKRS(PKM pk)
private void LoadAVs(IAwakened pk) => Stats.LoadAVs(pk);
private void LoadGVs(IGanbaru pk) => Stats.LoadGVs(pk);
private static void LoadClamp(ComboBox cb, int value)
{
var max = cb.Items.Count - 1;
if (value > max)
value = max;
else if (value < -1)
value = 0;
cb.SelectedIndex = value;
}
private void LoadMoves(PKM pk)
{
CB_Move1.SelectedValue = pk.Move1;
CB_Move2.SelectedValue = pk.Move2;
CB_Move3.SelectedValue = pk.Move3;
CB_Move4.SelectedValue = pk.Move4;
CB_PPu1.SelectedIndex = pk.Move1_PPUps;
CB_PPu2.SelectedIndex = pk.Move2_PPUps;
CB_PPu3.SelectedIndex = pk.Move3_PPUps;
CB_PPu4.SelectedIndex = pk.Move4_PPUps;
LoadClamp(CB_PPu1, pk.Move1_PPUps);
LoadClamp(CB_PPu2, pk.Move2_PPUps);
LoadClamp(CB_PPu3, pk.Move3_PPUps);
LoadClamp(CB_PPu4, pk.Move4_PPUps);
TB_PP1.Text = pk.Move1_PP.ToString();
TB_PP2.Text = pk.Move2_PP.ToString();
TB_PP3.Text = pk.Move3_PP.ToString();
@ -174,7 +185,7 @@ private void LoadMisc2(PKM pk)
LoadPKRS(pk);
CHK_IsEgg.Checked = pk.IsEgg;
CB_HeldItem.SelectedValue = pk.HeldItem;
CB_Form.SelectedIndex = CB_Form.Items.Count > pk.Form ? pk.Form : CB_Form.Items.Count - 1;
LoadClamp(CB_Form, pk.Form);
if (pk is IFormArgument f)
FA_Form.LoadArgument(f, pk.Species, pk.Form, pk.Format);
@ -299,10 +310,7 @@ private void LoadMisc6(PKM pk)
// with some simple error handling
var bitNumber = pk.AbilityNumber;
int abilityIndex = AbilityVerifier.IsValidAbilityBits(bitNumber) ? bitNumber >> 1 : 0;
if (abilityIndex >= CB_Ability.Items.Count) // sanity check ability count being possible
abilityIndex = CB_Ability.Items.Count - 1; // last possible index, if out of range
CB_Ability.SelectedIndex = abilityIndex;
LoadClamp(CB_Ability, abilityIndex);
TB_AbilityNumber.Text = bitNumber.ToString();
LoadRelearnMoves(pk);
@ -379,7 +387,7 @@ private void SaveHandlingTrainer(PKM pk)
private void LoadAbility4(PKM pk)
{
var index = GetAbilityIndex4(pk);
CB_Ability.SelectedIndex = Math.Min(CB_Ability.Items.Count - 1, index);
LoadClamp(CB_Ability, index);
}
private static int GetAbilityIndex4(PKM pk)
@ -400,7 +408,7 @@ private static int GetAbilityIndex4(PKM pk)
private void LoadMisc8(PK8 pk8)
{
CB_StatNature.SelectedValue = pk8.StatNature;
Stats.CB_DynamaxLevel.SelectedIndex = pk8.DynamaxLevel;
LoadClamp(Stats.CB_DynamaxLevel, pk8.DynamaxLevel);
Stats.CHK_Gigantamax.Checked = pk8.CanGigantamax;
CB_HTLanguage.SelectedValue = (int)pk8.HT_Language;
TB_HomeTracker.Text = pk8.Tracker.ToString("X16");
@ -419,7 +427,7 @@ private void SaveMisc8(PK8 pk8)
private void LoadMisc8(PB8 pk8)
{
CB_StatNature.SelectedValue = pk8.StatNature;
Stats.CB_DynamaxLevel.SelectedIndex = pk8.DynamaxLevel;
LoadClamp(Stats.CB_DynamaxLevel, pk8.DynamaxLevel);
Stats.CHK_Gigantamax.Checked = pk8.CanGigantamax;
CB_HTLanguage.SelectedValue = (int)pk8.HT_Language;
TB_HomeTracker.Text = pk8.Tracker.ToString("X16");
@ -438,7 +446,7 @@ private void SaveMisc8(PB8 pk8)
private void LoadMisc8(PA8 pk8)
{
CB_StatNature.SelectedValue = pk8.StatNature;
Stats.CB_DynamaxLevel.SelectedIndex = pk8.DynamaxLevel;
LoadClamp(Stats.CB_DynamaxLevel, pk8.DynamaxLevel);
Stats.CHK_Gigantamax.Checked = pk8.CanGigantamax;
CB_HTLanguage.SelectedValue = (int)pk8.HT_Language;
TB_HomeTracker.Text = pk8.Tracker.ToString("X16");