Actually fix `GenOrderedControls` invariant, dropping Libretro hack
fixesa8368849a
and3384ce862
This commit is contained in:
parent
1eb8433b4a
commit
b091344896
|
@ -16,15 +16,9 @@ namespace BizHawk.Client.Common
|
||||||
throw new InvalidOperationException("Can't generate input display string with empty mnemonics cache");
|
throw new InvalidOperationException("Can't generate input display string with empty mnemonics cache");
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var controls = source.Definition.ControlsOrdered.ToList();
|
var players = source.Definition.ControlsOrdered;
|
||||||
// index 0 is for controls that don't belong to any indexed player
|
var playersNewOrder = players.Skip(1).Concat(players.Take(1)); // move first ("player 0") to end
|
||||||
if (controls.ElementAtOrDefault(0) != null)
|
foreach ((string buttonName, AxisSpec? axisSpec) in playersNewOrder.SelectMany(static x => x))
|
||||||
{
|
|
||||||
controls.Add(controls[0]);
|
|
||||||
controls.RemoveAt(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ((string buttonName, AxisSpec? axisSpec) in controls.SelectMany(x => x))
|
|
||||||
{
|
{
|
||||||
if (axisSpec.HasValue)
|
if (axisSpec.HasValue)
|
||||||
{
|
{
|
||||||
|
|
|
@ -114,6 +114,7 @@ namespace BizHawk.Emulation.Common
|
||||||
if (!_mutable) throw new InvalidOperationException(ERR_MSG);
|
if (!_mutable) throw new InvalidOperationException(ERR_MSG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks>implementors should include empty lists for empty players, including "player 0", to match this base implementation</remarks>
|
||||||
protected virtual IReadOnlyList<IReadOnlyList<(string Name, AxisSpec? AxisSpec)>> GenOrderedControls()
|
protected virtual IReadOnlyList<IReadOnlyList<(string Name, AxisSpec? AxisSpec)>> GenOrderedControls()
|
||||||
{
|
{
|
||||||
var ret = new List<(string, AxisSpec?)>[PlayerCount + 1];
|
var ret = new List<(string, AxisSpec?)>[PlayerCount + 1];
|
||||||
|
|
|
@ -111,29 +111,6 @@ namespace BizHawk.Emulation.Cores.Libretro
|
||||||
|
|
||||||
MakeImmutable();
|
MakeImmutable();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IReadOnlyList<IReadOnlyList<(string Name, AxisSpec? AxisSpec)>> GenOrderedControls()
|
|
||||||
{
|
|
||||||
// all this is to remove the keyboard buttons from P0 and put them in P3 so they appear at the end of the input display
|
|
||||||
var players = base.GenOrderedControls().ToList();
|
|
||||||
List<(string, AxisSpec?)> retroKeyboard = new();
|
|
||||||
var p0 = (List<(string, AxisSpec?)>) players[0];
|
|
||||||
for (var i = 0; i < p0.Count; /* incremented in body */)
|
|
||||||
{
|
|
||||||
(string ButtonName, AxisSpec?) button = p0[i];
|
|
||||||
if (CategoryLabels.TryGetValue(button.ButtonName, out var v) && v is CAT_KEYBOARD)
|
|
||||||
{
|
|
||||||
retroKeyboard.Add(button);
|
|
||||||
p0.RemoveAt(i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
players.Add(retroKeyboard);
|
|
||||||
return players;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ControllerDefinition ControllerDefinition { get; }
|
public ControllerDefinition ControllerDefinition { get; }
|
||||||
|
|
Loading…
Reference in New Issue