BizHawk/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.ISettable.cs

101 lines
2.3 KiB
C#
Raw Normal View History

using BizHawk.Emulation.Common;
namespace BizHawk.Emulation.Cores.PCEngine
{
public sealed partial class PCEngine : ISettable<PCEngine.PCESettings, PCEngine.PCESyncSettings>
{
public PCESettings GetSettings()
{
return Settings.Clone();
}
public PCESyncSettings GetSyncSettings()
{
return _syncSettings.Clone();
}
public bool PutSettings(PCESettings o)
{
bool ret;
if (o.ArcadeCardRewindHack != Settings.ArcadeCardRewindHack
|| o.EqualizeVolume != Settings.EqualizeVolume)
{
ret = true;
}
else
{
ret = false;
}
Settings = o;
return ret;
}
public bool PutSyncSettings(PCESyncSettings o)
{
bool ret = PCESyncSettings.NeedsReboot(o, _syncSettings);
_syncSettings = o;
// SetControllerButtons(); // not safe to change the controller during emulation, so instead make it a reboot event
return ret;
}
internal PCESettings Settings;
private PCESyncSettings _syncSettings;
public class PCESettings
{
public bool ShowBG1 = true;
public bool ShowOBJ1 = true;
public bool ShowBG2 = true;
public bool ShowOBJ2 = true;
// these three require core reboot to use
public bool SpriteLimit = false;
public bool EqualizeVolume = false;
public bool ArcadeCardRewindHack = true;
public PCESettings Clone()
{
return (PCESettings)MemberwiseClone();
}
}
public class PCESyncSettings
{
public ControllerSetting[] Controllers =
{
new ControllerSetting { IsConnected = true },
new ControllerSetting { IsConnected = false },
new ControllerSetting { IsConnected = false },
new ControllerSetting { IsConnected = false },
new ControllerSetting { IsConnected = false }
};
public PCESyncSettings Clone()
{
var ret = new PCESyncSettings();
for (int i = 0; i < Controllers.Length; i++)
{
ret.Controllers[i].IsConnected = Controllers[i].IsConnected;
}
return ret;
}
public class ControllerSetting
{
public bool IsConnected { get; set; }
}
public static bool NeedsReboot(PCESyncSettings x, PCESyncSettings y)
{
for (int i = 0; i < x.Controllers.Length; i++)
{
if (x.Controllers[i].IsConnected != y.Controllers[i].IsConnected)
return true;
}
return false;
}
}
}
}