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, }