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.Common.BufferExtensions;
using BizHawk.Common.StringExtensions;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Nintendo.NES;
using static BizHawk.Common.StringExtensions.NumericStringExtensions;
namespace BizHawk.Client.EmuHawk
{
public partial class NESSyncSettingsForm : Form, IDialogParent
@ -61,30 +64,37 @@ namespace BizHawk.Client.EmuHawk
private void OkBtn_Click(object sender, EventArgs e)
{
var old = _syncSettings.RegionOverride;
_syncSettings.RegionOverride = (NES.NESSyncSettings.Region)
Enum.Parse(
static byte[]/*?*/ ParseInitRAMPattern(string/*?*/ ss)
{
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),
(string)RegionComboBox.SelectedItem);
var oldRam = _syncSettings.InitialWRamStatePattern;
if (!string.IsNullOrWhiteSpace(RamPatternOverrideBox.Text))
{
_syncSettings.InitialWRamStatePattern = Enumerable.Range(0, RamPatternOverrideBox.Text.Length)
.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);
var changed = _dataTableDictionary?.WasModified is true
|| newRegionOverride != _syncSettings.RegionOverride
|| !newInitRAMPattern.SequenceEqual(_syncSettings.InitialWRamStatePattern);
_syncSettings.InitialWRamStatePattern = newInitRAMPattern;
_syncSettings.RegionOverride = newRegionOverride;
DialogResult = DialogResult.OK;
if (changed)
{