Bk2 - Rework how input logs are generated and read
This commit is contained in:
parent
9fccae56de
commit
0b21085a98
|
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue