diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index e803dbd392..66441ef72a 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -136,6 +136,7 @@ + diff --git a/BizHawk.Client.Common/movie/MnemonicsGenerator.cs b/BizHawk.Client.Common/movie/MnemonicsGenerator.cs index ce9c1973c8..2fe097ca99 100644 --- a/BizHawk.Client.Common/movie/MnemonicsGenerator.cs +++ b/BizHawk.Client.Common/movie/MnemonicsGenerator.cs @@ -1,29 +1,27 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Text; using BizHawk.Emulation.Common; namespace BizHawk.Client.Common { - // Scheduled for deletion + // Used with the version 1 movie implementation public class MnemonicsGenerator { - public IController Source; // Making this public is a temporary hack + private IController _source; public bool this[int player, string mnemonic] { get { - return IsBasePressed("P" + player + " " + mnemonic); //TODO: not every controller uses "P" + return IsBasePressed("P" + player + " " + mnemonic); // TODO: not every controller uses "P" } } public void SetSource(IController source) { - Source = source; - ControlType = source.Type.Name; + _source = source; + _controlType = source.Type.Name; } public bool IsEmpty @@ -85,48 +83,49 @@ namespace BizHawk.Client.Common private bool IsBasePressed(string name) { - bool ret = Source.IsPressed(name); - return ret; + return _source.IsPressed(name); } private float GetBaseFloat(string name) { - return Source.GetFloat(name); + return _source.GetFloat(name); } - private string ControlType; + private string _controlType; private string GetGBAControllersAsMnemonic() { - StringBuilder input = new StringBuilder("|"); + var input = new StringBuilder("|"); if (IsBasePressed("Power")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["Power"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["Power"]); } else { input.Append("."); } + input.Append("|"); - foreach (string button in MnemonicConstants.BUTTONS[ControlType].Keys) + foreach (var button in MnemonicConstants.BUTTONS[_controlType].Keys) { - input.Append(IsBasePressed(button) ? MnemonicConstants.BUTTONS[ControlType][button] : "."); + input.Append(IsBasePressed(button) ? MnemonicConstants.BUTTONS[_controlType][button] : "."); } + input.Append("|"); return input.ToString(); } private string GetSNESControllersAsMnemonic() { - StringBuilder input = new StringBuilder("|"); + var input = new StringBuilder("|"); if (IsBasePressed("Power")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["Power"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["Power"]); } else if (IsBasePressed("Reset")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["Reset"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["Reset"]); } else { @@ -134,12 +133,13 @@ namespace BizHawk.Client.Common } input.Append("|"); - for (int player = 1; player <= MnemonicConstants.PLAYERS[ControlType]; player++) + for (int player = 1; player <= MnemonicConstants.PLAYERS[_controlType]; player++) { - foreach (string button in MnemonicConstants.BUTTONS[ControlType].Keys) + foreach (var button in MnemonicConstants.BUTTONS[_controlType].Keys) { - input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[ControlType][button] : "."); + input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[_controlType][button] : "."); } + input.Append("|"); } @@ -148,22 +148,22 @@ namespace BizHawk.Client.Common private string GetC64ControllersAsMnemonic() { - StringBuilder input = new StringBuilder("|"); + var input = new StringBuilder("|"); - for (int player = 1; player <= MnemonicConstants.PLAYERS[ControlType]; player++) + for (int player = 1; player <= MnemonicConstants.PLAYERS[_controlType]; player++) { - foreach (string button in MnemonicConstants.BUTTONS[ControlType].Keys) + foreach (var button in MnemonicConstants.BUTTONS[_controlType].Keys) { - input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[ControlType][button] : "."); + input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[_controlType][button] : "."); } + input.Append('|'); } - foreach (string button in MnemonicConstants.BUTTONS["Commodore 64 Keyboard"].Keys) + foreach (var button in MnemonicConstants.BUTTONS["Commodore 64 Keyboard"].Keys) { input.Append(IsBasePressed(button) ? MnemonicConstants.BUTTONS["Commodore 64 Keyboard"][button] : "."); } - input.Append('|'); input.Append('|'); return input.ToString(); @@ -172,32 +172,39 @@ namespace BizHawk.Client.Common private string GetDualGameBoyControllerAsMnemonic() { // |.|........|.|........| - StringBuilder input = new StringBuilder(); + var input = new StringBuilder(); foreach (var t in MnemonicConstants.DGBMnemonic) { if (t.Item1 != null) + { input.Append(IsBasePressed(t.Item1) ? t.Item2 : '.'); + } else - input.Append(t.Item2); // seperator + { + input.Append(t.Item2); // Separator + } } + return input.ToString(); } private string GetA78ControllersAsMnemonic() { - StringBuilder input = new StringBuilder("|"); + var input = new StringBuilder("|"); input.Append(IsBasePressed("Power") ? 'P' : '.'); input.Append(IsBasePressed("Reset") ? 'r' : '.'); input.Append(IsBasePressed("Select") ? 's' : '.'); input.Append(IsBasePressed("Pause") ? 'p' : '.'); input.Append('|'); - for (int player = 1; player <= MnemonicConstants.PLAYERS[ControlType]; player++) + + for (int player = 1; player <= MnemonicConstants.PLAYERS[_controlType]; player++) { - foreach (string button in MnemonicConstants.BUTTONS[ControlType].Keys) + foreach (var button in MnemonicConstants.BUTTONS[_controlType].Keys) { - input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[ControlType][button] : "."); + input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[_controlType][button] : "."); } + input.Append('|'); } @@ -206,7 +213,7 @@ namespace BizHawk.Client.Common private string GetN64ControllersAsMnemonic() { - StringBuilder input = new StringBuilder("|"); + var input = new StringBuilder("|"); if (IsBasePressed("Power")) { input.Append('P'); @@ -219,22 +226,23 @@ namespace BizHawk.Client.Common { input.Append('.'); } + input.Append('|'); - for (int player = 1; player <= MnemonicConstants.PLAYERS[ControlType]; player++) + for (int player = 1; player <= MnemonicConstants.PLAYERS[_controlType]; player++) { - foreach (string button in MnemonicConstants.BUTTONS[ControlType].Keys) + foreach (var button in MnemonicConstants.BUTTONS[_controlType].Keys) { - input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[ControlType][button] : "."); + input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[_controlType][button] : "."); } - if (MnemonicConstants.ANALOGS[ControlType].Keys.Count > 0) + if (MnemonicConstants.ANALOGS[_controlType].Keys.Count > 0) { - foreach (string name in MnemonicConstants.ANALOGS[ControlType].Keys) + foreach (var name in MnemonicConstants.ANALOGS[_controlType].Keys) { int val; - //Nasty hackery + // Nasty hackery if (name == "Y Axis") { if (IsBasePressed("P" + player + " A Up")) @@ -277,6 +285,7 @@ namespace BizHawk.Client.Common input.Append(String.Format("{0:000}", val)).Append(','); } + input.Remove(input.Length - 1, 1); } @@ -288,7 +297,7 @@ namespace BizHawk.Client.Common private string GetSaturnControllersAsMnemonic() { - StringBuilder input = new StringBuilder("|"); + var input = new StringBuilder("|"); if (IsBasePressed("Power")) { input.Append('P'); @@ -301,14 +310,16 @@ namespace BizHawk.Client.Common { input.Append('.'); } + input.Append('|'); - for (int player = 1; player <= MnemonicConstants.PLAYERS[ControlType]; player++) + for (int player = 1; player <= MnemonicConstants.PLAYERS[_controlType]; player++) { - foreach (string button in MnemonicConstants.BUTTONS[ControlType].Keys) + foreach (var button in MnemonicConstants.BUTTONS[_controlType].Keys) { - input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[ControlType][button] : "."); + input.Append(IsBasePressed("P" + player + " " + button) ? MnemonicConstants.BUTTONS[_controlType][button] : "."); } + input.Append('|'); } @@ -317,67 +328,67 @@ namespace BizHawk.Client.Common public string GetControllersAsMnemonic() { - if (ControlType == "Null Controller") + if (_controlType == "Null Controller") { return "|.|"; } - else if (ControlType == "Atari 7800 ProLine Joystick Controller") + else if (_controlType == "Atari 7800 ProLine Joystick Controller") { return GetA78ControllersAsMnemonic(); } - else if (ControlType == "SNES Controller") + else if (_controlType == "SNES Controller") { return GetSNESControllersAsMnemonic(); } - else if (ControlType == "Commodore 64 Controller") + else if (_controlType == "Commodore 64 Controller") { return GetC64ControllersAsMnemonic(); } - else if (ControlType == "GBA Controller") + else if (_controlType == "GBA Controller") { return GetGBAControllersAsMnemonic(); } - else if (ControlType == "Dual Gameboy Controller") + else if (_controlType == "Dual Gameboy Controller") { return GetDualGameBoyControllerAsMnemonic(); } - else if (ControlType == "Nintento 64 Controller") + else if (_controlType == "Nintento 64 Controller") { return GetN64ControllersAsMnemonic(); } - else if (ControlType == "Saturn Controller") + else if (_controlType == "Saturn Controller") { return GetSaturnControllersAsMnemonic(); } - else if (ControlType == "PSP Controller") + else if (_controlType == "PSP Controller") { return "|.|"; // TODO } - StringBuilder input = new StringBuilder("|"); + var input = new StringBuilder("|"); - if (ControlType == "PC Engine Controller") + if (_controlType == "PC Engine Controller") { input.Append("."); } - else if (ControlType == "Atari 2600 Basic Controller") + else if (_controlType == "Atari 2600 Basic Controller") { input.Append(IsBasePressed("Reset") ? "r" : "."); input.Append(IsBasePressed("Select") ? "s" : "."); } - else if (ControlType == "NES Controller") + else if (_controlType == "NES Controller") { if (IsBasePressed("Power")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["Power"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["Power"]); } else if (IsBasePressed("Reset")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["Reset"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["Reset"]); } else if (IsBasePressed("FDS Eject")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["FDS Eject"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["FDS Eject"]); } else if (IsBasePressed("FDS Insert 0")) { @@ -397,220 +408,76 @@ namespace BizHawk.Client.Common } else if (IsBasePressed("VS Coin 1")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["VS Coin 1"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["VS Coin 1"]); } else if (IsBasePressed("VS Coin 2")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["VS Coin 2"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["VS Coin 2"]); } else { input.Append('.'); } } - else if (ControlType == "Genesis 3-Button Controller") + else if (_controlType == "Genesis 3-Button Controller") { if (IsBasePressed("Power")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["Power"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["Power"]); } else if (IsBasePressed("Reset")) { - input.Append(MnemonicConstants.COMMANDS[ControlType]["Reset"]); + input.Append(MnemonicConstants.COMMANDS[_controlType]["Reset"]); } else { input.Append('.'); } } - else if (ControlType == "Gameboy Controller") + else if (_controlType == "Gameboy Controller") { - input.Append(IsBasePressed("Power") ? MnemonicConstants.COMMANDS[ControlType]["Power"] : "."); + input.Append(IsBasePressed("Power") ? MnemonicConstants.COMMANDS[_controlType]["Power"] : "."); } - if (ControlType != "SMS Controller" && ControlType != "TI83 Controller" && ControlType != "ColecoVision Basic Controller") + if (_controlType != "SMS Controller" && _controlType != "TI83 Controller" && _controlType != "ColecoVision Basic Controller") { input.Append("|"); } - for (int player = 1; player <= MnemonicConstants.PLAYERS[ControlType]; player++) + for (int player = 1; player <= MnemonicConstants.PLAYERS[_controlType]; player++) { - string prefix = ""; - if (ControlType != "Gameboy Controller" && ControlType != "TI83 Controller") + var prefix = String.Empty; + if (_controlType != "Gameboy Controller" && _controlType != "TI83 Controller") { - prefix = "P" + player.ToString() + " "; + prefix = "P" + player + " "; } - foreach (string button in MnemonicConstants.BUTTONS[ControlType].Keys) + + foreach (var button in MnemonicConstants.BUTTONS[_controlType].Keys) { - input.Append(IsBasePressed(prefix + button) ? MnemonicConstants.BUTTONS[ControlType][button] : "."); + input.Append(IsBasePressed(prefix + button) ? MnemonicConstants.BUTTONS[_controlType][button] : "."); } + input.Append("|"); } - if (ControlType == "SMS Controller") + + if (_controlType == "SMS Controller") { - foreach (string command in MnemonicConstants.COMMANDS[ControlType].Keys) + foreach (var command in MnemonicConstants.COMMANDS[_controlType].Keys) { - input.Append(IsBasePressed(command) ? MnemonicConstants.COMMANDS[ControlType][command] : "."); + input.Append(IsBasePressed(command) ? MnemonicConstants.COMMANDS[_controlType][command] : "."); } + input.Append("|"); } - if (ControlType == "TI83 Controller") + + if (_controlType == "TI83 Controller") { - input.Append(".|"); //TODO: perhaps ON should go here? + input.Append(".|"); // TODO: perhaps ON should go here? } + return input.ToString(); } #endregion } - - public class NewMnemonicsGenerator - { - public MnemonicLookupTable MnemonicLookup { get; private set; } - public IController Source { get; set; } - - public List ActivePlayers { get; set; } - - public NewMnemonicsGenerator(IController source) - { - MnemonicLookup = new MnemonicLookupTable(); - Source = source; - ActivePlayers = MnemonicLookup[Global.Emulator.SystemId].Select(x => x.Name).ToList(); - } - - public bool IsEmpty - { - get - { - IEnumerable collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); - - foreach (var mc in collections) - { - foreach (var kvp in mc) - { - if (Source.IsPressed(kvp.Key)) - { - return false; - } - } - } - - return true; - } - } - - public string EmptyMnemonic - { - get - { - IEnumerable collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); - StringBuilder sb = new StringBuilder(); - - sb.Append('|'); - foreach (var mc in collections) - { - foreach (var kvp in mc) - { - sb.Append('.'); - } - sb.Append('|'); - } - - return sb.ToString(); - } - } - - public string GenerateMnemonicString(Dictionary buttons) - { - IEnumerable collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); - StringBuilder sb = new StringBuilder(); - - sb.Append('|'); - foreach (var mc in collections) - { - foreach (var kvp in mc) - { - if (buttons.ContainsKey(kvp.Key)) - { - sb.Append(buttons[kvp.Key] ? kvp.Value : '.'); - } - } - - sb.Append('|'); - } - return sb.ToString(); - } - - public string MnemonicString - { - get - { - IEnumerable collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); - StringBuilder sb = new StringBuilder(); - - sb.Append('|'); - foreach (var mc in collections) - { - foreach(var kvp in mc) - { - sb.Append(Source.IsPressed(kvp.Key) ? kvp.Value : '.'); - } - sb.Append('|'); - } - - return sb.ToString(); - } - } - - public IEnumerable Mnemonics - { - get - { - IEnumerable collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); - - List mnemonics = new List(); - foreach (var mc in collections) - { - mnemonics.AddRange(mc.Select(x => x.Value)); - } - - return mnemonics; - } - } - - public Dictionary AvailableMnemonics - { - get - { - var buttons = new Dictionary(); - IEnumerable collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); - - foreach (var mc in collections) - { - foreach (var kvp in mc) - { - buttons.Add(kvp.Key, kvp.Value); - } - } - - return buttons; - } - } - - public Dictionary GetBoolButtons() - { - var buttons = new Dictionary(); - IEnumerable collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); - - foreach (var mc in collections) - { - foreach (var kvp in mc) - { - buttons.Add(kvp.Key, Source.IsPressed(kvp.Key)); - } - } - - return buttons; - } - } } diff --git a/BizHawk.Client.Common/movie/NewMnemonicsGenerator.cs b/BizHawk.Client.Common/movie/NewMnemonicsGenerator.cs new file mode 100644 index 0000000000..f14f3c1f60 --- /dev/null +++ b/BizHawk.Client.Common/movie/NewMnemonicsGenerator.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Client.Common +{ + // Used with the version 2 movie implementation (TasMovie.cs) + public class NewMnemonicsGenerator + { + public MnemonicLookupTable MnemonicLookup { get; private set; } + public IController Source { get; set; } + + public List ActivePlayers { get; set; } + + public NewMnemonicsGenerator(IController source) + { + MnemonicLookup = new MnemonicLookupTable(); + Source = source; + ActivePlayers = MnemonicLookup[Global.Emulator.SystemId].Select(x => x.Name).ToList(); + } + + public bool IsEmpty + { + get + { + return ActiveCollections + .SelectMany(mc => mc) + .All(kvp => !this.Source.IsPressed(kvp.Key)); + } + } + + public string EmptyMnemonic + { + get + { + var sb = new StringBuilder(); + + sb.Append('|'); + foreach (var mc in ActiveCollections) + { + foreach (var kvp in mc) + { + sb.Append('.'); + } + + sb.Append('|'); + } + + return sb.ToString(); + } + } + + public string GenerateMnemonicString(Dictionary buttons) + { + var collections = MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); + var sb = new StringBuilder(); + + sb.Append('|'); + foreach (var mc in collections) + { + foreach (var kvp in mc.Where(kvp => buttons.ContainsKey(kvp.Key))) + { + sb.Append(buttons[kvp.Key] ? kvp.Value : '.'); + } + + sb.Append('|'); + } + return sb.ToString(); + } + + public string MnemonicString + { + get + { + var sb = new StringBuilder(); + sb.Append('|'); + foreach (var mc in ActiveCollections) + { + foreach (var kvp in mc) + { + sb.Append(Source.IsPressed(kvp.Key) ? kvp.Value : '.'); + } + + sb.Append('|'); + } + + return sb.ToString(); + } + } + + public IEnumerable Mnemonics + { + get + { + var mnemonics = new List(); + foreach (var mc in ActiveCollections) + { + mnemonics.AddRange(mc.Select(x => x.Value)); + } + + return mnemonics; + } + } + + public Dictionary AvailableMnemonics + { + get + { + return ActiveCollections + .SelectMany(mc => mc) + .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + } + } + + public Dictionary GetBoolButtons() + { + return ActiveCollections + .SelectMany(mc => mc) + .ToDictionary(kvp => kvp.Key, kvp => this.Source.IsPressed(kvp.Key)); + } + + private IEnumerable ActiveCollections + { + get + { + return MnemonicLookup[Global.Emulator.SystemId].Where(x => ActivePlayers.Contains(x.Name)); + } + } + } +}