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