Skip to content

Commit

Permalink
misc: Headless: Inherit main input config
Browse files Browse the repository at this point in the history
  • Loading branch information
GreemDev committed Jan 1, 2025
1 parent fd2b5a7 commit 391f57b
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 11 deletions.
32 changes: 23 additions & 9 deletions src/Ryujinx/Headless/HeadlessRyujinx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,11 @@ static void Load(string[] originalArgs, Options option)
}

ReloadConfig();

if (option.InheritConfig)
{
option.InheritMainConfigInput(originalArgs, ConfigurationState.Instance);
}

_virtualFileSystem = VirtualFileSystem.CreateInstance();
_libHacHorizonManager = new LibHacHorizonManager();
Expand Down Expand Up @@ -224,15 +229,7 @@ static void Load(string[] originalArgs, Options option)
_enableKeyboard = option.EnableKeyboard;
_enableMouse = option.EnableMouse;

static void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index)
{
InputConfig inputConfig = HandlePlayerConfiguration(inputProfileName, inputId, index);

if (inputConfig != null)
{
_inputConfiguration.Add(inputConfig);
}
}

LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1);
LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2);
Expand All @@ -244,7 +241,6 @@ static void LoadPlayerConfiguration(string inputProfileName, string inputId, Pla
LoadPlayerConfiguration(option.InputProfile8Name, option.InputId8, PlayerIndex.Player8);
LoadPlayerConfiguration(option.InputProfileHandheldName, option.InputIdHandheld, PlayerIndex.Handheld);


if (_inputConfiguration.Count == 0)
{
return;
Expand Down Expand Up @@ -306,6 +302,24 @@ static void LoadPlayerConfiguration(string inputProfileName, string inputId, Pla
}

_inputManager.Dispose();

return;

void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index)
{
if (index == PlayerIndex.Handheld && _inputConfiguration.Count > 0)
{
Logger.Info?.Print(LogClass.Configuration, "Skipping handheld configuration as there are already other players configured.");
return;
}

InputConfig inputConfig = option.InheritedInputConfigs[index] ?? HandlePlayerConfiguration(inputProfileName, inputId, index);

if (inputConfig != null)
{
_inputConfiguration.Add(inputConfig);
}
}
}

private static void SetupProgressHandler()
Expand Down
35 changes: 33 additions & 2 deletions src/Ryujinx/Headless/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,39 @@ public void InheritMainConfig(string[] originalArgs, ConfigurationState configur
return;

bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey)));
}

public void InheritMainConfigInput(string[] originalArgs, ConfigurationState configurationState)
{
Dictionary<PlayerIndex, (string InputId, string InputProfileName)> indicesToProperties = new()
{
{ PlayerIndex.Handheld, (nameof(InputIdHandheld), nameof(InputProfileHandheldName)) },
{ PlayerIndex.Player1, (nameof(InputId1), nameof(InputProfile1Name)) },
{ PlayerIndex.Player2, (nameof(InputId2), nameof(InputProfile2Name)) },
{ PlayerIndex.Player3, (nameof(InputId3), nameof(InputProfile3Name)) },
{ PlayerIndex.Player4, (nameof(InputId4), nameof(InputProfile4Name)) },
{ PlayerIndex.Player5, (nameof(InputId5), nameof(InputProfile5Name)) },
{ PlayerIndex.Player6, (nameof(InputId6), nameof(InputProfile6Name)) },
{ PlayerIndex.Player7, (nameof(InputId7), nameof(InputProfile7Name)) },
{ PlayerIndex.Player8, (nameof(InputId8), nameof(InputProfile8Name)) }
};

foreach ((PlayerIndex playerIndex, (string id, string profile)) in indicesToProperties)
{
if (NeedsOverride(id) && NeedsOverride(profile))
{
configurationState.Hid.InputConfig.Value.FindFirst(x => x.PlayerIndex == playerIndex)
.IfPresent(ic => InheritedInputConfigs[playerIndex] = ic);
}
}

string OptionName(string propertyName) =>
typeof(Options)!.GetProperty(propertyName)!.GetCustomAttribute<OptionAttribute>()!.LongName;
return;

bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey)));
}

private static string OptionName(string propertyName) =>
typeof(Options)!.GetProperty(propertyName)!.GetCustomAttribute<OptionAttribute>()!.LongName;

// General

Expand Down Expand Up @@ -391,5 +420,7 @@ string OptionName(string propertyName) =>

[Value(0, MetaName = "input", HelpText = "Input to load.", Required = true)]
public string InputPath { get; set; }

public SafeDictionary<PlayerIndex, InputConfig> InheritedInputConfigs = new();
}
}

0 comments on commit 391f57b

Please sign in to comment.