Resolve TODO re: frontend hotkey config
breaks config backcompat
This commit is contained in:
parent
335be13fd8
commit
ca71bb2faf
|
@ -1,272 +1,209 @@
|
||||||
using System.Collections;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
// TODO [LARP] - It's pointless and annoying to store such a big structure filled with static information
|
using BizHawk.Common;
|
||||||
// use this instead
|
using BizHawk.Common.CollectionExtensions;
|
||||||
// public class UserBinding
|
|
||||||
// {
|
|
||||||
// public string DisplayName;
|
|
||||||
// public string Bindings;
|
|
||||||
// }
|
|
||||||
// ...also. We should consider using something other than DisplayName for keying, maybe make a KEYNAME distinct from displayname.
|
|
||||||
// displayname is OK for now though.
|
|
||||||
namespace BizHawk.Client.Common
|
namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
public class Binding
|
public class HotkeyInfo
|
||||||
{
|
{
|
||||||
public string DisplayName { get; set; }
|
public static readonly IReadOnlyDictionary<string, HotkeyInfo> AllHotkeys;
|
||||||
public string Bindings { get; set; }
|
|
||||||
public string DefaultBinding { get; set; }
|
|
||||||
public string TabGroup { get; set; }
|
|
||||||
public string ToolTip { get; set; }
|
|
||||||
public int Ordinal { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
[Newtonsoft.Json.JsonObject]
|
public static readonly IReadOnlyList<string> Groupings;
|
||||||
public class BindingCollection : IEnumerable<Binding>
|
|
||||||
{
|
|
||||||
public List<Binding> Bindings { get; }
|
|
||||||
|
|
||||||
[Newtonsoft.Json.JsonConstructor]
|
static HotkeyInfo()
|
||||||
public BindingCollection(List<Binding> bindings)
|
|
||||||
{
|
{
|
||||||
Bindings = bindings;
|
var dict = new Dictionary<string, HotkeyInfo>();
|
||||||
|
var i = 0;
|
||||||
|
#if true
|
||||||
|
void Bind(string tabGroup, string displayName, string defaultBinding = "", string toolTip = "")
|
||||||
|
=> dict.Add(displayName, new(tabGroup: tabGroup, i++, displayName: displayName, toolTip: toolTip, defaultBinding: defaultBinding));
|
||||||
|
#else //TODO switch to a sort key more resilient than the DisplayName, like with this example (need to update `Config.HotkeyBindings["A Hotkey"]` usages across codebase; please switch it to a `Config.GetHotkeyBindings` method so it can return "<not bound>")
|
||||||
|
void Bind(string tabGroup, string displayName, string defaultBinding = "", string toolTip = "")
|
||||||
|
=> dict.Add($"{tabGroup}__{displayName}".Replace(" ", ""), new(tabGroup: tabGroup, i++, displayName: displayName, toolTip: toolTip, defaultBinding: defaultBinding));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Bind("General", "Frame Advance", "F");
|
||||||
|
Bind("General", "Rewind", "Shift+R");
|
||||||
|
Bind("General", "Pause", "Pause");
|
||||||
|
Bind("General", "Fast Forward", "Tab");
|
||||||
|
Bind("General", "Turbo", "Shift+Tab");
|
||||||
|
Bind("General", "Toggle Throttle");
|
||||||
|
Bind("General", "Soft Reset");
|
||||||
|
Bind("General", "Hard Reset");
|
||||||
|
Bind("General", "Autofire");
|
||||||
|
Bind("General", "Autohold");
|
||||||
|
Bind("General", "Clear Autohold");
|
||||||
|
Bind("General", "Screenshot", "F12");
|
||||||
|
Bind("General", "Full Screen", "Alt+Enter");
|
||||||
|
Bind("General", "Open ROM", "Ctrl+O");
|
||||||
|
Bind("General", "Close ROM", "Ctrl+W");
|
||||||
|
Bind("General", "Load Last ROM");
|
||||||
|
Bind("General", "Flush SaveRAM", "Ctrl+S");
|
||||||
|
Bind("General", "Display FPS");
|
||||||
|
Bind("General", "Frame Counter");
|
||||||
|
Bind("General", "Lag Counter");
|
||||||
|
Bind("General", "Input Display");
|
||||||
|
Bind("General", "Toggle BG Input");
|
||||||
|
Bind("General", "Toggle Menu");
|
||||||
|
Bind("General", "Volume Up");
|
||||||
|
Bind("General", "Volume Down");
|
||||||
|
Bind("General", "Record A/V");
|
||||||
|
Bind("General", "Stop A/V");
|
||||||
|
Bind("General", "Larger Window", "Alt+Up");
|
||||||
|
Bind("General", "Smaller Window", "Alt+Down");
|
||||||
|
Bind("General", "Increase Speed", "Equals");
|
||||||
|
Bind("General", "Decrease Speed", "Minus");
|
||||||
|
Bind("General", "Reset Speed", "Shift+Equals");
|
||||||
|
Bind("General", "Reboot Core", "Ctrl+R");
|
||||||
|
Bind("General", "Toggle Sound");
|
||||||
|
Bind("General", "Exit Program");
|
||||||
|
Bind("General", "Screen Raw to Clipboard", "Ctrl+C");
|
||||||
|
Bind("General", "Screen Client to Clipboard", "Ctrl+Shift+C");
|
||||||
|
Bind("General", "Toggle Skip Lag Frame");
|
||||||
|
Bind("General", "Toggle Key Priority");
|
||||||
|
Bind("General", "Frame Inch");
|
||||||
|
|
||||||
|
Bind("Save States", "Save State 1", "Shift+F1");
|
||||||
|
Bind("Save States", "Save State 2", "Shift+F2");
|
||||||
|
Bind("Save States", "Save State 3", "Shift+F3");
|
||||||
|
Bind("Save States", "Save State 4", "Shift+F4");
|
||||||
|
Bind("Save States", "Save State 5", "Shift+F5");
|
||||||
|
Bind("Save States", "Save State 6", "Shift+F6");
|
||||||
|
Bind("Save States", "Save State 7", "Shift+F7");
|
||||||
|
Bind("Save States", "Save State 8", "Shift+F8");
|
||||||
|
Bind("Save States", "Save State 9", "Shift+F9");
|
||||||
|
Bind("Save States", "Save State 0", "Shift+F10");
|
||||||
|
Bind("Save States", "Load State 1", "F1");
|
||||||
|
Bind("Save States", "Load State 2", "F2");
|
||||||
|
Bind("Save States", "Load State 3", "F3");
|
||||||
|
Bind("Save States", "Load State 4", "F4");
|
||||||
|
Bind("Save States", "Load State 5", "F5");
|
||||||
|
Bind("Save States", "Load State 6", "F6");
|
||||||
|
Bind("Save States", "Load State 7", "F7");
|
||||||
|
Bind("Save States", "Load State 8", "F8");
|
||||||
|
Bind("Save States", "Load State 9", "F9");
|
||||||
|
Bind("Save States", "Load State 0", "F10");
|
||||||
|
Bind("Save States", "Select State 1", "Number1");
|
||||||
|
Bind("Save States", "Select State 2", "Number2");
|
||||||
|
Bind("Save States", "Select State 3", "Number3");
|
||||||
|
Bind("Save States", "Select State 4", "Number4");
|
||||||
|
Bind("Save States", "Select State 5", "Number5");
|
||||||
|
Bind("Save States", "Select State 6", "Number6");
|
||||||
|
Bind("Save States", "Select State 7", "Number7");
|
||||||
|
Bind("Save States", "Select State 8", "Number8");
|
||||||
|
Bind("Save States", "Select State 9", "Number9");
|
||||||
|
Bind("Save States", "Select State 0", "Number0");
|
||||||
|
Bind("Save States", "Quick Load", "P");
|
||||||
|
Bind("Save States", "Quick Save", "I");
|
||||||
|
Bind("Save States", "Save Named State");
|
||||||
|
Bind("Save States", "Load Named State");
|
||||||
|
Bind("Save States", "Previous Slot");
|
||||||
|
Bind("Save States", "Next Slot");
|
||||||
|
|
||||||
|
Bind("Movie", "Toggle read-only", "Q");
|
||||||
|
Bind("Movie", "Play Movie");
|
||||||
|
Bind("Movie", "Record Movie");
|
||||||
|
Bind("Movie", "Stop Movie");
|
||||||
|
Bind("Movie", "Play from beginning");
|
||||||
|
Bind("Movie", "Save Movie");
|
||||||
|
|
||||||
|
Bind("Tools", "RAM Watch");
|
||||||
|
Bind("Tools", "RAM Search");
|
||||||
|
Bind("Tools", "Hex Editor");
|
||||||
|
Bind("Tools", "Trace Logger");
|
||||||
|
Bind("Tools", "Lua Console");
|
||||||
|
Bind("Tools", "Cheats");
|
||||||
|
Bind("Tools", "TAStudio");
|
||||||
|
Bind("Tools", "ToolBox", "Shift+T");
|
||||||
|
Bind("Tools", "Virtual Pad");
|
||||||
|
|
||||||
|
Bind("RAM Search", "New Search");
|
||||||
|
Bind("RAM Search", "Do Search");
|
||||||
|
Bind("RAM Search", "Previous Compare To");
|
||||||
|
Bind("RAM Search", "Next Compare To");
|
||||||
|
Bind("RAM Search", "Previous Operator");
|
||||||
|
Bind("RAM Search", "Next Operator");
|
||||||
|
|
||||||
|
Bind("TAStudio", "Add Branch", "Alt+Insert");
|
||||||
|
Bind("TAStudio", "Delete Branch", "Alt+Delete");
|
||||||
|
Bind("TAStudio", "Show Cursor");
|
||||||
|
Bind("TAStudio", "Toggle Follow Cursor", "Shift+F");
|
||||||
|
Bind("TAStudio", "Toggle Auto-Restore", "Shift+R");
|
||||||
|
Bind("TAStudio", "Toggle Turbo Seek", "Shift+S");
|
||||||
|
Bind("TAStudio", "Undo", "Ctrl+Z"); // TODO: these are getting not unique enough
|
||||||
|
Bind("TAStudio", "Redo", "Ctrl+Y");
|
||||||
|
Bind("TAStudio", "Sel. bet. Markers", "Ctrl+A");
|
||||||
|
Bind("TAStudio", "Select All", "Ctrl+Shift+A");
|
||||||
|
Bind("TAStudio", "Reselect Clip.", "Ctrl+B");
|
||||||
|
Bind("TAStudio", "Clear Frames", "Delete");
|
||||||
|
Bind("TAStudio", "Insert Frame", "Insert");
|
||||||
|
Bind("TAStudio", "Insert # Frames", "Ctrl+Shift+Insert");
|
||||||
|
Bind("TAStudio", "Delete Frames", "Ctrl+Delete");
|
||||||
|
Bind("TAStudio", "Clone Frames", "Ctrl+Insert");
|
||||||
|
Bind("TAStudio", "Analog Increment", "Up");
|
||||||
|
Bind("TAStudio", "Analog Decrement", "Down");
|
||||||
|
Bind("TAStudio", "Analog Incr. by 10", "Shift+Up");
|
||||||
|
Bind("TAStudio", "Analog Decr. by 10", "Shift+Down");
|
||||||
|
Bind("TAStudio", "Analog Maximum", "Right");
|
||||||
|
Bind("TAStudio", "Analog Minimum", "Left");
|
||||||
|
|
||||||
|
Bind("SNES", "Toggle BG 1");
|
||||||
|
Bind("SNES", "Toggle BG 2");
|
||||||
|
Bind("SNES", "Toggle BG 3");
|
||||||
|
Bind("SNES", "Toggle BG 4");
|
||||||
|
Bind("SNES", "Toggle OBJ 1");
|
||||||
|
Bind("SNES", "Toggle OBJ 2");
|
||||||
|
Bind("SNES", "Toggle OBJ 3");
|
||||||
|
Bind("SNES", "Toggle OBJ 4");
|
||||||
|
|
||||||
|
Bind("GB", "GB Toggle BG");
|
||||||
|
Bind("GB", "GB Toggle Obj");
|
||||||
|
Bind("GB", "GB Toggle Window");
|
||||||
|
|
||||||
|
Bind("Analog", "Y Up Small", toolTip: "For Virtual Pad");
|
||||||
|
Bind("Analog", "Y Up Large", toolTip: "For Virtual Pad");
|
||||||
|
Bind("Analog", "Y Down Small", toolTip: "For Virtual Pad");
|
||||||
|
Bind("Analog", "Y Down Large", toolTip: "For Virtual Pad");
|
||||||
|
Bind("Analog", "X Up Small", toolTip: "For Virtual Pad");
|
||||||
|
Bind("Analog", "X Up Large", toolTip: "For Virtual Pad");
|
||||||
|
Bind("Analog", "X Down Small", toolTip: "For Virtual Pad");
|
||||||
|
Bind("Analog", "X Down Large", toolTip: "For Virtual Pad");
|
||||||
|
|
||||||
|
Bind("Tools", "Toggle All Cheats");
|
||||||
|
|
||||||
|
Bind("NDS", "Next Screen Layout");
|
||||||
|
Bind("NDS", "Previous Screen Layout");
|
||||||
|
Bind("NDS", "Screen Rotate");
|
||||||
|
|
||||||
|
AllHotkeys = dict;
|
||||||
|
Groupings = dict.Values.Select(static info => info.TabGroup).Distinct().ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BindingCollection()
|
public static void ResolveWithDefaults(IDictionary<string, string> dict)
|
||||||
{
|
{
|
||||||
Bindings = new List<Binding>();
|
foreach (var (k, v) in AllHotkeys) if (!dict.ContainsKey(k)) dict[k] = v.DefaultBinding; // add missing
|
||||||
Bindings.AddRange(DefaultValues);
|
dict.RemoveAll(static kvp => !AllHotkeys.ContainsKey(kvp.Key)); // remove extraneous
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Add(Binding b)
|
public readonly string DefaultBinding;
|
||||||
|
|
||||||
|
public readonly string DisplayName;
|
||||||
|
|
||||||
|
public readonly int Ordinal;
|
||||||
|
|
||||||
|
public readonly string TabGroup;
|
||||||
|
|
||||||
|
public readonly string ToolTip;
|
||||||
|
|
||||||
|
private HotkeyInfo(string tabGroup, int ordinal, string displayName, string toolTip, string defaultBinding)
|
||||||
{
|
{
|
||||||
Bindings.Add(b);
|
DefaultBinding = defaultBinding;
|
||||||
}
|
DisplayName = displayName;
|
||||||
|
Ordinal = ordinal;
|
||||||
public IEnumerator<Binding> GetEnumerator()
|
TabGroup = tabGroup;
|
||||||
{
|
ToolTip = toolTip;
|
||||||
return Bindings.GetEnumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
|
||||||
{
|
|
||||||
return GetEnumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Binding this[string index] => Bindings.FirstOrDefault(b => b.DisplayName == index) ?? new Binding();
|
|
||||||
|
|
||||||
private static Binding Bind(string tabGroup, string displayName, string bindings = "", string defaultBinding = "", string toolTip = "")
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(defaultBinding))
|
|
||||||
{
|
|
||||||
defaultBinding = bindings;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Binding { DisplayName = displayName, Bindings = bindings, TabGroup = tabGroup, DefaultBinding = defaultBinding, ToolTip = toolTip };
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ResolveWithDefaults()
|
|
||||||
{
|
|
||||||
// TODO - this method is potentially disastrously O(N^2) slow due to linear search nested in loop
|
|
||||||
|
|
||||||
// Add missing entries
|
|
||||||
foreach (Binding defaultBinding in DefaultValues)
|
|
||||||
{
|
|
||||||
var binding = Bindings.FirstOrDefault(b => b.DisplayName == defaultBinding.DisplayName);
|
|
||||||
if (binding == null)
|
|
||||||
{
|
|
||||||
Bindings.Add(defaultBinding);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// patch entries with updated settings (necessary because of TODO LARP
|
|
||||||
binding.DisplayName = defaultBinding.DisplayName;
|
|
||||||
binding.DefaultBinding = defaultBinding.DefaultBinding;
|
|
||||||
binding.TabGroup = defaultBinding.TabGroup;
|
|
||||||
binding.ToolTip = defaultBinding.ToolTip;
|
|
||||||
binding.Ordinal = defaultBinding.Ordinal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove entries that no longer exist in defaults
|
|
||||||
Bindings.RemoveAll(entry => DefaultValues.All(b => b.DisplayName != entry.DisplayName));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Binding> _defaultValues;
|
|
||||||
|
|
||||||
public static List<Binding> DefaultValues
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_defaultValues == null)
|
|
||||||
{
|
|
||||||
_defaultValues = new List<Binding>
|
|
||||||
{
|
|
||||||
Bind("General", "Frame Advance", "F"),
|
|
||||||
Bind("General", "Rewind", "Shift+R"),
|
|
||||||
Bind("General", "Pause", "Pause"),
|
|
||||||
Bind("General", "Fast Forward", "Tab"),
|
|
||||||
Bind("General", "Turbo", "Shift+Tab"),
|
|
||||||
Bind("General", "Toggle Throttle"),
|
|
||||||
Bind("General", "Soft Reset"),
|
|
||||||
Bind("General", "Hard Reset"),
|
|
||||||
Bind("General", "Autofire"),
|
|
||||||
Bind("General", "Autohold"),
|
|
||||||
Bind("General", "Clear Autohold"),
|
|
||||||
Bind("General", "Screenshot", "F12"),
|
|
||||||
Bind("General", "Full Screen", "Alt+Enter"),
|
|
||||||
Bind("General", "Open ROM", "Ctrl+O"),
|
|
||||||
Bind("General", "Close ROM", "Ctrl+W"),
|
|
||||||
Bind("General", "Load Last ROM"),
|
|
||||||
Bind("General", "Flush SaveRAM", "Ctrl+S"),
|
|
||||||
Bind("General", "Display FPS"),
|
|
||||||
Bind("General", "Frame Counter"),
|
|
||||||
Bind("General", "Lag Counter"),
|
|
||||||
Bind("General", "Input Display"),
|
|
||||||
Bind("General", "Toggle BG Input"),
|
|
||||||
Bind("General", "Toggle Menu"),
|
|
||||||
Bind("General", "Volume Up"),
|
|
||||||
Bind("General", "Volume Down"),
|
|
||||||
Bind("General", "Record A/V"),
|
|
||||||
Bind("General", "Stop A/V"),
|
|
||||||
Bind("General", "Larger Window", "Alt+Up"),
|
|
||||||
Bind("General", "Smaller Window", "Alt+Down"),
|
|
||||||
Bind("General", "Increase Speed", "Equals"),
|
|
||||||
Bind("General", "Decrease Speed", "Minus"),
|
|
||||||
Bind("General", "Reset Speed", "Shift+Equals"),
|
|
||||||
Bind("General", "Reboot Core", "Ctrl+R"),
|
|
||||||
Bind("General", "Toggle Sound"),
|
|
||||||
Bind("General", "Exit Program"),
|
|
||||||
Bind("General", "Screen Raw to Clipboard", "Ctrl+C"),
|
|
||||||
Bind("General", "Screen Client to Clipboard", "Ctrl+Shift+C"),
|
|
||||||
Bind("General", "Toggle Skip Lag Frame"),
|
|
||||||
Bind("General", "Toggle Key Priority"),
|
|
||||||
Bind("General", "Frame Inch"),
|
|
||||||
|
|
||||||
Bind("Save States", "Save State 1", "Shift+F1"),
|
|
||||||
Bind("Save States", "Save State 2", "Shift+F2"),
|
|
||||||
Bind("Save States", "Save State 3", "Shift+F3"),
|
|
||||||
Bind("Save States", "Save State 4", "Shift+F4"),
|
|
||||||
Bind("Save States", "Save State 5", "Shift+F5"),
|
|
||||||
Bind("Save States", "Save State 6", "Shift+F6"),
|
|
||||||
Bind("Save States", "Save State 7", "Shift+F7"),
|
|
||||||
Bind("Save States", "Save State 8", "Shift+F8"),
|
|
||||||
Bind("Save States", "Save State 9", "Shift+F9"),
|
|
||||||
Bind("Save States", "Save State 0", "Shift+F10"),
|
|
||||||
Bind("Save States", "Load State 1", "F1"),
|
|
||||||
Bind("Save States", "Load State 2", "F2"),
|
|
||||||
Bind("Save States", "Load State 3", "F3"),
|
|
||||||
Bind("Save States", "Load State 4", "F4"),
|
|
||||||
Bind("Save States", "Load State 5", "F5"),
|
|
||||||
Bind("Save States", "Load State 6", "F6"),
|
|
||||||
Bind("Save States", "Load State 7", "F7"),
|
|
||||||
Bind("Save States", "Load State 8", "F8"),
|
|
||||||
Bind("Save States", "Load State 9", "F9"),
|
|
||||||
Bind("Save States", "Load State 0", "F10"),
|
|
||||||
Bind("Save States", "Select State 1", "Number1"),
|
|
||||||
Bind("Save States", "Select State 2", "Number2"),
|
|
||||||
Bind("Save States", "Select State 3", "Number3"),
|
|
||||||
Bind("Save States", "Select State 4", "Number4"),
|
|
||||||
Bind("Save States", "Select State 5", "Number5"),
|
|
||||||
Bind("Save States", "Select State 6", "Number6"),
|
|
||||||
Bind("Save States", "Select State 7", "Number7"),
|
|
||||||
Bind("Save States", "Select State 8", "Number8"),
|
|
||||||
Bind("Save States", "Select State 9", "Number9"),
|
|
||||||
Bind("Save States", "Select State 0", "Number0"),
|
|
||||||
Bind("Save States", "Quick Load", "P"),
|
|
||||||
Bind("Save States", "Quick Save", "I"),
|
|
||||||
Bind("Save States", "Save Named State"),
|
|
||||||
Bind("Save States", "Load Named State"),
|
|
||||||
Bind("Save States", "Previous Slot"),
|
|
||||||
Bind("Save States", "Next Slot"),
|
|
||||||
|
|
||||||
Bind("Movie", "Toggle read-only", "Q"),
|
|
||||||
Bind("Movie", "Play Movie"),
|
|
||||||
Bind("Movie", "Record Movie"),
|
|
||||||
Bind("Movie", "Stop Movie"),
|
|
||||||
Bind("Movie", "Play from beginning"),
|
|
||||||
Bind("Movie", "Save Movie"),
|
|
||||||
|
|
||||||
Bind("Tools", "RAM Watch"),
|
|
||||||
Bind("Tools", "RAM Search"),
|
|
||||||
Bind("Tools", "Hex Editor"),
|
|
||||||
Bind("Tools", "Trace Logger"),
|
|
||||||
Bind("Tools", "Lua Console"),
|
|
||||||
Bind("Tools", "Cheats"),
|
|
||||||
Bind("Tools", "TAStudio"),
|
|
||||||
Bind("Tools", "ToolBox", "Shift+T"),
|
|
||||||
Bind("Tools", "Virtual Pad"),
|
|
||||||
|
|
||||||
Bind("RAM Search", "New Search"),
|
|
||||||
Bind("RAM Search", "Do Search"),
|
|
||||||
Bind("RAM Search", "Previous Compare To"),
|
|
||||||
Bind("RAM Search", "Next Compare To"),
|
|
||||||
Bind("RAM Search", "Previous Operator"),
|
|
||||||
Bind("RAM Search", "Next Operator"),
|
|
||||||
|
|
||||||
Bind("TAStudio", "Add Branch", "Alt+Insert"),
|
|
||||||
Bind("TAStudio", "Delete Branch", "Alt+Delete"),
|
|
||||||
Bind("TAStudio", "Show Cursor"),
|
|
||||||
Bind("TAStudio", "Toggle Follow Cursor", "Shift+F"),
|
|
||||||
Bind("TAStudio", "Toggle Auto-Restore", "Shift+R"),
|
|
||||||
Bind("TAStudio", "Toggle Turbo Seek", "Shift+S"),
|
|
||||||
Bind("TAStudio", "Undo", "Ctrl+Z"), // TODO: these are getting not unique enough
|
|
||||||
Bind("TAStudio", "Redo", "Ctrl+Y"),
|
|
||||||
Bind("TAStudio", "Sel. bet. Markers", "Ctrl+A"),
|
|
||||||
Bind("TAStudio", "Select All", "Ctrl+Shift+A"),
|
|
||||||
Bind("TAStudio", "Reselect Clip.", "Ctrl+B"),
|
|
||||||
Bind("TAStudio", "Clear Frames", "Delete"),
|
|
||||||
Bind("TAStudio", "Insert Frame", "Insert"),
|
|
||||||
Bind("TAStudio", "Insert # Frames", "Ctrl+Shift+Insert"),
|
|
||||||
Bind("TAStudio", "Delete Frames", "Ctrl+Delete"),
|
|
||||||
Bind("TAStudio", "Clone Frames", "Ctrl+Insert"),
|
|
||||||
Bind("TAStudio", "Analog Increment", "Up"),
|
|
||||||
Bind("TAStudio", "Analog Decrement", "Down"),
|
|
||||||
Bind("TAStudio", "Analog Incr. by 10", "Shift+Up"),
|
|
||||||
Bind("TAStudio", "Analog Decr. by 10", "Shift+Down"),
|
|
||||||
Bind("TAStudio", "Analog Maximum", "Right"),
|
|
||||||
Bind("TAStudio", "Analog Minimum", "Left"),
|
|
||||||
|
|
||||||
Bind("SNES", "Toggle BG 1"),
|
|
||||||
Bind("SNES", "Toggle BG 2"),
|
|
||||||
Bind("SNES", "Toggle BG 3"),
|
|
||||||
Bind("SNES", "Toggle BG 4"),
|
|
||||||
Bind("SNES", "Toggle OBJ 1"),
|
|
||||||
Bind("SNES", "Toggle OBJ 2"),
|
|
||||||
Bind("SNES", "Toggle OBJ 3"),
|
|
||||||
Bind("SNES", "Toggle OBJ 4"),
|
|
||||||
|
|
||||||
Bind("GB", "GB Toggle BG"),
|
|
||||||
Bind("GB", "GB Toggle Obj"),
|
|
||||||
Bind("GB", "GB Toggle Window"),
|
|
||||||
|
|
||||||
Bind("Analog", "Y Up Small", toolTip: "For Virtual Pad"),
|
|
||||||
Bind("Analog", "Y Up Large", toolTip: "For Virtual Pad"),
|
|
||||||
Bind("Analog", "Y Down Small", toolTip: "For Virtual Pad"),
|
|
||||||
Bind("Analog", "Y Down Large", toolTip: "For Virtual Pad"),
|
|
||||||
Bind("Analog", "X Up Small", toolTip: "For Virtual Pad"),
|
|
||||||
Bind("Analog", "X Up Large", toolTip: "For Virtual Pad"),
|
|
||||||
Bind("Analog", "X Down Small", toolTip: "For Virtual Pad"),
|
|
||||||
Bind("Analog", "X Down Large", toolTip: "For Virtual Pad"),
|
|
||||||
|
|
||||||
Bind("Tools", "Toggle All Cheats"),
|
|
||||||
|
|
||||||
Bind("NDS", "Next Screen Layout"),
|
|
||||||
Bind("NDS", "Previous Screen Layout"),
|
|
||||||
Bind("NDS", "Screen Rotate"),
|
|
||||||
};
|
|
||||||
|
|
||||||
// set ordinals based on order in list
|
|
||||||
for (int i = 0; i < _defaultValues.Count; i++)
|
|
||||||
{
|
|
||||||
_defaultValues[i].Ordinal = i;
|
|
||||||
}
|
|
||||||
} // if (s_DefaultValues == null)
|
|
||||||
|
|
||||||
return _defaultValues;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace BizHawk.Client.Common
|
||||||
public void ResolveDefaults()
|
public void ResolveDefaults()
|
||||||
{
|
{
|
||||||
PathEntries.ResolveWithDefaults();
|
PathEntries.ResolveWithDefaults();
|
||||||
HotkeyBindings.ResolveWithDefaults();
|
HotkeyInfo.ResolveWithDefaults(HotkeyBindings);
|
||||||
PathEntries.RefreshTempPath();
|
PathEntries.RefreshTempPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ namespace BizHawk.Client.Common
|
||||||
public bool PlayMovieIncludeSubDir { get; set; }
|
public bool PlayMovieIncludeSubDir { get; set; }
|
||||||
public bool PlayMovieMatchHash { get; set; } = true;
|
public bool PlayMovieMatchHash { get; set; } = true;
|
||||||
|
|
||||||
public BindingCollection HotkeyBindings { get; set; } = new BindingCollection();
|
public Dictionary<string, string> HotkeyBindings { get; set; } = new();
|
||||||
|
|
||||||
// Analog Hotkey values
|
// Analog Hotkey values
|
||||||
public int AnalogLargeChange { get; set; } = 10;
|
public int AnalogLargeChange { get; set; } = 10;
|
||||||
|
|
|
@ -145,7 +145,7 @@ namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
string ReplMulti(string multiBind)
|
string ReplMulti(string multiBind)
|
||||||
=> multiBind.TransformFields(',', bind => bind.TransformFields('+', button => replMap.TryGetValue(button, out var repl) ? repl : button));
|
=> multiBind.TransformFields(',', bind => bind.TransformFields('+', button => replMap.TryGetValue(button, out var repl) ? repl : button));
|
||||||
foreach (var hotkeyBinding in config.HotkeyBindings.Bindings) hotkeyBinding.Bindings = ReplMulti(hotkeyBinding.Bindings);
|
foreach (var k in config.HotkeyBindings.Keys.ToList()) config.HotkeyBindings[k] = ReplMulti(config.HotkeyBindings[k]);
|
||||||
foreach (var bindCollection in new[] { config.AllTrollers, config.AllTrollersAutoFire }) // analog and feedback binds can only be bound to (host) gamepads, not keyboard
|
foreach (var bindCollection in new[] { config.AllTrollers, config.AllTrollersAutoFire }) // analog and feedback binds can only be bound to (host) gamepads, not keyboard
|
||||||
{
|
{
|
||||||
foreach (var k in bindCollection.Keys.ToArray()) bindCollection[k] = bindCollection[k].ToDictionary(static kvp => kvp.Key, kvp => ReplMulti(kvp.Value));
|
foreach (var k in bindCollection.Keys.ToArray()) bindCollection[k] = bindCollection[k].ToDictionary(static kvp => kvp.Key, kvp => ReplMulti(kvp.Value));
|
||||||
|
|
|
@ -43,8 +43,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
SaveSlotSubMenu.Enabled =
|
SaveSlotSubMenu.Enabled =
|
||||||
Emulator.HasSavestates();
|
Emulator.HasSavestates();
|
||||||
|
|
||||||
OpenRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Open ROM"].Bindings;
|
OpenRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Open ROM"];
|
||||||
CloseRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Close ROM"].Bindings;
|
CloseRomMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Close ROM"];
|
||||||
|
|
||||||
MovieSubMenu.Enabled =
|
MovieSubMenu.Enabled =
|
||||||
CloseRomMenuItem.Enabled =
|
CloseRomMenuItem.Enabled =
|
||||||
|
@ -85,32 +85,32 @@ namespace BizHawk.Client.EmuHawk
|
||||||
SetSlotFont(SaveState9MenuItem, 9);
|
SetSlotFont(SaveState9MenuItem, 9);
|
||||||
SetSlotFont(SaveState0MenuItem, 0);
|
SetSlotFont(SaveState0MenuItem, 0);
|
||||||
|
|
||||||
SaveState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 1"].Bindings;
|
SaveState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 1"];
|
||||||
SaveState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 2"].Bindings;
|
SaveState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 2"];
|
||||||
SaveState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 3"].Bindings;
|
SaveState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 3"];
|
||||||
SaveState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 4"].Bindings;
|
SaveState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 4"];
|
||||||
SaveState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 5"].Bindings;
|
SaveState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 5"];
|
||||||
SaveState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 6"].Bindings;
|
SaveState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 6"];
|
||||||
SaveState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 7"].Bindings;
|
SaveState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 7"];
|
||||||
SaveState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 8"].Bindings;
|
SaveState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 8"];
|
||||||
SaveState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 9"].Bindings;
|
SaveState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 9"];
|
||||||
SaveState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 0"].Bindings;
|
SaveState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save State 0"];
|
||||||
SaveNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Named State"].Bindings;
|
SaveNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Named State"];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadStateSubMenu_DropDownOpened(object sender, EventArgs e)
|
private void LoadStateSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
LoadState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 1"].Bindings;
|
LoadState1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 1"];
|
||||||
LoadState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 2"].Bindings;
|
LoadState2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 2"];
|
||||||
LoadState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 3"].Bindings;
|
LoadState3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 3"];
|
||||||
LoadState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 4"].Bindings;
|
LoadState4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 4"];
|
||||||
LoadState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 5"].Bindings;
|
LoadState5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 5"];
|
||||||
LoadState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 6"].Bindings;
|
LoadState6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 6"];
|
||||||
LoadState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 7"].Bindings;
|
LoadState7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 7"];
|
||||||
LoadState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 8"].Bindings;
|
LoadState8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 8"];
|
||||||
LoadState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 9"].Bindings;
|
LoadState9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 9"];
|
||||||
LoadState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 0"].Bindings;
|
LoadState0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load State 0"];
|
||||||
LoadNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load Named State"].Bindings;
|
LoadNamedStateMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Load Named State"];
|
||||||
|
|
||||||
AutoloadLastSlotMenuItem.Checked = Config.AutoLoadLastSaveSlot;
|
AutoloadLastSlotMenuItem.Checked = Config.AutoLoadLastSaveSlot;
|
||||||
|
|
||||||
|
@ -128,20 +128,20 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void SaveSlotSubMenu_DropDownOpened(object sender, EventArgs e)
|
private void SaveSlotSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SelectSlot1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 1"].Bindings;
|
SelectSlot1MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 1"];
|
||||||
SelectSlot2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 2"].Bindings;
|
SelectSlot2MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 2"];
|
||||||
SelectSlot3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 3"].Bindings;
|
SelectSlot3MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 3"];
|
||||||
SelectSlot4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 4"].Bindings;
|
SelectSlot4MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 4"];
|
||||||
SelectSlot5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 5"].Bindings;
|
SelectSlot5MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 5"];
|
||||||
SelectSlot6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 6"].Bindings;
|
SelectSlot6MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 6"];
|
||||||
SelectSlot7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 7"].Bindings;
|
SelectSlot7MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 7"];
|
||||||
SelectSlot8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 8"].Bindings;
|
SelectSlot8MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 8"];
|
||||||
SelectSlot9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 9"].Bindings;
|
SelectSlot9MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 9"];
|
||||||
SelectSlot0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 0"].Bindings;
|
SelectSlot0MenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select State 0"];
|
||||||
PreviousSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Previous Slot"].Bindings;
|
PreviousSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Previous Slot"];
|
||||||
NextSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Next Slot"].Bindings;
|
NextSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Next Slot"];
|
||||||
SaveToCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Save"].Bindings;
|
SaveToCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Save"];
|
||||||
LoadCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Load"].Bindings;
|
LoadCurrentSlotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Quick Load"];
|
||||||
|
|
||||||
SelectSlot1MenuItem.Checked = Config.SaveSlot == 1;
|
SelectSlot1MenuItem.Checked = Config.SaveSlot == 1;
|
||||||
SelectSlot2MenuItem.Checked = Config.SaveSlot == 2;
|
SelectSlot2MenuItem.Checked = Config.SaveSlot == 2;
|
||||||
|
@ -157,7 +157,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void SaveRamSubMenu_DropDownOpened(object sender, EventArgs e)
|
private void SaveRamSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
FlushSaveRAMMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Flush SaveRAM"].Bindings;
|
FlushSaveRAMMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Flush SaveRAM"];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MovieSubMenu_DropDownOpened(object sender, EventArgs e)
|
private void MovieSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
|
@ -172,12 +172,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
AutomaticallyBackupMoviesMenuItem.Checked = Config.Movies.EnableBackupMovies;
|
AutomaticallyBackupMoviesMenuItem.Checked = Config.Movies.EnableBackupMovies;
|
||||||
FullMovieLoadstatesMenuItem.Checked = Config.Movies.VBAStyleMovieLoadState;
|
FullMovieLoadstatesMenuItem.Checked = Config.Movies.VBAStyleMovieLoadState;
|
||||||
|
|
||||||
ReadonlyMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Toggle read-only"].Bindings;
|
ReadonlyMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Toggle read-only"];
|
||||||
RecordMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record Movie"].Bindings;
|
RecordMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record Movie"];
|
||||||
PlayMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play Movie"].Bindings;
|
PlayMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play Movie"];
|
||||||
StopMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop Movie"].Bindings;
|
StopMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop Movie"];
|
||||||
PlayFromBeginningMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play from beginning"].Bindings;
|
PlayFromBeginningMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Play from beginning"];
|
||||||
SaveMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Movie"].Bindings;
|
SaveMovieMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Save Movie"];
|
||||||
|
|
||||||
PlayMovieMenuItem.Enabled
|
PlayMovieMenuItem.Enabled
|
||||||
= ImportMoviesMenuItem.Enabled
|
= ImportMoviesMenuItem.Enabled
|
||||||
|
@ -215,8 +215,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void AVSubMenu_DropDownOpened(object sender, EventArgs e)
|
private void AVSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ConfigAndRecordAVMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record A/V"].Bindings;
|
ConfigAndRecordAVMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Record A/V"];
|
||||||
StopAVIMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop A/V"].Bindings;
|
StopAVIMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Stop A/V"];
|
||||||
CaptureOSDMenuItem.Checked = Config.AviCaptureOsd;
|
CaptureOSDMenuItem.Checked = Config.AviCaptureOsd;
|
||||||
CaptureLuaMenuItem.Checked = Config.AviCaptureLua || Config.AviCaptureOsd; // or with osd is for better compatibility with old config files
|
CaptureLuaMenuItem.Checked = Config.AviCaptureLua || Config.AviCaptureOsd; // or with osd is for better compatibility with old config files
|
||||||
|
|
||||||
|
@ -237,9 +237,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
private void ScreenshotSubMenu_DropDownOpening(object sender, EventArgs e)
|
private void ScreenshotSubMenu_DropDownOpening(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ScreenshotCaptureOSDMenuItem1.Checked = Config.ScreenshotCaptureOsd;
|
ScreenshotCaptureOSDMenuItem1.Checked = Config.ScreenshotCaptureOsd;
|
||||||
ScreenshotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screenshot"].Bindings;
|
ScreenshotMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screenshot"];
|
||||||
ScreenshotClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ScreenshotToClipboard"].Bindings;
|
ScreenshotClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ScreenshotToClipboard"];
|
||||||
ScreenshotClientClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screen Client to Clipboard"].Bindings;
|
ScreenshotClientClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Screen Client to Clipboard"];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OpenRomMenuItem_Click(object sender, EventArgs e)
|
private void OpenRomMenuItem_Click(object sender, EventArgs e)
|
||||||
|
@ -619,10 +619,10 @@ namespace BizHawk.Client.EmuHawk
|
||||||
HardResetMenuItem.Enabled = Emulator.ControllerDefinition.BoolButtons.Contains("Power")
|
HardResetMenuItem.Enabled = Emulator.ControllerDefinition.BoolButtons.Contains("Power")
|
||||||
&& !MovieSession.Movie.IsPlaying();
|
&& !MovieSession.Movie.IsPlaying();
|
||||||
|
|
||||||
PauseMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Pause"].Bindings;
|
PauseMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Pause"];
|
||||||
RebootCoreMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reboot Core"].Bindings;
|
RebootCoreMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reboot Core"];
|
||||||
SoftResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Soft Reset"].Bindings;
|
SoftResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Soft Reset"];
|
||||||
HardResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hard Reset"].Bindings;
|
HardResetMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hard Reset"];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PauseMenuItem_Click(object sender, EventArgs e)
|
private void PauseMenuItem_Click(object sender, EventArgs e)
|
||||||
|
@ -660,11 +660,11 @@ namespace BizHawk.Client.EmuHawk
|
||||||
DisplayRerecordCountMenuItem.Checked = Config.DisplayRerecordCount;
|
DisplayRerecordCountMenuItem.Checked = Config.DisplayRerecordCount;
|
||||||
DisplaySubtitlesMenuItem.Checked = Config.DisplaySubtitles;
|
DisplaySubtitlesMenuItem.Checked = Config.DisplaySubtitles;
|
||||||
|
|
||||||
DisplayFPSMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Display FPS"].Bindings;
|
DisplayFPSMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Display FPS"];
|
||||||
DisplayFrameCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Frame Counter"].Bindings;
|
DisplayFrameCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Frame Counter"];
|
||||||
DisplayLagCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lag Counter"].Bindings;
|
DisplayLagCounterMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lag Counter"];
|
||||||
DisplayInputMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Input Display"].Bindings;
|
DisplayInputMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Input Display"];
|
||||||
SwitchToFullscreenMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Full Screen"].Bindings;
|
SwitchToFullscreenMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Full Screen"];
|
||||||
|
|
||||||
DisplayStatusBarMenuItem.Checked = Config.DispChromeStatusBarWindowed;
|
DisplayStatusBarMenuItem.Checked = Config.DispChromeStatusBarWindowed;
|
||||||
DisplayLogWindowMenuItem.Checked = Tools.IsLoaded<LogWindow>();
|
DisplayLogWindowMenuItem.Checked = Tools.IsLoaded<LogWindow>();
|
||||||
|
@ -1143,15 +1143,15 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void ToolsSubMenu_DropDownOpened(object sender, EventArgs e)
|
private void ToolsSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ToolBoxMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ToolBox"].Bindings;
|
ToolBoxMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["ToolBox"];
|
||||||
RamWatchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Watch"].Bindings;
|
RamWatchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Watch"];
|
||||||
RamSearchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Search"].Bindings;
|
RamSearchMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["RAM Search"];
|
||||||
HexEditorMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hex Editor"].Bindings;
|
HexEditorMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Hex Editor"];
|
||||||
LuaConsoleMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lua Console"].Bindings;
|
LuaConsoleMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Lua Console"];
|
||||||
CheatsMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Cheats"].Bindings;
|
CheatsMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Cheats"];
|
||||||
TAStudioMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["TAStudio"].Bindings;
|
TAStudioMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["TAStudio"];
|
||||||
VirtualPadMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Virtual Pad"].Bindings;
|
VirtualPadMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Virtual Pad"];
|
||||||
TraceLoggerMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Trace Logger"].Bindings;
|
TraceLoggerMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Trace Logger"];
|
||||||
TraceLoggerMenuItem.Enabled = Tools.IsAvailable<TraceLogger>();
|
TraceLoggerMenuItem.Enabled = Tools.IsAvailable<TraceLogger>();
|
||||||
CodeDataLoggerMenuItem.Enabled = Tools.IsAvailable<CDL>();
|
CodeDataLoggerMenuItem.Enabled = Tools.IsAvailable<CDL>();
|
||||||
|
|
||||||
|
|
|
@ -2093,13 +2093,10 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
Controller controls = new(new ControllerDefinition("Emulator Frontend Controls")
|
Controller controls = new(new ControllerDefinition("Emulator Frontend Controls")
|
||||||
{
|
{
|
||||||
BoolButtons = Config.HotkeyBindings.Select(static x => x.DisplayName).ToList(),
|
BoolButtons = Config.HotkeyBindings.Keys.ToList(),
|
||||||
}.MakeImmutable());
|
}.MakeImmutable());
|
||||||
|
|
||||||
foreach (var b in Config.HotkeyBindings)
|
foreach (var (k, v) in Config.HotkeyBindings) controls.BindMulti(k, v);
|
||||||
{
|
|
||||||
controls.BindMulti(b.DisplayName, b.Bindings);
|
|
||||||
}
|
|
||||||
|
|
||||||
InputManager.ClientControls = controls;
|
InputManager.ClientControls = controls;
|
||||||
InputManager.ControllerInputCoalescer = new(); // ctor initialises values for host haptics
|
InputManager.ControllerInputCoalescer = new(); // ctor initialises values for host haptics
|
||||||
|
|
|
@ -5,6 +5,7 @@ using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
using BizHawk.Client.Common;
|
using BizHawk.Client.Common;
|
||||||
|
using BizHawk.Common;
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -35,7 +36,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
private void HotkeyConfig_Load(object sender, EventArgs e)
|
private void HotkeyConfig_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var source = new AutoCompleteStringCollection();
|
var source = new AutoCompleteStringCollection();
|
||||||
source.AddRange(_config.HotkeyBindings.Select(x => x.DisplayName).ToArray());
|
source.AddRange(HotkeyInfo.AllHotkeys.Keys.ToArray());
|
||||||
|
|
||||||
SearchBox.AutoCompleteCustomSource = source;
|
SearchBox.AutoCompleteCustomSource = source;
|
||||||
SearchBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
|
SearchBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
|
||||||
|
@ -70,12 +71,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
private void Save()
|
private void Save()
|
||||||
{
|
{
|
||||||
_config.HotkeyConfigAutoTab = AutoTabCheckBox.Checked;
|
_config.HotkeyConfigAutoTab = AutoTabCheckBox.Checked;
|
||||||
|
foreach (var w in InputWidgets) _config.HotkeyBindings[w.WidgetName] = w.Bindings;
|
||||||
foreach (var w in InputWidgets)
|
|
||||||
{
|
|
||||||
var b = _config.HotkeyBindings.First(x => x.DisplayName == w.WidgetName);
|
|
||||||
b.Bindings = w.Bindings;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<InputCompositeWidget> InputWidgets =>
|
private IEnumerable<InputCompositeWidget> InputWidgets =>
|
||||||
|
@ -86,13 +82,11 @@ namespace BizHawk.Client.EmuHawk
|
||||||
HotkeyTabControl.SuspendLayout();
|
HotkeyTabControl.SuspendLayout();
|
||||||
HotkeyTabControl.TabPages.Clear();
|
HotkeyTabControl.TabPages.Clear();
|
||||||
|
|
||||||
// Buckets
|
foreach (var tab in HotkeyInfo.Groupings)
|
||||||
var tabs = _config.HotkeyBindings.Select(x => x.TabGroup).Distinct();
|
|
||||||
|
|
||||||
foreach (var tab in tabs)
|
|
||||||
{
|
{
|
||||||
var tb = new TabPage { Name = tab, Text = tab };
|
var tb = new TabPage { Name = tab, Text = tab };
|
||||||
var bindings = _config.HotkeyBindings.Where(n => n.TabGroup == tab).OrderBy(n => n.Ordinal).ThenBy(n => n.DisplayName);
|
var bindings = HotkeyInfo.AllHotkeys.Where(kvp => kvp.Value.TabGroup == tab)
|
||||||
|
.OrderBy(static kvp => kvp.Value.Ordinal).ThenBy(static kvp => kvp.Value.DisplayName);
|
||||||
int x = UIHelper.ScaleX(6);
|
int x = UIHelper.ScaleX(6);
|
||||||
int y = UIHelper.ScaleY(14);
|
int y = UIHelper.ScaleY(14);
|
||||||
int iwOffsetX = UIHelper.ScaleX(110);
|
int iwOffsetX = UIHelper.ScaleX(110);
|
||||||
|
@ -101,7 +95,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
tb.SuspendLayout();
|
tb.SuspendLayout();
|
||||||
|
|
||||||
foreach (var b in bindings)
|
foreach (var (k, b) in bindings)
|
||||||
{
|
{
|
||||||
var l = new Label
|
var l = new Label
|
||||||
{
|
{
|
||||||
|
@ -115,13 +109,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
Location = new Point(x + iwOffsetX, y + iwOffsetY),
|
Location = new Point(x + iwOffsetX, y + iwOffsetY),
|
||||||
AutoTab = AutoTabCheckBox.Checked,
|
AutoTab = AutoTabCheckBox.Checked,
|
||||||
Width = iwWidth,
|
Width = iwWidth,
|
||||||
WidgetName = b.DisplayName
|
WidgetName = k
|
||||||
};
|
};
|
||||||
|
|
||||||
w.SetupTooltip(toolTip1, b.ToolTip);
|
w.SetupTooltip(toolTip1, b.ToolTip);
|
||||||
toolTip1.SetToolTip(l, b.ToolTip);
|
toolTip1.SetToolTip(l, b.ToolTip);
|
||||||
|
|
||||||
w.Bindings = b.Bindings;
|
w.Bindings = _config.HotkeyBindings[k];
|
||||||
|
|
||||||
tb.Controls.Add(l);
|
tb.Controls.Add(l);
|
||||||
tb.Controls.Add(w);
|
tb.Controls.Add(w);
|
||||||
|
@ -153,14 +147,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void Defaults()
|
private void Defaults()
|
||||||
{
|
{
|
||||||
foreach (var w in InputWidgets)
|
foreach (var w in InputWidgets) w.Bindings = HotkeyInfo.AllHotkeys[w.WidgetName].DefaultBinding;
|
||||||
{
|
|
||||||
var b = _config.HotkeyBindings.FirstOrDefault(x => x.DisplayName == w.WidgetName);
|
|
||||||
if (b != null)
|
|
||||||
{
|
|
||||||
w.Bindings = b.DefaultBinding;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ClearAll(bool currentTabOnly)
|
private void ClearAll(bool currentTabOnly)
|
||||||
|
@ -210,12 +197,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
if (e.IsPressed(Keys.Enter) || e.IsPressed(Keys.Tab))
|
if (e.IsPressed(Keys.Enter) || e.IsPressed(Keys.Tab))
|
||||||
{
|
{
|
||||||
var b = _config.HotkeyBindings.FirstOrDefault(x => string.Compare(x.DisplayName, SearchBox.Text, true) == 0);
|
var k = HotkeyInfo.AllHotkeys.FirstOrDefault(kvp => string.Compare(kvp.Value.DisplayName, SearchBox.Text, true) is 0).Key;
|
||||||
|
|
||||||
// Found
|
// Found
|
||||||
if (b != null)
|
if (k is not null)
|
||||||
{
|
{
|
||||||
var w = InputWidgets.FirstOrDefault(x => x.WidgetName == b.DisplayName);
|
var w = InputWidgets.FirstOrDefault(x => x.WidgetName == k);
|
||||||
if (w != null)
|
if (w != null)
|
||||||
{
|
{
|
||||||
HotkeyTabControl.SelectTab((TabPage)w.Parent);
|
HotkeyTabControl.SelectTab((TabPage)w.Parent);
|
||||||
|
|
|
@ -528,9 +528,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
public void NonExistentBranchMessage(int slot)
|
public void NonExistentBranchMessage(int slot)
|
||||||
{
|
{
|
||||||
string binding = Tastudio.Config.HotkeyBindings.First(x => x.DisplayName == "Add Branch").Bindings;
|
|
||||||
Tastudio.MainForm.AddOnScreenMessage($"Branch {slot + 1} does not exist");
|
Tastudio.MainForm.AddOnScreenMessage($"Branch {slot + 1} does not exist");
|
||||||
Tastudio.MainForm.AddOnScreenMessage($"Use {binding} to add branches");
|
Tastudio.MainForm.AddOnScreenMessage($"Use {Tastudio.Config!.HotkeyBindings["Add Branch"]} to add branches");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateValues()
|
public void UpdateValues()
|
||||||
|
|
|
@ -349,16 +349,16 @@ namespace BizHawk.Client.EmuHawk
|
||||||
StateHistoryIntegrityCheckMenuItem.Visible =
|
StateHistoryIntegrityCheckMenuItem.Visible =
|
||||||
VersionInfo.DeveloperBuild;
|
VersionInfo.DeveloperBuild;
|
||||||
|
|
||||||
UndoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Undo"].Bindings;
|
UndoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Undo"];
|
||||||
RedoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Redo"].Bindings;
|
RedoMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Redo"];
|
||||||
SelectBetweenMarkersMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select between Markers"].Bindings;
|
SelectBetweenMarkersMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select between Markers"];
|
||||||
SelectAllMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select All"].Bindings;
|
SelectAllMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Select All"];
|
||||||
ReselectClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reselect Clip."].Bindings;
|
ReselectClipboardMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Reselect Clip."];
|
||||||
ClearFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"].Bindings;
|
ClearFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"];
|
||||||
InsertFrameMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"].Bindings;
|
InsertFrameMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"];
|
||||||
InsertNumFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"].Bindings;
|
InsertNumFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"];
|
||||||
DeleteFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"].Bindings;
|
DeleteFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"];
|
||||||
CloneFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"].Bindings;
|
CloneFramesMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UndoMenuItem_Click(object sender, EventArgs e)
|
private void UndoMenuItem_Click(object sender, EventArgs e)
|
||||||
|
@ -1418,12 +1418,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
CancelSeekContextMenuItem.Enabled = MainForm.PauseOnFrame.HasValue;
|
CancelSeekContextMenuItem.Enabled = MainForm.PauseOnFrame.HasValue;
|
||||||
BranchContextMenuItem.Visible = TasView.CurrentCell?.RowIndex == Emulator.Frame;
|
BranchContextMenuItem.Visible = TasView.CurrentCell?.RowIndex == Emulator.Frame;
|
||||||
|
|
||||||
SelectBetweenMarkersContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Sel. bet. Markers"].Bindings;
|
SelectBetweenMarkersContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Sel. bet. Markers"];
|
||||||
InsertNumFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"].Bindings;
|
InsertNumFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert # Frames"];
|
||||||
ClearContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"].Bindings;
|
ClearContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clear Frames"];
|
||||||
InsertFrameContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"].Bindings;
|
InsertFrameContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Insert Frame"];
|
||||||
DeleteFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"].Bindings;
|
DeleteFramesContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Delete Frames"];
|
||||||
CloneContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"].Bindings;
|
CloneContextMenuItem.ShortcutKeyDisplayString = Config.HotkeyBindings["Clone Frames"];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CancelSeekContextMenuItem_Click(object sender, EventArgs e)
|
private void CancelSeekContextMenuItem_Click(object sender, EventArgs e)
|
||||||
|
|
|
@ -14,8 +14,6 @@ namespace BizHawk.Tests.Client.Common.config
|
||||||
[TestClass]
|
[TestClass]
|
||||||
public sealed class SerializationStabilityTests
|
public sealed class SerializationStabilityTests
|
||||||
{
|
{
|
||||||
private const string BINDING_SER = @"{""DisplayName"":""Frame Advance"",""Bindings"":""F"",""DefaultBinding"":""F"",""TabGroup"":""General"",""ToolTip"":"""",""Ordinal"":0}";
|
|
||||||
|
|
||||||
private const string PATHENTRY_SER = @"{""Type"":""Movies"",""Path"":""./Movies"",""System"":""Global_NULL""}";
|
private const string PATHENTRY_SER = @"{""Type"":""Movies"",""Path"":""./Movies"",""System"":""Global_NULL""}";
|
||||||
|
|
||||||
private const string RECENT_SER = @"{""recentlist"":[],""MAX_RECENT_FILES"":8,""AutoLoad"":false,""Frozen"":false}";
|
private const string RECENT_SER = @"{""recentlist"":[],""MAX_RECENT_FILES"":8,""AutoLoad"":false,""Frozen"":false}";
|
||||||
|
@ -43,8 +41,6 @@ namespace BizHawk.Tests.Client.Common.config
|
||||||
private static readonly IReadOnlyDictionary<Type, string> KnownGoodFromBizHawk = new Dictionary<Type, string>
|
private static readonly IReadOnlyDictionary<Type, string> KnownGoodFromBizHawk = new Dictionary<Type, string>
|
||||||
{
|
{
|
||||||
[typeof(AnalogBind)] = @"{""Value"":""X1 LeftThumbX Axis"",""Mult"":0.8,""Deadzone"":0.1}",
|
[typeof(AnalogBind)] = @"{""Value"":""X1 LeftThumbX Axis"",""Mult"":0.8,""Deadzone"":0.1}",
|
||||||
[typeof(Binding)] = BINDING_SER,
|
|
||||||
[typeof(BindingCollection)] = $@"{{""Bindings"":[{BINDING_SER}]}}",
|
|
||||||
[typeof(CheatConfig)] = $@"{{""DisableOnLoad"":false,""LoadFileByGame"":true,""AutoSaveOnClose"":true,""Recent"":{RECENT_SER}}}",
|
[typeof(CheatConfig)] = $@"{{""DisableOnLoad"":false,""LoadFileByGame"":true,""AutoSaveOnClose"":true,""Recent"":{RECENT_SER}}}",
|
||||||
[typeof(FeedbackBind)] = @"{""Channels"":""Left+Right"",""GamepadPrefix"":""X1 "",""Prescale"":1.0}",
|
[typeof(FeedbackBind)] = @"{""Channels"":""Left+Right"",""GamepadPrefix"":""X1 "",""Prescale"":1.0}",
|
||||||
[typeof(MessagePosition)] = @"{""X"":0,""Y"":0,""Anchor"":0}",
|
[typeof(MessagePosition)] = @"{""X"":0,""Y"":0,""Anchor"":0}",
|
||||||
|
|
Loading…
Reference in New Issue