using StoicGoose.Common.Utilities; using System.Collections.Generic; using System.ComponentModel; public sealed class Configuration : ConfigurationBase { [DisplayName("General")] [Description("General settings.")] public GeneralConfiguration General { get; set; } = new GeneralConfiguration(); [DisplayName("Video")] [Description("Settings related to video output.")] public VideoConfiguration Video { get; set; } = new VideoConfiguration(); [DisplayName("Sound")] [Description("Settings related to sound output.")] public SoundConfiguration Sound { get; set; } = new SoundConfiguration(); [DisplayName("Input")] [Description("Settings related to emulation input.")] public InputConfiguration Input { get; set; } = new InputConfiguration(); } public sealed class GeneralConfiguration : ConfigurationBase { [DisplayName("Prefer Original WS")] [Description("Prefer emulation of the original non-Color system.")] public bool PreferOriginalWS { get; set; } = false; [DisplayName("Use Bootstrap ROM")] [Description("Toggle using WonderSwan bootstrap ROM images.")] public bool UseBootstrap { get; set; } = false; [DisplayName("WS Bootstrap ROM Path")] [Description("Path to the WonderSwan bootstrap ROM image to use.")] public string BootstrapFile { get; set; } = string.Empty; [DisplayName("WSC Bootstrap ROM Path")] [Description("Path to the WonderSwan Color bootstrap ROM image to use.")] public string BootstrapFileWSC { get; set; } = string.Empty; [DisplayName("Limit FPS")] [Description("Toggle limiting the framerate to the system's native ~75.47 Hz.")] public bool LimitFps { get; set; } = true; [DisplayName("Enable Cheats")] [Description("Toggle using the cheat system.")] public bool EnableCheats { get; set; } = true; [DisplayName("Recent Files")] [Description("List of recently loaded files.")] public List RecentFiles { get; set; } = new List(15); } public sealed class VideoConfiguration : ConfigurationBase { [DisplayName("Screen Size")] [Description("Size of the emulated screen, in times original display resolution.")] public int ScreenSize { get; set; } = 3; [DisplayName("Shader")] [Description("Currently selected shader.")] public string Shader { get; set; } = string.Empty; [DisplayName("Brightness")] [Description("Adjust the brightness of the emulated screen, in percent.")] [Range(-100, 100)] public int Brightness { get; set; } = 0; [DisplayName("Contrast")] [Description("Adjust the contrast of the emulated screen, in percent.")] [Range(0, 200)] public int Contrast { get; set; } = 100; [DisplayName("Saturation")] [Description("Adjust the saturation of the emulated screen, in percent.")] [Range(0, 200)] public int Saturation { get; set; } = 100; } public sealed class SoundConfiguration : ConfigurationBase { [DisplayName("Mute")] [Description("Toggles muting all sound output.")] public bool Mute { get; set; } = false; [DisplayName("Low-Pass Filter")] [Description("Toggles low-pass filter for all sound output.")] public bool LowPassFilter { get; set; } = true; } public sealed class InputConfiguration : ConfigurationBase { [DisplayName("Automatic Remapping")] [Description("Automatically remap X-/Y-pads with game orientation.")] public bool AutoRemap { get; set; } = true; [DisplayName("Game Controls")] [Description("Controls related to game input, i.e. X-/Y-pads, etc.")] public Dictionary> GameControls { get; set; } = new Dictionary>(); [DisplayName("System Controls")] [Description("Controls related to hardware functions, i.e. volume button.")] public Dictionary> SystemControls { get; set; } = new Dictionary>(); }