r2mods/ilspy_dump/ror2_csproj/RoR2/QuitConfirmationHelper.cs

80 lines
2.3 KiB
C#

using System;
using RoR2.UI;
using UnityEngine.Networking;
namespace RoR2;
public static class QuitConfirmationHelper
{
private enum NetworkStatus
{
None,
SinglePlayer,
Client,
Host
}
private static bool IsQuitConfirmationRequired()
{
if ((bool)Run.instance && !GameOverController.instance)
{
return true;
}
return false;
}
public static void IssueQuitCommand(NetworkUser sender, string consoleCmd)
{
IssueQuitCommand(RunCmd);
void RunCmd()
{
Console.instance.SubmitCmd(sender, consoleCmd);
}
}
public static void IssueQuitCommand(Action action)
{
if (!IsQuitConfirmationRequired())
{
action();
return;
}
NetworkStatus networkStatus = ((NetworkUser.readOnlyInstancesList.Count <= NetworkUser.readOnlyLocalPlayersList.Count) ? NetworkStatus.SinglePlayer : ((!NetworkServer.active) ? NetworkStatus.Client : NetworkStatus.Host));
string text = "";
text = networkStatus switch
{
NetworkStatus.None => "",
NetworkStatus.SinglePlayer => "QUIT_RUN_CONFIRM_DIALOG_BODY_SINGLEPLAYER",
NetworkStatus.Client => "QUIT_RUN_CONFIRM_DIALOG_BODY_CLIENT",
NetworkStatus.Host => "QUIT_RUN_CONFIRM_DIALOG_BODY_HOST",
_ => throw new ArgumentOutOfRangeException(),
};
MPEventSystem owner = null;
foreach (MPEventSystem readOnlyInstances in MPEventSystem.readOnlyInstancesList)
{
if (readOnlyInstances.player.id == PauseManager.PausingPlayerID)
{
owner = readOnlyInstances;
break;
}
}
SimpleDialogBox simpleDialogBox = SimpleDialogBox.Create(owner);
simpleDialogBox.headerToken = new SimpleDialogBox.TokenParamsPair("QUIT_RUN_CONFIRM_DIALOG_TITLE");
simpleDialogBox.descriptionToken = new SimpleDialogBox.TokenParamsPair(text);
simpleDialogBox.AddActionButton(action.Invoke, "DIALOG_OPTION_YES", true);
simpleDialogBox.AddCancelButton("CANCEL");
}
[ConCommand(commandName = "quit_confirmed_command", flags = ConVarFlags.None, helpText = "Runs the command provided in the argument only if the user confirms they want to quit the current game via dialog UI.")]
private static void CCQuitConfirmedCommand(ConCommandArgs args)
{
NetworkUser sender = args.sender;
string consoleCmd = args[0];
IssueQuitCommand(RunCmd);
void RunCmd()
{
Console.instance.SubmitCmd(sender, consoleCmd);
}
}
}