using System;
using System.Linq;
namespace BetterGenshinImpact.Helpers;
///
/// 命令行参数统一解析,启动时解析一次,各处查询解析结果。
///
public class CommandLineOptions
{
private static CommandLineOptions? _instance;
public static CommandLineOptions Instance => _instance ??= Parse(Environment.GetCommandLineArgs());
public CommandLineAction Action { get; }
///
/// startOneDragon 时可选的配置名称(第 3 个参数)
///
public string? OneDragonConfigName { get; }
///
/// --startGroups / --TaskProgress 时传入的组名列表(第 3 个参数起)
///
public string[] GroupNames { get; } = [];
///
/// 是否有命令行任务参数(startOneDragon / --startGroups / --TaskProgress / start)
///
public bool HasTaskArgs => Action != CommandLineAction.None;
///
/// 是否是需要 StartGameTask 自行处理游戏启动的命令
/// (一条龙、配置组、任务进度由各自流程中的 StartGameTask 启动游戏)
///
public bool ShouldDeferGameStart => Action is CommandLineAction.StartOneDragon
or CommandLineAction.StartGroups
or CommandLineAction.TaskProgress;
private CommandLineOptions(CommandLineAction action, string? oneDragonConfigName = null, string[]? groupNames = null)
{
Action = action;
OneDragonConfigName = oneDragonConfigName;
GroupNames = groupNames ?? [];
}
internal static CommandLineOptions Parse(string[] args)
{
if (args.Length <= 1)
return new CommandLineOptions(CommandLineAction.None);
var arg1 = args[1].Trim();
var extra = args.Skip(2).Select(x => x.Trim()).ToArray();
if (arg1.Contains("startOneDragon", StringComparison.OrdinalIgnoreCase))
{
return new CommandLineOptions(CommandLineAction.StartOneDragon,
oneDragonConfigName: extra.Length > 0 ? extra[0] : null);
}
if (arg1.Equals("--startGroups", StringComparison.OrdinalIgnoreCase))
{
return new CommandLineOptions(CommandLineAction.StartGroups, groupNames: extra);
}
if (arg1.Equals("--TaskProgress", StringComparison.OrdinalIgnoreCase))
{
return new CommandLineOptions(CommandLineAction.TaskProgress, groupNames: extra);
}
if (arg1.Contains("start", StringComparison.OrdinalIgnoreCase))
{
return new CommandLineOptions(CommandLineAction.Start);
}
return new CommandLineOptions(CommandLineAction.None);
}
}
public enum CommandLineAction
{
/// 双击启动,无命令行参数
None,
/// 纯 "start" — 仅启动截图器
Start,
/// startOneDragon — 启动一条龙
StartOneDragon,
/// --startGroups — 启动调度组
StartGroups,
/// --TaskProgress — 启动任务进度
TaskProgress,
}