mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-08-28 07:36:19 -05:00
Add legality indication to move selection
Relearn moves do not have this indication; users should select current moves then click the Relearn Moves groupbox to assign the correct relearnmoves values. Closes #341
This commit is contained in:
@@ -29,6 +29,9 @@ private enum Encounters
|
||||
public CheckResult[] vRelearn = new CheckResult[4];
|
||||
public string Report => getLegalityReport();
|
||||
public string VerboseReport => getVerboseLegalityReport();
|
||||
public readonly int[] AllSuggestedMoves;
|
||||
public readonly int[] AllSuggestedRelearnMoves;
|
||||
public readonly int[] AllSuggestedMovesAndRelearn;
|
||||
|
||||
public LegalityAnalysis(PKM pk)
|
||||
{
|
||||
@@ -63,6 +66,9 @@ public LegalityAnalysis(PKM pk)
|
||||
}
|
||||
catch { Valid = false; }
|
||||
getLegalityReport();
|
||||
AllSuggestedMoves = getSuggestedMoves(true, true);
|
||||
AllSuggestedRelearnMoves = Legal.getValidRelearn(pkm, -1).ToArray();
|
||||
AllSuggestedMovesAndRelearn = AllSuggestedMoves.Concat(AllSuggestedRelearnMoves).ToArray();
|
||||
}
|
||||
|
||||
private void AddLine(Severity s, string c, CheckIdentifier i)
|
||||
@@ -210,7 +216,7 @@ public int[] getSuggestedRelearn()
|
||||
}
|
||||
public int[] getSuggestedMoves(bool tm, bool tutor)
|
||||
{
|
||||
if (pkm.Format < 6)
|
||||
if (pkm == null || pkm.Format < 6)
|
||||
return null;
|
||||
return Legal.getValidMoves(pkm, Tutor: tutor, Machine: tm).Skip(1).ToArray(); // skip move 0
|
||||
}
|
||||
|
||||
8
PKHeX/MainWindow/Main.Designer.cs
generated
8
PKHeX/MainWindow/Main.Designer.cs
generated
@@ -3142,11 +3142,13 @@ public void InitializeComponent()
|
||||
//
|
||||
this.CB_Move4.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
|
||||
this.CB_Move4.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.CB_Move4.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
|
||||
this.CB_Move4.FormattingEnabled = true;
|
||||
this.CB_Move4.Location = new System.Drawing.Point(9, 92);
|
||||
this.CB_Move4.Name = "CB_Move4";
|
||||
this.CB_Move4.Size = new System.Drawing.Size(121, 21);
|
||||
this.CB_Move4.TabIndex = 10;
|
||||
this.CB_Move4.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.validateMovePaint);
|
||||
this.CB_Move4.SelectedIndexChanged += new System.EventHandler(this.validateMove);
|
||||
this.CB_Move4.KeyDown += new System.Windows.Forms.KeyEventHandler(this.removedropCB);
|
||||
this.CB_Move4.Leave += new System.EventHandler(this.validateComboBox2);
|
||||
@@ -3171,11 +3173,13 @@ public void InitializeComponent()
|
||||
//
|
||||
this.CB_Move3.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
|
||||
this.CB_Move3.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.CB_Move3.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
|
||||
this.CB_Move3.FormattingEnabled = true;
|
||||
this.CB_Move3.Location = new System.Drawing.Point(9, 70);
|
||||
this.CB_Move3.Name = "CB_Move3";
|
||||
this.CB_Move3.Size = new System.Drawing.Size(121, 21);
|
||||
this.CB_Move3.TabIndex = 7;
|
||||
this.CB_Move3.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.validateMovePaint);
|
||||
this.CB_Move3.SelectedIndexChanged += new System.EventHandler(this.validateMove);
|
||||
this.CB_Move3.KeyDown += new System.Windows.Forms.KeyEventHandler(this.removedropCB);
|
||||
this.CB_Move3.Leave += new System.EventHandler(this.validateComboBox2);
|
||||
@@ -3185,11 +3189,13 @@ public void InitializeComponent()
|
||||
//
|
||||
this.CB_Move2.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
|
||||
this.CB_Move2.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.CB_Move2.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
|
||||
this.CB_Move2.FormattingEnabled = true;
|
||||
this.CB_Move2.Location = new System.Drawing.Point(9, 48);
|
||||
this.CB_Move2.Name = "CB_Move2";
|
||||
this.CB_Move2.Size = new System.Drawing.Size(121, 21);
|
||||
this.CB_Move2.TabIndex = 4;
|
||||
this.CB_Move2.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.validateMovePaint);
|
||||
this.CB_Move2.SelectedIndexChanged += new System.EventHandler(this.validateMove);
|
||||
this.CB_Move2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.removedropCB);
|
||||
this.CB_Move2.Leave += new System.EventHandler(this.validateComboBox2);
|
||||
@@ -3199,11 +3205,13 @@ public void InitializeComponent()
|
||||
//
|
||||
this.CB_Move1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
|
||||
this.CB_Move1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.CB_Move1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
|
||||
this.CB_Move1.FormattingEnabled = true;
|
||||
this.CB_Move1.Location = new System.Drawing.Point(9, 26);
|
||||
this.CB_Move1.Name = "CB_Move1";
|
||||
this.CB_Move1.Size = new System.Drawing.Size(121, 21);
|
||||
this.CB_Move1.TabIndex = 1;
|
||||
this.CB_Move1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.validateMovePaint);
|
||||
this.CB_Move1.SelectedIndexChanged += new System.EventHandler(this.validateMove);
|
||||
this.CB_Move1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.removedropCB);
|
||||
this.CB_Move1.Leave += new System.EventHandler(this.validateComboBox2);
|
||||
|
||||
@@ -2638,14 +2638,30 @@ private void validateMove(object sender, EventArgs e)
|
||||
|
||||
if (new[] { CB_Move1, CB_Move2, CB_Move3, CB_Move4 }.Contains(sender)) // Move
|
||||
updatePP(sender, e);
|
||||
|
||||
if (pkm.Format < 6)
|
||||
return;
|
||||
|
||||
// Legality
|
||||
pkm.Moves = new[] { Util.getIndex(CB_Move1), Util.getIndex(CB_Move2), Util.getIndex(CB_Move3), Util.getIndex(CB_Move4) };
|
||||
pkm.RelearnMoves = new[] { Util.getIndex(CB_RelearnMove1), Util.getIndex(CB_RelearnMove2), Util.getIndex(CB_RelearnMove3), Util.getIndex(CB_RelearnMove4) };
|
||||
updateLegality();
|
||||
pkm.Moves = new[] {CB_Move1, CB_Move2, CB_Move3, CB_Move4}.Select(Util.getIndex).ToArray();
|
||||
pkm.RelearnMoves = new[] {CB_RelearnMove1, CB_RelearnMove2, CB_RelearnMove3, CB_RelearnMove4}.Select(Util.getIndex).ToArray();
|
||||
updateLegality(skipMoveRepop:true);
|
||||
}
|
||||
private void validateMovePaint(object sender, DrawItemEventArgs e)
|
||||
{
|
||||
if (e.Index < 0) return;
|
||||
|
||||
var i = (ComboItem)(sender as ComboBox).Items[e.Index];
|
||||
var moves = Legality.AllSuggestedMovesAndRelearn;
|
||||
bool vm = moves != null && moves.Contains(i.Value) && !HaX;
|
||||
|
||||
bool current = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
|
||||
Brush tBrush = current ? SystemBrushes.HighlightText : new SolidBrush(e.ForeColor);
|
||||
Brush brush = current ? SystemBrushes.Highlight : vm ? Brushes.PaleGreen : new SolidBrush(e.BackColor);
|
||||
|
||||
e.Graphics.FillRectangle(brush, e.Bounds);
|
||||
e.Graphics.DrawString(i.Text, e.Font, tBrush, e.Bounds, StringFormat.GenericDefault);
|
||||
if (current) return;
|
||||
tBrush.Dispose();
|
||||
if (!vm)
|
||||
brush.Dispose();
|
||||
}
|
||||
private void validateLocation(object sender, EventArgs e)
|
||||
{
|
||||
@@ -2673,7 +2689,7 @@ private void showLegality(PKM pk, bool tabs, bool verbose)
|
||||
updateLegality(la);
|
||||
Util.Alert(verbose ? la.VerboseReport : la.Report);
|
||||
}
|
||||
private void updateLegality(LegalityAnalysis la = null)
|
||||
private void updateLegality(LegalityAnalysis la = null, bool skipMoveRepop = false)
|
||||
{
|
||||
if (!fieldsLoaded)
|
||||
return;
|
||||
@@ -2693,6 +2709,22 @@ private void updateLegality(LegalityAnalysis la = null)
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
relearnPB[i].Visible = !Legality.vRelearn[i].Valid && !HaX;
|
||||
|
||||
if (skipMoveRepop)
|
||||
return;
|
||||
// Resort moves
|
||||
bool tmp = fieldsLoaded;
|
||||
fieldsLoaded = false;
|
||||
var cb = new[] {CB_Move1, CB_Move2, CB_Move3, CB_Move4 };
|
||||
var moves = Legality.AllSuggestedMovesAndRelearn;
|
||||
var moveList = GameInfo.MoveDataSource.OrderByDescending(m => moves.Contains(m.Value)).ToList();
|
||||
foreach (ComboBox c in cb)
|
||||
{
|
||||
var index = c.SelectedValue;
|
||||
c.DataSource = new BindingSource(moveList, null);
|
||||
c.SelectedValue = index;
|
||||
}
|
||||
fieldsLoaded |= tmp;
|
||||
}
|
||||
private void updateStats()
|
||||
{
|
||||
@@ -3898,7 +3930,6 @@ private void pbBoxSlot_MouseClick(object sender, MouseEventArgs e)
|
||||
|
||||
clickSlot(sender, e);
|
||||
}
|
||||
|
||||
private void pbBoxSlot_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
|
||||
Reference in New Issue
Block a user