using System; using BetterGenshinImpact.GameTask.AutoPathing; using BetterGenshinImpact.GameTask.AutoPathing.Model; using System.Threading.Tasks; using BetterGenshinImpact.Core.Config; using BetterGenshinImpact.GameTask.Common; using Microsoft.Extensions.Logging; namespace BetterGenshinImpact.Core.Script.Dependence; public class AutoPathingScript { private object? _config = null; private string _rootPath; private readonly LimitedFile _autoPathingFile; public AutoPathingScript(string rootPath, object? config) { _config = config; _rootPath = rootPath; _autoPathingFile = new LimitedFile(Global.Absolute(@"User\AutoPathing")); } public async Task Run(string json) { try { var task = PathingTask.BuildFromJson(json); var pathExecutor = new PathExecutor(CancellationContext.Instance.Cts.Token); if (_config != null && _config is PathingPartyConfig patyConfig) { pathExecutor.PartyConfig = patyConfig; } await pathExecutor.Pathing(task); } catch (Exception e) { TaskControl.Logger.LogDebug(e,"执行地图追踪时候发生错误"); TaskControl.Logger.LogError("执行地图追踪时候发生错误: {Msg}",e.Message); } } public async Task RunFile(string path) { try { var json = await new LimitedFile(_rootPath).ReadText(path); await Run(json); } catch (Exception e) { TaskControl.Logger.LogDebug(e,"读取文件时发生错误"); TaskControl.Logger.LogError("读取文件时发生错误: {Msg}",e.Message); } } /// /// 从已订阅的内容中获取文件 /// /// 在 `\User\AutoPathing` 目录下获取文件 public async Task RunFileFromUser(string path) { var json = await AutoPathingFile.ReadText(path); await Run(json); } /// /// 判断 AutoPathing 目录下的路径是否存在 /// /// 相对于 User\AutoPathing 的路径 /// 存在返回 true,否则返回 false public bool IsExists(string subPath) => AutoPathingFile.IsExists(subPath); /// /// 判断 AutoPathing 目录下的路径是否为文件 /// /// 相对于 User\AutoPathing 的路径 /// 是文件返回 true,否则返回 false public bool IsFile(string subPath) => AutoPathingFile.IsFile(subPath); /// /// 判断 AutoPathing 目录下的路径是否为文件夹 /// /// 相对于 User\AutoPathing 的路径 /// 是文件夹返回 true,否则返回 false public bool IsFolder(string subPath) => AutoPathingFile.IsFolder(subPath); /// /// 读取 AutoPathing 目录下指定文件夹的内容(非递归方式) /// /// 相对于 User\AutoPathing 的子目录路径,默认为相对根目录 /// 文件夹内所有文件和文件夹的相对路径数组,出错时返回空数组 public string[] ReadPathSync(string subPath = "./") => AutoPathingFile.ReadPathSync(subPath); /// /// LimitedFile 实例,用于操作 AutoPathing 目录 /// private LimitedFile AutoPathingFile => _autoPathingFile; }