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:
Kurt
2016-11-15 22:01:28 -08:00
parent 42c2fc1a38
commit f0a2b83d85
3 changed files with 54 additions and 9 deletions

View File

@@ -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
}

View File

@@ -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);

View File

@@ -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)