Small enhancement to encdb ui

Shift click type checkbox to un-check others
Search button disables itself if the search would return nothing
When using tabs as criteria, if hyper training is available, only require the specified imperfect IVs for the encounter

enc9: be a little nicer and allow a slight search lag by only considering actual encounterable attempts (passing slot check). Can infrequently obtain a 0-speed shiny Foongus via encDB with a few attempts.
This commit is contained in:
Kurt 2025-07-04 01:35:48 -05:00
parent c19a4605d5
commit fbde4f585d
4 changed files with 122 additions and 72 deletions

View File

@ -75,6 +75,24 @@ public EncounterCriteria()
IV_SPE = RandomIV,
};
/// <summary>
/// Creates a new <see cref="EncounterCriteria"/> with random IVs.
/// </summary>
public EncounterCriteria ReviseIVsHyperTrainAvailable() => this with
{
IV_HP = ReviseForHyperTrain(IV_HP),
IV_ATK = ReviseForHyperTrain(IV_ATK),
IV_DEF = ReviseForHyperTrain(IV_DEF),
IV_SPA = ReviseForHyperTrain(IV_SPA),
IV_SPD = ReviseForHyperTrain(IV_SPD),
IV_SPE = ReviseForHyperTrain(IV_SPE),
};
/// <summary>
/// Keeps an IV only if it cannot be overridden in-game to that value (via hyper training).
/// </summary>
private static sbyte ReviseForHyperTrain(sbyte current) => current is 31 ? RandomIV : current;
/// <summary>
/// Checks if the Hidden Power type for the given IVs matches the specified HiddenPowerType.
/// </summary>

View File

@ -21,7 +21,10 @@ public static bool TryApply32<TEnc>(this TEnc enc, PK9 pk, in ulong init, in Gen
{
uint seed = (uint)rand.NextInt(uint.MaxValue);
if (!enc.CanBeEncountered(seed))
{
ctr--; // don't consider it an attempt
continue;
}
if (!GenerateData(pk, param, criteria, seed, param.IVs.IsSpecified))
continue;

View File

@ -34,7 +34,7 @@ private void InitializeComponent()
Menu_Close = new System.Windows.Forms.ToolStripMenuItem();
Menu_Exit = new System.Windows.Forms.ToolStripMenuItem();
P_Results = new System.Windows.Forms.Panel();
EncounterPokeGrid = new Controls.PokeGrid();
EncounterPokeGrid = new PKHeX.WinForms.Controls.PokeGrid();
B_Search = new System.Windows.Forms.Button();
B_Reset = new System.Windows.Forms.Button();
L_Count = new System.Windows.Forms.Label();
@ -45,8 +45,6 @@ private void InitializeComponent()
mnuView = new System.Windows.Forms.ToolStripMenuItem();
TC_SearchOptions = new System.Windows.Forms.TabControl();
Tab_General = new System.Windows.Forms.TabPage();
Tab_Advanced = new System.Windows.Forms.TabPage();
B_Add = new System.Windows.Forms.Button();
TLP_Filters = new System.Windows.Forms.TableLayoutPanel();
Label_Species = new System.Windows.Forms.Label();
CB_Species = new System.Windows.Forms.ComboBox();
@ -65,13 +63,15 @@ private void InitializeComponent()
CHK_IsEgg = new System.Windows.Forms.CheckBox();
FLP_Egg = new System.Windows.Forms.FlowLayoutPanel();
CHK_Shiny = new System.Windows.Forms.CheckBox();
Tab_Advanced = new System.Windows.Forms.TabPage();
B_Add = new System.Windows.Forms.Button();
menuStrip1.SuspendLayout();
P_Results.SuspendLayout();
mnu.SuspendLayout();
TC_SearchOptions.SuspendLayout();
Tab_General.SuspendLayout();
Tab_Advanced.SuspendLayout();
TLP_Filters.SuspendLayout();
Tab_Advanced.SuspendLayout();
SuspendLayout();
//
// SCR_Box
@ -91,7 +91,7 @@ private void InitializeComponent()
menuStrip1.Location = new System.Drawing.Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2);
menuStrip1.Size = new System.Drawing.Size(670, 24);
menuStrip1.Size = new System.Drawing.Size(670, 25);
menuStrip1.TabIndex = 65;
menuStrip1.Text = "menuStrip1";
//
@ -99,7 +99,7 @@ private void InitializeComponent()
//
Menu_Close.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_Exit });
Menu_Close.Name = "Menu_Close";
Menu_Close.Size = new System.Drawing.Size(37, 20);
Menu_Close.Size = new System.Drawing.Size(39, 21);
Menu_Close.Text = "File";
//
// Menu_Exit
@ -108,7 +108,7 @@ private void InitializeComponent()
Menu_Exit.Name = "Menu_Exit";
Menu_Exit.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E;
Menu_Exit.ShowShortcutKeys = false;
Menu_Exit.Size = new System.Drawing.Size(96, 22);
Menu_Exit.Size = new System.Drawing.Size(100, 22);
Menu_Exit.Text = "&Close";
Menu_Exit.Click += Menu_Exit_Click;
//
@ -175,7 +175,7 @@ private void InitializeComponent()
L_Viewed.Location = new System.Drawing.Point(10, 445);
L_Viewed.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_Viewed.Name = "L_Viewed";
L_Viewed.Size = new System.Drawing.Size(89, 15);
L_Viewed.Size = new System.Drawing.Size(99, 17);
L_Viewed.TabIndex = 117;
L_Viewed.Text = "Last Viewed: {0}";
L_Viewed.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@ -186,7 +186,7 @@ private void InitializeComponent()
RTB_Instructions.Location = new System.Drawing.Point(0, 48);
RTB_Instructions.Margin = new System.Windows.Forms.Padding(0);
RTB_Instructions.Name = "RTB_Instructions";
RTB_Instructions.Size = new System.Drawing.Size(298, 313);
RTB_Instructions.Size = new System.Drawing.Size(298, 311);
RTB_Instructions.TabIndex = 119;
RTB_Instructions.Text = "";
//
@ -194,13 +194,13 @@ private void InitializeComponent()
//
mnu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { mnuView });
mnu.Name = "contextMenuStrip1";
mnu.Size = new System.Drawing.Size(100, 26);
mnu.Size = new System.Drawing.Size(104, 26);
//
// mnuView
//
mnuView.Image = Properties.Resources.other;
mnuView.Name = "mnuView";
mnuView.Size = new System.Drawing.Size(99, 22);
mnuView.Size = new System.Drawing.Size(103, 22);
mnuView.Text = "View";
mnuView.Click += ClickView;
//
@ -219,39 +219,15 @@ private void InitializeComponent()
// Tab_General
//
Tab_General.Controls.Add(TLP_Filters);
Tab_General.Location = new System.Drawing.Point(4, 24);
Tab_General.Location = new System.Drawing.Point(4, 26);
Tab_General.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_General.Name = "Tab_General";
Tab_General.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_General.Size = new System.Drawing.Size(300, 364);
Tab_General.Size = new System.Drawing.Size(300, 362);
Tab_General.TabIndex = 0;
Tab_General.Text = "General";
Tab_General.UseVisualStyleBackColor = true;
//
// Tab_Advanced
//
Tab_Advanced.Controls.Add(B_Add);
Tab_Advanced.Controls.Add(RTB_Instructions);
Tab_Advanced.Location = new System.Drawing.Point(4, 24);
Tab_Advanced.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Advanced.Name = "Tab_Advanced";
Tab_Advanced.Size = new System.Drawing.Size(300, 364);
Tab_Advanced.TabIndex = 1;
Tab_Advanced.Text = "Advanced";
Tab_Advanced.UseVisualStyleBackColor = true;
//
// B_Add
//
B_Add.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
B_Add.Location = new System.Drawing.Point(230, -1);
B_Add.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_Add.Name = "B_Add";
B_Add.Size = new System.Drawing.Size(66, 27);
B_Add.TabIndex = 122;
B_Add.Text = "Add";
B_Add.UseVisualStyleBackColor = true;
B_Add.Click += B_Add_Click;
//
// TLP_Filters
//
TLP_Filters.AutoScroll = true;
@ -300,17 +276,17 @@ private void InitializeComponent()
TLP_Filters.RowStyles.Add(new System.Windows.Forms.RowStyle());
TLP_Filters.RowStyles.Add(new System.Windows.Forms.RowStyle());
TLP_Filters.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));
TLP_Filters.Size = new System.Drawing.Size(292, 358);
TLP_Filters.Size = new System.Drawing.Size(292, 356);
TLP_Filters.TabIndex = 120;
//
// Label_Species
//
Label_Species.Anchor = System.Windows.Forms.AnchorStyles.Right;
Label_Species.AutoSize = true;
Label_Species.Location = new System.Drawing.Point(27, 23);
Label_Species.Location = new System.Drawing.Point(21, 25);
Label_Species.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Label_Species.Name = "Label_Species";
Label_Species.Size = new System.Drawing.Size(49, 15);
Label_Species.Size = new System.Drawing.Size(55, 17);
Label_Species.TabIndex = 90;
Label_Species.Text = "Species:";
Label_Species.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@ -321,17 +297,18 @@ private void InitializeComponent()
CB_Species.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
CB_Species.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
CB_Species.FormattingEnabled = true;
CB_Species.Location = new System.Drawing.Point(80, 19);
CB_Species.Location = new System.Drawing.Point(80, 21);
CB_Species.Margin = new System.Windows.Forms.Padding(0);
CB_Species.Name = "CB_Species";
CB_Species.Size = new System.Drawing.Size(142, 23);
CB_Species.Size = new System.Drawing.Size(142, 25);
CB_Species.TabIndex = 67;
CB_Species.SelectedIndexChanged += CB_Species_SelectedIndexChanged;
//
// FLP_Level
//
FLP_Level.Anchor = System.Windows.Forms.AnchorStyles.Left;
FLP_Level.AutoSize = true;
FLP_Level.Location = new System.Drawing.Point(80, 42);
FLP_Level.Location = new System.Drawing.Point(80, 46);
FLP_Level.Margin = new System.Windows.Forms.Padding(0);
FLP_Level.Name = "FLP_Level";
FLP_Level.Size = new System.Drawing.Size(0, 0);
@ -341,10 +318,10 @@ private void InitializeComponent()
//
L_Move1.Anchor = System.Windows.Forms.AnchorStyles.Right;
L_Move1.AutoSize = true;
L_Move1.Location = new System.Drawing.Point(27, 46);
L_Move1.Location = new System.Drawing.Point(21, 50);
L_Move1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
L_Move1.Name = "L_Move1";
L_Move1.Size = new System.Drawing.Size(49, 15);
L_Move1.Size = new System.Drawing.Size(55, 17);
L_Move1.TabIndex = 105;
L_Move1.Text = "Move 1:";
L_Move1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@ -355,20 +332,20 @@ private void InitializeComponent()
CB_Move1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
CB_Move1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
CB_Move1.FormattingEnabled = true;
CB_Move1.Location = new System.Drawing.Point(80, 42);
CB_Move1.Location = new System.Drawing.Point(80, 46);
CB_Move1.Margin = new System.Windows.Forms.Padding(0);
CB_Move1.Name = "CB_Move1";
CB_Move1.Size = new System.Drawing.Size(142, 23);
CB_Move1.Size = new System.Drawing.Size(142, 25);
CB_Move1.TabIndex = 71;
//
// L_Move2
//
L_Move2.Anchor = System.Windows.Forms.AnchorStyles.Right;
L_Move2.AutoSize = true;
L_Move2.Location = new System.Drawing.Point(27, 69);
L_Move2.Location = new System.Drawing.Point(21, 75);
L_Move2.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
L_Move2.Name = "L_Move2";
L_Move2.Size = new System.Drawing.Size(49, 15);
L_Move2.Size = new System.Drawing.Size(55, 17);
L_Move2.TabIndex = 106;
L_Move2.Text = "Move 2:";
L_Move2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@ -379,20 +356,20 @@ private void InitializeComponent()
CB_Move2.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
CB_Move2.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
CB_Move2.FormattingEnabled = true;
CB_Move2.Location = new System.Drawing.Point(80, 65);
CB_Move2.Location = new System.Drawing.Point(80, 71);
CB_Move2.Margin = new System.Windows.Forms.Padding(0);
CB_Move2.Name = "CB_Move2";
CB_Move2.Size = new System.Drawing.Size(142, 23);
CB_Move2.Size = new System.Drawing.Size(142, 25);
CB_Move2.TabIndex = 72;
//
// L_Move3
//
L_Move3.Anchor = System.Windows.Forms.AnchorStyles.Right;
L_Move3.AutoSize = true;
L_Move3.Location = new System.Drawing.Point(27, 92);
L_Move3.Location = new System.Drawing.Point(21, 100);
L_Move3.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
L_Move3.Name = "L_Move3";
L_Move3.Size = new System.Drawing.Size(49, 15);
L_Move3.Size = new System.Drawing.Size(55, 17);
L_Move3.TabIndex = 107;
L_Move3.Text = "Move 3:";
L_Move3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@ -403,20 +380,20 @@ private void InitializeComponent()
CB_Move3.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
CB_Move3.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
CB_Move3.FormattingEnabled = true;
CB_Move3.Location = new System.Drawing.Point(80, 88);
CB_Move3.Location = new System.Drawing.Point(80, 96);
CB_Move3.Margin = new System.Windows.Forms.Padding(0);
CB_Move3.Name = "CB_Move3";
CB_Move3.Size = new System.Drawing.Size(142, 23);
CB_Move3.Size = new System.Drawing.Size(142, 25);
CB_Move3.TabIndex = 73;
//
// L_Move4
//
L_Move4.Anchor = System.Windows.Forms.AnchorStyles.Right;
L_Move4.AutoSize = true;
L_Move4.Location = new System.Drawing.Point(27, 115);
L_Move4.Location = new System.Drawing.Point(21, 125);
L_Move4.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
L_Move4.Name = "L_Move4";
L_Move4.Size = new System.Drawing.Size(49, 15);
L_Move4.Size = new System.Drawing.Size(55, 17);
L_Move4.TabIndex = 108;
L_Move4.Text = "Move 4:";
L_Move4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@ -427,10 +404,10 @@ private void InitializeComponent()
CB_Move4.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
CB_Move4.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
CB_Move4.FormattingEnabled = true;
CB_Move4.Location = new System.Drawing.Point(80, 111);
CB_Move4.Location = new System.Drawing.Point(80, 121);
CB_Move4.Margin = new System.Windows.Forms.Padding(0);
CB_Move4.Name = "CB_Move4";
CB_Move4.Size = new System.Drawing.Size(142, 23);
CB_Move4.Size = new System.Drawing.Size(142, 25);
CB_Move4.TabIndex = 74;
//
// CB_GameOrigin
@ -438,20 +415,20 @@ private void InitializeComponent()
CB_GameOrigin.Anchor = System.Windows.Forms.AnchorStyles.Left;
CB_GameOrigin.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
CB_GameOrigin.FormattingEnabled = true;
CB_GameOrigin.Location = new System.Drawing.Point(80, 134);
CB_GameOrigin.Location = new System.Drawing.Point(80, 153);
CB_GameOrigin.Margin = new System.Windows.Forms.Padding(0);
CB_GameOrigin.Name = "CB_GameOrigin";
CB_GameOrigin.Size = new System.Drawing.Size(142, 23);
CB_GameOrigin.Size = new System.Drawing.Size(142, 25);
CB_GameOrigin.TabIndex = 121;
//
// L_Version
//
L_Version.Anchor = System.Windows.Forms.AnchorStyles.Right;
L_Version.AutoSize = true;
L_Version.Location = new System.Drawing.Point(11, 138);
L_Version.Location = new System.Drawing.Point(22, 149);
L_Version.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
L_Version.Name = "L_Version";
L_Version.Size = new System.Drawing.Size(65, 15);
L_Version.Size = new System.Drawing.Size(54, 34);
L_Version.TabIndex = 122;
L_Version.Text = "OT Version:";
L_Version.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@ -459,10 +436,10 @@ private void InitializeComponent()
// TypeFilters
//
TypeFilters.Dock = System.Windows.Forms.DockStyle.Fill;
TypeFilters.Location = new System.Drawing.Point(84, 160);
TypeFilters.Location = new System.Drawing.Point(84, 189);
TypeFilters.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
TypeFilters.Name = "TypeFilters";
TypeFilters.Size = new System.Drawing.Size(204, 195);
TypeFilters.Size = new System.Drawing.Size(204, 164);
TypeFilters.TabIndex = 123;
//
// CHK_IsEgg
@ -474,7 +451,7 @@ private void InitializeComponent()
CHK_IsEgg.Location = new System.Drawing.Point(80, 0);
CHK_IsEgg.Margin = new System.Windows.Forms.Padding(0);
CHK_IsEgg.Name = "CHK_IsEgg";
CHK_IsEgg.Size = new System.Drawing.Size(46, 19);
CHK_IsEgg.Size = new System.Drawing.Size(50, 21);
CHK_IsEgg.TabIndex = 125;
CHK_IsEgg.Text = "Egg";
CHK_IsEgg.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
@ -485,7 +462,7 @@ private void InitializeComponent()
//
FLP_Egg.Anchor = System.Windows.Forms.AnchorStyles.Left;
FLP_Egg.AutoSize = true;
FLP_Egg.Location = new System.Drawing.Point(0, 257);
FLP_Egg.Location = new System.Drawing.Point(0, 271);
FLP_Egg.Margin = new System.Windows.Forms.Padding(0);
FLP_Egg.Name = "FLP_Egg";
FLP_Egg.Size = new System.Drawing.Size(0, 0);
@ -497,16 +474,40 @@ private void InitializeComponent()
CHK_Shiny.AutoSize = true;
CHK_Shiny.Checked = true;
CHK_Shiny.CheckState = System.Windows.Forms.CheckState.Indeterminate;
CHK_Shiny.Location = new System.Drawing.Point(25, 0);
CHK_Shiny.Location = new System.Drawing.Point(23, 0);
CHK_Shiny.Margin = new System.Windows.Forms.Padding(0);
CHK_Shiny.Name = "CHK_Shiny";
CHK_Shiny.Size = new System.Drawing.Size(55, 19);
CHK_Shiny.Size = new System.Drawing.Size(57, 21);
CHK_Shiny.TabIndex = 126;
CHK_Shiny.Text = "Shiny";
CHK_Shiny.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
CHK_Shiny.ThreeState = true;
CHK_Shiny.UseVisualStyleBackColor = true;
//
// Tab_Advanced
//
Tab_Advanced.Controls.Add(B_Add);
Tab_Advanced.Controls.Add(RTB_Instructions);
Tab_Advanced.Location = new System.Drawing.Point(4, 26);
Tab_Advanced.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Advanced.Name = "Tab_Advanced";
Tab_Advanced.Size = new System.Drawing.Size(300, 362);
Tab_Advanced.TabIndex = 1;
Tab_Advanced.Text = "Advanced";
Tab_Advanced.UseVisualStyleBackColor = true;
//
// B_Add
//
B_Add.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
B_Add.Location = new System.Drawing.Point(230, -1);
B_Add.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_Add.Name = "B_Add";
B_Add.Size = new System.Drawing.Size(66, 27);
B_Add.TabIndex = 122;
B_Add.Text = "Add";
B_Add.UseVisualStyleBackColor = true;
B_Add.Click += B_Add_Click;
//
// SAV_Encounters
//
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
@ -534,9 +535,9 @@ private void InitializeComponent()
TC_SearchOptions.ResumeLayout(false);
Tab_General.ResumeLayout(false);
Tab_General.PerformLayout();
Tab_Advanced.ResumeLayout(false);
TLP_Filters.ResumeLayout(false);
TLP_Filters.PerformLayout();
Tab_Advanced.ResumeLayout(false);
ResumeLayout(false);
PerformLayout();
}

View File

@ -103,6 +103,8 @@ public SAV_Encounters(PKMEditor f1, TrainerDatabase db)
L_Count.Text = "Ready...";
CenterToParent();
CB_Species.Select();
CheckIsSearchDisallowed();
}
private void GetTypeFilters()
@ -121,6 +123,15 @@ private void GetTypeFilters()
{
TypeFilters.Controls.Add(chk);
TypeFilters.SetFlowBreak(chk, true);
chk.Click += (_, _) =>
{
if ((ModifierKeys & Keys.Shift) != 0)
{
foreach (var c in TypeFilters.Controls.OfType<CheckBox>())
c.Checked = c == chk;
}
};
chk.CheckStateChanged += (_, _) => CheckIsSearchDisallowed();
}
}
@ -182,7 +193,7 @@ private void ClickView(object sender, EventArgs e)
FillPKXBoxes(SCR_Box.Value);
}
private EncounterCriteria GetCriteria(ISpeciesForm enc, EncounterDatabaseSettings settings)
private EncounterCriteria GetCriteria(IEncounterTemplate enc, EncounterDatabaseSettings settings)
{
if (!settings.UseTabsAsCriteria)
return EncounterCriteria.Unrestricted;
@ -202,6 +213,8 @@ private EncounterCriteria GetCriteria(ISpeciesForm enc, EncounterDatabaseSetting
var criteria = EncounterCriteria.GetCriteria(set, editor.PersonalInfo, mutations);
if (!isInChain)
criteria = criteria with { Gender = Gender.Random }; // Genderless tabs and a gendered enc -> let's play safe.
if (editor.Context.IsHyperTrainingAvailable(100))
criteria = criteria.ReviseIVsHyperTrainAvailable();
return criteria;
}
@ -261,7 +274,7 @@ private IEnumerable<IEncounterInfo> SearchDatabase(CancellationToken token)
var settings = GetSearchSettings();
// If nothing is specified, instead of just returning all possible encounters, just return nothing.
if (settings is { Species: 0, Moves.Count: 0 } && Main.Settings.EncounterDb.ReturnNoneIfEmptySearch)
if (DisallowSearch(settings))
return [];
var pk = SAV.BlankPKM;
@ -299,6 +312,13 @@ private IEnumerable<IEncounterInfo> SearchDatabase(CancellationToken token)
return results;
}
private bool DisallowSearch(SearchSettings settings)
{
if (TypeFilters.Controls.OfType<CheckBox>().All(z => !z.Checked))
return false; // no types selected
return settings is { Species: 0, Moves.Count: 0 } && Main.Settings.EncounterDb.ReturnNoneIfEmptySearch;
}
private static IEnumerable<ushort> GetFullRange(int max)
{
for (ushort i = 1; i <= max; i++)
@ -513,4 +533,12 @@ private void B_Add_Click(object sender, EventArgs e)
tb.AppendText(Environment.NewLine);
tb.AppendText(s);
}
private void CB_Species_SelectedIndexChanged(object sender, EventArgs e) => CheckIsSearchDisallowed();
private void CheckIsSearchDisallowed()
{
var settings = GetSearchSettings();
B_Search.Enabled = !DisallowSearch(settings);
}
}