Bk2 - Rework how input logs are generated and read

This commit is contained in:
adelikat 2014-06-21 11:56:30 +00:00
parent 9fccae56de
commit 0b21085a98
3 changed files with 86 additions and 50 deletions

View File

@ -80,18 +80,30 @@ namespace BizHawk.Client.Common
if (!string.IsNullOrWhiteSpace(mnemonic))
{
var trimmed = mnemonic.Replace("|", "");
for (int i = 0; i < Type.BoolButtons.Count; i++)
{
MyBoolButtons[Type.BoolButtons[i]] = trimmed[i] == '.' ? false : true;
}
var buttons = Type.ControlsOrdered.SelectMany(x => x).ToList();
var iterator = 0;
var boolIt = 0;
var floatIt = 0;
var floats = trimmed.Remove(0, Type.BoolButtons.Count);
for (int i = 0; i < Type.FloatControls.Count; i++)
for (int i = 0; i < buttons.Count; i++)
{
var temp = floats.Substring(i * 4, 3);
var val = int.Parse(temp);
MyFloatControls[Type.FloatControls[i]] = val;
if (Type.BoolButtons.Contains(buttons[i]))
{
var boolBtn = Type.BoolButtons.First(x => x == buttons[i]);
MyBoolButtons[boolBtn] = trimmed[iterator] == '.' ? false : true;
iterator++;
boolIt++;
}
else if (Type.FloatControls.Contains(buttons[i]))
{
var temp = trimmed.Substring(iterator, 3);
var val = int.Parse(temp);
var floatBtn = Type.FloatControls.First(x => x == buttons[i]);
MyFloatControls[floatBtn] = val;
iterator += 4;
floatIt++;
}
}
}
}

View File

@ -66,17 +66,17 @@ namespace BizHawk.Client.Common
public string GenerateLogKey()
{
StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();
sb.Append("LogKey:");
foreach (var button in _source.Type.BoolButtons)
foreach (var group in _source.Type.ControlsOrdered)
{
sb.Append(button).Append('|');
}
foreach (var button in _source.Type.FloatControls)
{
sb.Append(button).Append('|');
foreach (var button in group)
{
sb
.Append(button)
.Append('|');
}
}
return sb.ToString();
@ -84,49 +84,45 @@ namespace BizHawk.Client.Common
private string CreateLogEntry(bool createEmpty = false)
{
try
var sb = new StringBuilder();
sb.Append('|');
foreach (var group in _source.Type.ControlsOrdered)
{
var sb = new StringBuilder();
sb.Append('|');
foreach (var button in _source.Type.BoolButtons)
if (group.Any())
{
if (createEmpty)
foreach (var button in group)
{
sb.Append('.');
}
else
{
sb.Append(_source.IsPressed(button) ? Mnemonics[button] : '.');
}
}
sb.Append('|');
if (_source.Type.FloatControls.Any())
{
foreach (var floatBtn in _source.Type.FloatControls)
{
if (createEmpty)
if (_source.Type.FloatControls.Contains(button))
{
sb.Append("000,");
if (createEmpty)
{
sb.Append("000,");
}
else
{
var val = (int)_source.GetFloat(button);
sb.Append(val.ToString().PadLeft(3, '0')).Append(',');
}
}
else
else if (_source.Type.BoolButtons.Contains(button))
{
var val = (int)_source.GetFloat(floatBtn);
sb.Append(val.ToString().PadLeft(3, '0')).Append(',');
if (createEmpty)
{
sb.Append('.');
}
else
{
sb.Append(_source.IsPressed(button) ? Mnemonics[button] : '.');
}
}
}
sb.Remove(sb.Length - 1, 1);
sb.Append('|');
}
}
sb.Append('|');
return sb.ToString();
}
catch (Exception ex)
{
return ex.ToString();
}
return sb.ToString();
}
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace BizHawk.Emulation.Common
{
@ -114,6 +115,33 @@ namespace BizHawk.Emulation.Common
FloatRanges = new List<FloatRange>();
AxisConstraints = new List<AxisConstraint>();
}
/// <summary>
/// Puts the controls in a logical order such as by controller number,
/// This is a default implementation that should work most of the time
/// </summary>
public virtual IEnumerable<IEnumerable<string>> ControlsOrdered
{
get
{
var list = FloatControls.Union(BoolButtons);
yield return list
.Where(x => !x.StartsWith("P1 ") && !x.StartsWith("P2 ") && !x.StartsWith("P3 ") && !x.StartsWith("P4 "));
yield return list
.Where(x => x.StartsWith("P1 "));
yield return list
.Where(x => x.StartsWith("P2 "));
yield return list
.Where(x => x.StartsWith("P3 "));
yield return list
.Where(x => x.StartsWith("P4 "));
}
}
}
public interface IController