Move `SettingsAdapter` creation to `PutCore{S,SyncS}ettings` callsite

This commit is contained in:
YoshiRulz 2021-11-20 05:17:33 +10:00 committed by James Groom
parent 60cb9eeac9
commit 2cd6510784
34 changed files with 68 additions and 53 deletions

View File

@ -1,3 +1,5 @@
using System;
using BizHawk.Client.Common;
using BizHawk.Emulation.Common;
@ -8,8 +10,12 @@ namespace BizHawk.Client.EmuHawk
/// <remarks>only referenced from <see cref="GenericCoreConfig"/></remarks>
IEmulator Emulator { get; }
void PutCoreSettings(object o);
/// <exception cref="InvalidOperationException">loaded emulator is not instance of <typeparamref name="T"/></exception>
SettingsAdapter GetSettingsAdapterForLoadedCore<T>()
where T : IEmulator;
void PutCoreSyncSettings(object o);
void PutCoreSettings(object o, SettingsAdapter settable);
void PutCoreSyncSettings(object o, SettingsAdapter settable);
}
}

View File

@ -152,7 +152,8 @@ namespace BizHawk.Client.EmuHawk
var ss = ((N64) Emulator!).GetSyncSettings();
var glidenSS = ss.GLideN64Plugin;
foreach (var pi in props) pi.SetValue(obj: glidenSS, value: RandomElem(propDict[pi], rng));
((MainForm) MainForm).PutCoreSyncSettings(ss);
var mf = (MainForm) MainForm;
mf.PutCoreSyncSettings(ss, mf.GetSettingsAdapterForLoadedCore<N64>());
}
SzButtonEx btnLightFuzz = new() { Size = new(200, 23), Text = "--> randomise some props" };
btnLightFuzz.Click += (_, _) => Fuzz(limit: true);

View File

@ -1732,7 +1732,7 @@ namespace BizHawk.Client.EmuHawk
{
var ss = coleco.GetSyncSettings();
ss.SkipBiosIntro ^= true;
PutCoreSyncSettings(ss);
PutCoreSyncSettings(ss, GetSettingsAdapterForLoadedCore<ColecoVision>());
}
}
@ -1742,7 +1742,7 @@ namespace BizHawk.Client.EmuHawk
{
var ss = coleco.GetSyncSettings();
ss.UseSGM ^= true;
PutCoreSyncSettings(ss);
PutCoreSyncSettings(ss, GetSettingsAdapterForLoadedCore<ColecoVision>());
}
}

View File

@ -2411,9 +2411,8 @@ namespace BizHawk.Client.EmuHawk
/// <summary>
/// send core settings to emu, setting reboot flag if needed
/// </summary>
public void PutCoreSettings(object o)
public void PutCoreSettings(object o, SettingsAdapter settable)
{
var settable = new SettingsAdapter(Emulator);
if (!settable.HasSettings)
return;
var dirty = settable.PutSettings(o);
@ -2427,9 +2426,8 @@ namespace BizHawk.Client.EmuHawk
/// <summary>
/// send core sync settings to emu, setting reboot flag if needed
/// </summary>
public void PutCoreSyncSettings(object o)
public void PutCoreSyncSettings(object o, SettingsAdapter settable)
{
var settable = new SettingsAdapter(Emulator);
if (MovieSession.Movie.IsActive())
{
AddOnScreenMessage("Attempt to change sync-relevant settings while recording BLOCKED.");
@ -2444,6 +2442,16 @@ namespace BizHawk.Client.EmuHawk
}
}
public SettingsAdapter GetSettingsAdapterForLoadedCore<T>()
where T : IEmulator
{
if (Emulator is not T) throw new InvalidOperationException();
return GetSettingsAdapterForLoadedCoreUntyped();
}
public SettingsAdapter GetSettingsAdapterForLoadedCoreUntyped()
=> new(Emulator);
private void SaveConfig(string path = "")
{
if (Config.SaveWindowPosition)

View File

@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.Port1 = Port1ComboBox.SelectedItem.ToString();
_syncSettings.Port2 = Port2ComboBox.SelectedItem.ToString();
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<A7800Hawk>());
}
DialogResult = DialogResult.OK;

View File

@ -39,7 +39,7 @@ namespace BizHawk.Client.EmuHawk
if (changed)
{
_syncSettings.Filter = Port1ComboBox.SelectedItem.ToString();
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<A7800Hawk>());
}
DialogResult = DialogResult.OK;

View File

@ -51,7 +51,7 @@ namespace BizHawk.Client.EmuHawk
_settings.TapeVolume = tapeVolumetrackBar.Value;
_settings.AYVolume = ayVolumetrackBar.Value;
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>());
}
DialogResult = DialogResult.OK;
Close();

View File

@ -59,7 +59,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.DeterministicEmulation = determEmucheckBox1.Checked;
_syncSettings.AutoStartStopTape = autoLoadcheckBox1.Checked;
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>());
DialogResult = DialogResult.OK;
Close();

View File

@ -40,7 +40,7 @@ namespace BizHawk.Client.EmuHawk
{
_settings.OSDMessageVerbosity = (AmstradCPC.OSDVerbosity)Enum.Parse(typeof(AmstradCPC.OSDVerbosity), osdMessageVerbositycomboBox1.SelectedItem.ToString());
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<AmstradCPC>());
DialogResult = DialogResult.OK;
Close();

View File

@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.Port1 = Port1ComboBox.SelectedItem.ToString();
_syncSettings.Port2 = Port2ComboBox.SelectedItem.ToString();
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<ColecoVision>());
}
DialogResult = DialogResult.OK;

View File

@ -68,7 +68,7 @@ namespace BizHawk.Client.EmuHawk
gambatte.PutSettings(s);
if (dlg.SyncSettingsChanged)
{
mainForm.PutCoreSyncSettings(ss);
mainForm.PutCoreSyncSettings(ss, mainForm.GetSettingsAdapterForLoadedCore<GambatteLink>());
}
}
return result;

View File

@ -32,7 +32,7 @@ namespace BizHawk.Client.EmuHawk
gb.PutSettings(s);
if (dlg.gbPrefControl1.SyncSettingsChanged)
{
mainForm.PutCoreSyncSettings(ss);
mainForm.PutCoreSyncSettings(ss, mainForm.GetSettingsAdapterForLoadedCore<Gameboy>());
}
}
return result;

View File

@ -316,7 +316,7 @@ namespace BizHawk.Client.EmuHawk
_settings.SetCustomPalette(colors);
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<Sameboy>());
DialogResult = DialogResult.OK;
Close();

View File

@ -8,6 +8,8 @@ namespace BizHawk.Client.EmuHawk
{
public partial class GenericCoreConfig : Form
{
private readonly SettingsAdapter _settable;
private readonly IMainFormForConfig _mainForm;
private object _s;
private object _ss;
@ -23,17 +25,11 @@ namespace BizHawk.Client.EmuHawk
InitializeComponent();
_mainForm = mainForm;
var settable = new SettingsAdapter(_mainForm.Emulator);
_settable = ((MainForm) _mainForm).GetSettingsAdapterForLoadedCoreUntyped(); //HACK
if (settable.HasSettings && !ignoreSettings)
{
_s = settable.GetSettings();
}
if (_settable.HasSettings && !ignoreSettings) _s = _settable.GetSettings();
if (settable.HasSyncSettings && !ignoreSyncSettings)
{
_ss = settable.GetSyncSettings();
}
if (_settable.HasSyncSettings && !ignoreSyncSettings) _ss = _settable.GetSyncSettings();
if (_s != null)
{
@ -65,12 +61,12 @@ namespace BizHawk.Client.EmuHawk
{
if (_s != null && _settingsChanged)
{
_mainForm.PutCoreSettings(_s);
_mainForm.PutCoreSettings(_s, _settable);
}
if (_ss != null && _syncSettingsChanged)
{
_mainForm.PutCoreSyncSettings(_ss);
_mainForm.PutCoreSyncSettings(_ss, _settable);
}
DialogResult = DialogResult.OK;

View File

@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.Port1 = Port1ComboBox.SelectedItem.ToString();
_syncSettings.Port2 = Port2ComboBox.SelectedItem.ToString();
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<Intellivision>());
}
DialogResult = DialogResult.OK;

View File

@ -52,7 +52,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.Controllers[c.ControllerNumber - 1].PakType = c.PakType;
});
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<N64>());
DialogResult = DialogResult.OK;
Close();

View File

@ -123,8 +123,9 @@ namespace BizHawk.Client.EmuHawk
if (_emulator is N64)
{
_mainForm.PutCoreSettings(_s);
_mainForm.PutCoreSyncSettings(_ss);
var settable = _mainForm.GetSettingsAdapterForLoadedCore<N64>();
_mainForm.PutCoreSettings(_s, settable);
_mainForm.PutCoreSyncSettings(_ss, settable);
}
else
{

View File

@ -149,7 +149,7 @@ namespace BizHawk.Client.EmuHawk
_settings.BackgroundColor &= 0x00FFFFFF;
}
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
Close();
}

View File

@ -92,7 +92,7 @@ namespace BizHawk.Client.EmuHawk
DialogResult = DialogResult.OK;
if (changed)
{
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
}
}

View File

@ -42,7 +42,7 @@ namespace BizHawk.Client.EmuHawk
_settings.VSDipswitches.Dip_Switch_7 = Dipswitch7CheckBox.Checked;
_settings.VSDipswitches.Dip_Switch_8 = Dipswitch8CheckBox.Checked;
_mainForm.PutCoreSyncSettings(_settings);
_mainForm.PutCoreSyncSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
Close();
}

View File

@ -53,7 +53,7 @@ namespace BizHawk.Client.EmuHawk
if (changed)
{
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<NES>());
}
DialogResult = DialogResult.OK;

View File

@ -106,7 +106,7 @@ namespace BizHawk.Client.EmuHawk
private void ButtonOk_Click(object sender, EventArgs e)
{
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<QuickNES>());
DialogResult = DialogResult.OK;
Close();
}

View File

@ -141,7 +141,7 @@ namespace BizHawk.Client.EmuHawk
private void BtnOk_Click(object sender, EventArgs e)
{
_syncSettings.FIOConfig = UserConfigFromGui();
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<Octoshock>());
DialogResult = DialogResult.OK;
Close();

View File

@ -125,8 +125,9 @@ namespace BizHawk.Client.EmuHawk
SyncSettingsFromGui(_settings, _syncSettings);
_settings.Validate();
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSyncSettings(_syncSettings);
var settable = _mainForm.GetSettingsAdapterForLoadedCore<Octoshock>();
_mainForm.PutCoreSettings(_settings, settable);
_mainForm.PutCoreSyncSettings(_syncSettings, settable);
DialogResult = DialogResult.OK;
Close();

View File

@ -257,7 +257,7 @@ namespace BizHawk.Client.EmuHawk
{
if (_emulator is TEmulator)
{
_mainForm.PutCoreSyncSettings(o);
_mainForm.PutCoreSyncSettings(o, _mainForm.GetSettingsAdapterForLoadedCore<TEmulator>());
}
else
{

View File

@ -41,7 +41,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.RightPort = (BsnesApi.BSNES_INPUT_DEVICE) Port2ComboBox.SelectedIndex;
_syncSettings.LimitAnalogChangeSensitivity = LimitAnalogChangeCheckBox.Checked;
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<BsnesCore>());
}
DialogResult = DialogResult.OK;

View File

@ -65,8 +65,9 @@ namespace BizHawk.Client.EmuHawk
s.ShowBG4_0 = dlg.ShowBg4_0;
s.ShowBG4_1 = dlg.ShowBg4_1;
mainForm.PutCoreSettings(s);
mainForm.PutCoreSyncSettings(ss);
var settable = mainForm.GetSettingsAdapterForLoadedCore<BsnesCore>();
mainForm.PutCoreSettings(s, settable);
mainForm.PutCoreSyncSettings(ss, settable);
}
return result;
}

View File

@ -44,7 +44,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.RightPort = (LibsnesControllerDeck.ControllerType)Enum.Parse(typeof(LibsnesControllerDeck.ControllerType), Port2ComboBox.SelectedItem.ToString());
_syncSettings.LimitAnalogChangeSensitivity = LimitAnalogChangeCheckBox.Checked;
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<LibsnesCore>());
}
DialogResult = DialogResult.OK;

View File

@ -48,8 +48,9 @@ namespace BizHawk.Client.EmuHawk
s.ShowBG3_0 = s.ShowBG3_1 = dlg.ShowBg3;
s.ShowBG4_0 = s.ShowBG4_1 = dlg.ShowBg4;
mainForm.PutCoreSettings(s);
mainForm.PutCoreSyncSettings(ss);
var settable = mainForm.GetSettingsAdapterForLoadedCore<LibsnesCore>();
mainForm.PutCoreSettings(s, settable);
mainForm.PutCoreSyncSettings(ss, settable);
}
return result;
}

View File

@ -32,7 +32,7 @@ namespace BizHawk.Client.EmuHawk
_settings.BGColor = (uint)BackgroundPanel.BackColor.ToArgb();
_settings.ForeColor = (uint)ForeGroundPanel.BackColor.ToArgb();
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<TI83>());
DialogResult = DialogResult.OK;
Close();

View File

@ -55,7 +55,7 @@ namespace BizHawk.Client.EmuHawk
_settings.EarVolume = earVolumetrackBar.Value;
_settings.AYVolume = ayVolumetrackBar.Value;
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
}
DialogResult = DialogResult.OK;
Close();

View File

@ -61,7 +61,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.DeterministicEmulation = determEmucheckBox1.Checked;
_syncSettings.AutoLoadTape = autoLoadcheckBox1.Checked;
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
}
DialogResult = DialogResult.OK;
Close();

View File

@ -103,7 +103,7 @@ namespace BizHawk.Client.EmuHawk
_syncSettings.JoystickType2 = (JoystickType)Enum.Parse(typeof(JoystickType), Port2ComboBox.SelectedItem.ToString());
_syncSettings.JoystickType3 = (JoystickType)Enum.Parse(typeof(JoystickType), Port3ComboBox.SelectedItem.ToString());
_mainForm.PutCoreSyncSettings(_syncSettings);
_mainForm.PutCoreSyncSettings(_syncSettings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
DialogResult = DialogResult.OK;
Close();

View File

@ -58,7 +58,7 @@ namespace BizHawk.Client.EmuHawk
_settings.BackgroundColor = _bgColor;
_settings.UseCoreBorderForBackground = checkBoxShowCoreBrdColor.Checked;
_mainForm.PutCoreSettings(_settings);
_mainForm.PutCoreSettings(_settings, _mainForm.GetSettingsAdapterForLoadedCore<ZXSpectrum>());
DialogResult = DialogResult.OK;
Close();