general Cheat code cleanup

This commit is contained in:
adelikat 2017-05-18 15:16:02 -05:00
parent 75affd8940
commit 0d4313af91
4 changed files with 133 additions and 131 deletions

View File

@ -4,24 +4,24 @@ namespace BizHawk.Client.Common
{
public class Cheat
{
public enum COMPARISONTYPE
public enum CompareType
{
NONE,
EQUAL,
GREATER_THAN,
GREATER_THAN_OR_EQUAL,
LESS_THAN,
LESS_THAN_OR_EQUAL,
NOT_EQUAL
None,
Equal,
GreaterThan,
GreaterThanOrEqual,
LessThan,
LessThanOrEqual,
NotEqual
}
private readonly Watch _watch;
private readonly COMPARISONTYPE _comparisonType;
private readonly CompareType _comparisonType;
private int? _compare;
private int _val;
private bool _enabled;
public Cheat(Watch watch, int value, int? compare = null, bool enabled = true, COMPARISONTYPE comparisonType = COMPARISONTYPE.NONE)
public Cheat(Watch watch, int value, int? compare = null, bool enabled = true, CompareType comparisonType = CompareType.None)
{
_enabled = enabled;
_watch = watch;
@ -131,7 +131,7 @@ namespace BizHawk.Client.Common
}
}
public COMPARISONTYPE ComparisonType => _comparisonType;
public CompareType ComparisonType => _comparisonType;
public void Enable(bool handleChange = true)
{
@ -190,43 +190,43 @@ namespace BizHawk.Client.Common
switch (_comparisonType)
{
default:
case COMPARISONTYPE.NONE: // This should never happen, but it's here just in case. adelikat: And yet it does! Cheat Code converter doesn't do this. Changing this to default to equal since 99.9999% of all cheats are going to be equals
case COMPARISONTYPE.EQUAL:
case CompareType.None: // This should never happen, but it's here just in case. adelikat: And yet it does! Cheat Code converter doesn't do this. Changing this to default to equal since 99.9999% of all cheats are going to be equals
case CompareType.Equal:
if (_compare.Value == _watch.ValueNoFreeze)
{
_watch.Poke(GetStringForPulse(_val));
}
break;
case COMPARISONTYPE.GREATER_THAN:
case CompareType.GreaterThan:
if (_compare.Value > _watch.ValueNoFreeze)
{
_watch.Poke(GetStringForPulse(_val));
}
break;
case COMPARISONTYPE.GREATER_THAN_OR_EQUAL:
case CompareType.GreaterThanOrEqual:
if (_compare.Value >= _watch.ValueNoFreeze)
{
_watch.Poke(GetStringForPulse(_val));
}
break;
case COMPARISONTYPE.LESS_THAN:
case CompareType.LessThan:
if (_compare.Value < _watch.ValueNoFreeze)
{
_watch.Poke(GetStringForPulse(_val));
}
break;
case COMPARISONTYPE.LESS_THAN_OR_EQUAL:
case CompareType.LessThanOrEqual:
if (_compare.Value <= _watch.ValueNoFreeze)
{
_watch.Poke(GetStringForPulse(_val));
}
break;
case COMPARISONTYPE.NOT_EQUAL:
case CompareType.NotEqual:
if (_compare.Value != _watch.ValueNoFreeze)
{
_watch.Poke(GetStringForPulse(_val));

View File

@ -445,7 +445,7 @@ namespace BizHawk.Client.Common
var size = WatchSize.Byte;
var type = DisplayType.Hex;
var bigendian = false;
Cheat.COMPARISONTYPE comparisonType = Cheat.COMPARISONTYPE.NONE;
Cheat.CompareType comparisonType = Cheat.CompareType.None;
if (s.Length < 6)
{
@ -480,7 +480,7 @@ namespace BizHawk.Client.Common
// For backwards compatibility, don't assume these values exist
if (vals.Length > 9)
{
if (!Enum.TryParse<Cheat.COMPARISONTYPE>(vals[9], out comparisonType))
if (!Enum.TryParse<Cheat.CompareType>(vals[9], out comparisonType))
{
continue; // Not sure if this is the best answer, could just resort to ==
}

View File

@ -3,9 +3,9 @@ using System.Linq;
using System.Windows.Forms;
using BizHawk.Client.Common;
using Emu = BizHawk.Emulation.Common;
using BizHawk.Emulation.Common.IEmulatorExtensions;
using Emu = BizHawk.Emulation.Common;
namespace BizHawk.Client.EmuHawk
{
@ -46,14 +46,9 @@ namespace BizHawk.Client.EmuHawk
.Select(d => d.ToString())
.ToArray());
if (MemoryDomains.HasSystemBus)
{
DomainDropDown.SelectedItem = MemoryDomains.SystemBus.ToString();
}
else
{
DomainDropDown.SelectedItem = MemoryDomains.MainMemory.ToString();
}
DomainDropDown.SelectedItem = MemoryDomains.HasSystemBus
? MemoryDomains.SystemBus.ToString()
: MemoryDomains.MainMemory.ToString();
}
SetFormToDefault();
@ -81,22 +76,21 @@ namespace BizHawk.Client.EmuHawk
CompareHexIndLabel.Text =
_cheat.Type == DisplayType.Hex ? HexInd : "";
BigEndianCheckBox.Checked = _cheat.BigEndian.Value;
BigEndianCheckBox.Checked = _cheat.BigEndian ?? false;
NameBox.Text = _cheat.Name;
AddressBox.Text = _cheat.AddressStr;
ValueBox.Text = _cheat.ValueStr;
CompareBox.Text = _cheat.Compare.HasValue ? _cheat.CompareStr : "";
if (_cheat.ComparisonType.Equals(Cheat.COMPARISONTYPE.NONE))
if (_cheat.ComparisonType.Equals(Cheat.CompareType.None))
{
CompareTypeDropDown.SelectedIndex = 0;
}
else
{
CompareTypeDropDown.SelectedIndex = ((int)_cheat.ComparisonType - 1);
CompareTypeDropDown.SelectedIndex = (int)_cheat.ComparisonType - 1;
}
CheckFormState();
if (!_cheat.Compare.HasValue)
@ -192,22 +186,25 @@ namespace BizHawk.Client.EmuHawk
{
default:
case 0:
foreach(DisplayType t in ByteWatch.ValidTypes)
foreach (DisplayType t in ByteWatch.ValidTypes)
{
DisplayTypeDropDown.Items.Add(Watch.DisplayTypeToString(t));
}
break;
case 1:
foreach (DisplayType t in WordWatch.ValidTypes)
{
DisplayTypeDropDown.Items.Add(Watch.DisplayTypeToString(t));
}
break;
case 2:
foreach (DisplayType t in DWordWatch.ValidTypes)
{
DisplayTypeDropDown.Items.Add(Watch.DisplayTypeToString(t));
}
break;
}
@ -216,7 +213,7 @@ namespace BizHawk.Client.EmuHawk
private void CheckFormState()
{
var valid = !String.IsNullOrWhiteSpace(AddressBox.Text) && !String.IsNullOrWhiteSpace(ValueBox.Text);
var valid = !string.IsNullOrWhiteSpace(AddressBox.Text) && !string.IsNullOrWhiteSpace(ValueBox.Text);
AddButton.Enabled = valid;
EditButton.Enabled = _editmode && valid;
}
@ -265,18 +262,12 @@ namespace BizHawk.Client.EmuHawk
private void AddButton_Click(object sender, EventArgs e)
{
if (_addCallback != null)
{
_addCallback();
}
_addCallback?.Invoke();
}
private void EditButton_Click(object sender, EventArgs e)
{
if (_editCallback != null)
{
_editCallback();
}
_editCallback?.Invoke();
}
#endregion
@ -304,16 +295,12 @@ namespace BizHawk.Client.EmuHawk
SetFormToDefault();
}
public Cheat OriginalCheat
{
get { return _cheat; }
}
public Cheat OriginalCheat => _cheat;
public Cheat GetCheat()
{
Cheat.COMPARISONTYPE comparisonType = Cheat.COMPARISONTYPE.NONE;
var domain = MemoryDomains[DomainDropDown.SelectedItem.ToString()];
var address = AddressBox.ToRawInt().Value;
var address = AddressBox.ToRawInt().Value;
if (address < domain.Size)
{
var watch = Watch.GenerateWatch(
@ -322,36 +309,47 @@ namespace BizHawk.Client.EmuHawk
GetCurrentSize(),
Watch.StringToDisplayType(DisplayTypeDropDown.SelectedItem.ToString()),
BigEndianCheckBox.Checked,
NameBox.Text
);
NameBox.Text);
Cheat.CompareType comparisonType;
switch (CompareTypeDropDown.SelectedItem.ToString())
{
case "": comparisonType = Cheat.COMPARISONTYPE.NONE; break;
case "=": comparisonType = Cheat.COMPARISONTYPE.EQUAL; break;
case ">": comparisonType = Cheat.COMPARISONTYPE.GREATER_THAN; break;
case ">=": comparisonType = Cheat.COMPARISONTYPE.GREATER_THAN_OR_EQUAL; break;
case "<": comparisonType = Cheat.COMPARISONTYPE.LESS_THAN; break;
case "<=": comparisonType = Cheat.COMPARISONTYPE.LESS_THAN_OR_EQUAL; break;
case "!=": comparisonType = Cheat.COMPARISONTYPE.NOT_EQUAL; break;
default: comparisonType = Cheat.COMPARISONTYPE.NONE; break;
case "":
comparisonType = Cheat.CompareType.None;
break;
case "=":
comparisonType = Cheat.CompareType.Equal;
break;
case ">":
comparisonType = Cheat.CompareType.GreaterThan;
break;
case ">=":
comparisonType = Cheat.CompareType.GreaterThanOrEqual;
break;
case "<":
comparisonType = Cheat.CompareType.LessThan;
break;
case "<=":
comparisonType = Cheat.CompareType.LessThanOrEqual;
break;
case "!=":
comparisonType = Cheat.CompareType.NotEqual;
break;
default:
comparisonType = Cheat.CompareType.None;
break;
}
int? c = CompareBox.ToRawInt() == null ? null : (int?)CompareBox.ToRawInt().Value;
return new Cheat(
watch,
ValueBox.ToRawInt().Value,
CompareBox.ToRawInt() == null ? null : (int?)CompareBox.ToRawInt().Value,
true,
comparisonType
);
comparisonType);
}
else
{
MessageBox.Show(address.ToString() + " is not a valid address for the domain " + domain.Name, "Index out of range", MessageBoxButtons.OK, MessageBoxIcon.Warning);
MessageBox.Show(address + " is not a valid address for the domain " + domain.Name, "Index out of range", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return Cheat.Separator;
}
}
@ -372,7 +370,7 @@ namespace BizHawk.Client.EmuHawk
{
WatchValueBox compareBox = (WatchValueBox)sender;
PopulateComparisonTypeBox(String.IsNullOrWhiteSpace(compareBox.Text));
PopulateComparisonTypeBox(string.IsNullOrWhiteSpace(compareBox.Text));
}
/// <summary>
@ -381,30 +379,31 @@ namespace BizHawk.Client.EmuHawk
/// <param name="empty">True if drop down should be left empty</param>
private void PopulateComparisonTypeBox(bool empty = false)
{
// Don't need to do anything in this case
if(empty && this.CompareTypeDropDown.Items.Count == 1)
if (empty && CompareTypeDropDown.Items.Count == 1)
{
return;
}
// Don't need to do anything in this case
if (!empty && this.CompareTypeDropDown.Items.Count == 6)
if (!empty && CompareTypeDropDown.Items.Count == 6)
{
return;
}
this.CompareTypeDropDown.Items.Clear();
CompareTypeDropDown.Items.Clear();
if (empty)
{
this.CompareTypeDropDown.Items.AddRange(new object[] {
CompareTypeDropDown.Items.AddRange(new object[]
{
""
});
}
else
{
this.CompareTypeDropDown.Items.AddRange(new object[] {
CompareTypeDropDown.Items.AddRange(new object[]
{
"=",
">",
">=",
@ -414,8 +413,7 @@ namespace BizHawk.Client.EmuHawk
});
}
this.CompareTypeDropDown.SelectedIndex = 0;
CompareTypeDropDown.SelectedIndex = 0;
}
}
}

View File

@ -10,26 +10,25 @@ using BizHawk.Emulation.Common;
using BizHawk.Client.Common;
using BizHawk.Client.EmuHawk.ToolExtensions;
using BizHawk.Client.EmuHawk.WinFormExtensions;
using System.Diagnostics;
namespace BizHawk.Client.EmuHawk
{
public partial class Cheats : ToolFormBase, IToolForm
{
private const string NAME = "NamesColumn";
private const string ADDRESS = "AddressColumn";
private const string VALUE = "ValueColumn";
private const string COMPARE = "CompareColumn";
private const string ON = "OnColumn";
private const string DOMAIN = "DomainColumn";
private const string SIZE = "SizeColumn";
private const string ENDIAN = "EndianColumn";
private const string TYPE = "DisplayTypeColumn";
private const string COMPARISONTYPE = "ComparisonTypeColumn";
private const string NameColumn = "NamesColumn";
private const string AddressColumn = "AddressColumn";
private const string ValueColumn = "ValueColumn";
private const string CompareColumn = "CompareColumn";
private const string OnColumn = "OnColumn";
private const string DomainColumn = "DomainColumn";
private const string SizeColumn = "SizeColumn";
private const string EndianColumn = "EndianColumn";
private const string TypeColumn = "DisplayTypeColumn";
private const string ComparisonTypeColumn = "ComparisonTypeColumn";
private int _defaultWidth;
private int _defaultHeight;
private string _sortedColumn = "";
private string _sortedColumn;
private bool _sortReverse;
public Cheats()
@ -56,7 +55,7 @@ namespace BizHawk.Client.EmuHawk
[ConfigPersist]
public CheatsSettings Settings { get; set; }
public bool UpdateBefore { get { return false; } }
public bool UpdateBefore => false;
public void NewUpdate(ToolFormUpdateType type) { }
@ -87,7 +86,7 @@ namespace BizHawk.Client.EmuHawk
+ Global.CheatList.ActiveCount + " active";
}
public void LoadFileFromRecent(string path)
private void LoadFileFromRecent(string path)
{
var askResult = !Global.CheatList.Changes || AskSaveChanges();
if (askResult)
@ -194,7 +193,7 @@ namespace BizHawk.Client.EmuHawk
}
}
public void SaveConfigSettings()
private void SaveConfigSettings()
{
SaveColumnInfo(CheatListView, Settings.Columns);
@ -225,13 +224,6 @@ namespace BizHawk.Client.EmuHawk
LoadColumnInfo(CheatListView, Settings.Columns);
}
private void DoColumnToggle(string column)
{
Settings.Columns[column].Visible ^= true;
SaveColumnInfo(CheatListView, Settings.Columns);
LoadColumnInfo(CheatListView, Settings.Columns);
}
private void CheatListView_QueryItemText(int index, int column, out string text)
{
text = "";
@ -244,44 +236,60 @@ namespace BizHawk.Client.EmuHawk
switch (columnName)
{
case NAME:
case NameColumn:
text = Global.CheatList[index].Name;
break;
case ADDRESS:
case AddressColumn:
text = Global.CheatList[index].AddressStr;
break;
case VALUE:
case ValueColumn:
text = Global.CheatList[index].ValueStr;
break;
case COMPARE:
case CompareColumn:
text = Global.CheatList[index].CompareStr;
break;
case ON:
case OnColumn:
text = Global.CheatList[index].Enabled ? "*" : "";
break;
case DOMAIN:
case DomainColumn:
text = Global.CheatList[index].Domain.Name;
break;
case SIZE:
case SizeColumn:
text = Global.CheatList[index].Size.ToString();
break;
case ENDIAN:
case EndianColumn:
text = (Global.CheatList[index].BigEndian ?? false) ? "Big" : "Little";
break;
case TYPE:
case TypeColumn:
text = Watch.DisplayTypeToString(Global.CheatList[index].Type);
break;
case COMPARISONTYPE:
case ComparisonTypeColumn:
switch (Global.CheatList[index].ComparisonType)
{
case Cheat.COMPARISONTYPE.NONE : text = ""; break;
case Cheat.COMPARISONTYPE.EQUAL : text = "="; break;
case Cheat.COMPARISONTYPE.GREATER_THAN : text = ">"; break;
case Cheat.COMPARISONTYPE.GREATER_THAN_OR_EQUAL : text = ">="; break;
case Cheat.COMPARISONTYPE.LESS_THAN : text = "<"; break;
case Cheat.COMPARISONTYPE.LESS_THAN_OR_EQUAL : text = "<="; break;
case Cheat.COMPARISONTYPE.NOT_EQUAL : text = "!="; break;
default : text = ""; break;
case Cheat.CompareType.None:
text = "";
break;
case Cheat.CompareType.Equal:
text = "=";
break;
case Cheat.CompareType.GreaterThan:
text = ">";
break;
case Cheat.CompareType.GreaterThanOrEqual:
text = ">=";
break;
case Cheat.CompareType.LessThan:
text = "<";
break;
case Cheat.CompareType.LessThanOrEqual:
text = "<=";
break;
case Cheat.CompareType.NotEqual:
text = "!=";
break;
default:
text = "";
break;
}
break;
@ -303,10 +311,7 @@ namespace BizHawk.Client.EmuHawk
}
}
private IEnumerable<int> SelectedIndices
{
get { return CheatListView.SelectedIndices.Cast<int>(); }
}
private IEnumerable<int> SelectedIndices => CheatListView.SelectedIndices.Cast<int>();
private IEnumerable<Cheat> SelectedItems
{
@ -601,8 +606,7 @@ namespace BizHawk.Client.EmuHawk
CheatsMenu.Items.Remove(
CheatsMenu.Items
.OfType<ToolStripMenuItem>()
.First(x => x.Name == "GeneratedColumnsSubMenu")
);
.First(x => x.Name == "GeneratedColumnsSubMenu"));
CheatsMenu.Items.Add(Settings.Columns.GenerateColumnsMenu(ColumnToggleCallback));
@ -718,16 +722,16 @@ namespace BizHawk.Client.EmuHawk
{
Columns = new ColumnList
{
new Column { Name = NAME, Visible = true, Index = 0, Width = 128 },
new Column { Name = ADDRESS, Visible = true, Index = 1, Width = 60 },
new Column { Name = VALUE, Visible = true, Index = 2, Width = 59 },
new Column { Name = COMPARE, Visible = true, Index = 3, Width = 59 },
new Column { Name = COMPARISONTYPE, Visible = true, Index = 4, Width = 60 },
new Column { Name = ON, Visible = false, Index = 5, Width = 28 },
new Column { Name = DOMAIN, Visible = true, Index = 6, Width = 55 },
new Column { Name = SIZE, Visible = true, Index = 7, Width = 55 },
new Column { Name = ENDIAN, Visible = false, Index = 8, Width = 55 },
new Column { Name = TYPE, Visible = false, Index = 9, Width = 55 }
new Column { Name = NameColumn, Visible = true, Index = 0, Width = 128 },
new Column { Name = AddressColumn, Visible = true, Index = 1, Width = 60 },
new Column { Name = ValueColumn, Visible = true, Index = 2, Width = 59 },
new Column { Name = CompareColumn, Visible = true, Index = 3, Width = 59 },
new Column { Name = ComparisonTypeColumn, Visible = true, Index = 4, Width = 60 },
new Column { Name = OnColumn, Visible = false, Index = 5, Width = 28 },
new Column { Name = DomainColumn, Visible = true, Index = 6, Width = 55 },
new Column { Name = SizeColumn, Visible = true, Index = 7, Width = 55 },
new Column { Name = EndianColumn, Visible = false, Index = 8, Width = 55 },
new Column { Name = TypeColumn, Visible = false, Index = 9, Width = 55 }
};
}