Clean up `NESSyncSettings.OkBtn_Click` (resolves #3856)

This commit is contained in:
James Groom 2024-02-01 15:11:52 +00:00 committed by GitHub
parent 484e1fee78
commit 103fb38322
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 31 additions and 21 deletions

View File

@ -6,9 +6,12 @@ using System.Windows.Forms;
using BizHawk.Client.Common; using BizHawk.Client.Common;
using BizHawk.Common.BufferExtensions; using BizHawk.Common.BufferExtensions;
using BizHawk.Common.StringExtensions;
using BizHawk.Emulation.Common; using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Nintendo.NES; using BizHawk.Emulation.Cores.Nintendo.NES;
using static BizHawk.Common.StringExtensions.NumericStringExtensions;
namespace BizHawk.Client.EmuHawk namespace BizHawk.Client.EmuHawk
{ {
public partial class NESSyncSettingsForm : Form, IDialogParent public partial class NESSyncSettingsForm : Form, IDialogParent
@ -61,30 +64,37 @@ namespace BizHawk.Client.EmuHawk
private void OkBtn_Click(object sender, EventArgs e) private void OkBtn_Click(object sender, EventArgs e)
{ {
var old = _syncSettings.RegionOverride; static byte[]/*?*/ ParseInitRAMPattern(string/*?*/ ss)
_syncSettings.RegionOverride = (NES.NESSyncSettings.Region) {
Enum.Parse( if (string.IsNullOrWhiteSpace(ss)) return null;
if (!ss.All(NumericStringExtensions.IsHex))
{
//TODO warn
return null;
}
var s = ss.AsSpan();
var a = new byte[(s.Length + 1) / 2];
var iArr = 0;
var iStr = 0;
if (s.Length % 2 is 1) a[iArr++] = ParseU8FromHex(s.Slice(start: iStr++, length: 1));
while (iStr < s.Length)
{
a[iArr++] = ParseU8FromHex(s.Slice(start: iStr, length: 2));
iStr += 2;
}
return a;
}
var newInitRAMPattern = ParseInitRAMPattern(RamPatternOverrideBox.Text);
var newRegionOverride = (NES.NESSyncSettings.Region) Enum.Parse(
typeof(NES.NESSyncSettings.Region), typeof(NES.NESSyncSettings.Region),
(string)RegionComboBox.SelectedItem); (string)RegionComboBox.SelectedItem);
var oldRam = _syncSettings.InitialWRamStatePattern; var changed = _dataTableDictionary?.WasModified is true
|| newRegionOverride != _syncSettings.RegionOverride
if (!string.IsNullOrWhiteSpace(RamPatternOverrideBox.Text)) || !newInitRAMPattern.SequenceEqual(_syncSettings.InitialWRamStatePattern);
{ _syncSettings.InitialWRamStatePattern = newInitRAMPattern;
_syncSettings.InitialWRamStatePattern = Enumerable.Range(0, RamPatternOverrideBox.Text.Length) _syncSettings.RegionOverride = newRegionOverride;
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(RamPatternOverrideBox.Text.Substring(x, 2), 16))
.ToArray();
}
else
{
_syncSettings.InitialWRamStatePattern = null;
}
bool changed = (_dataTableDictionary != null && _dataTableDictionary.WasModified) ||
old != _syncSettings.RegionOverride ||
!oldRam.SequenceEqual(_syncSettings.InitialWRamStatePattern);
DialogResult = DialogResult.OK; DialogResult = DialogResult.OK;
if (changed) if (changed)
{ {