using BetterGenshinImpact.Core.Config;
using BetterGenshinImpact.GameTask.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Xml.Linq;
using BetterGenshinImpact.ViewModel.Pages;
using Microsoft.Extensions.Logging;
namespace BetterGenshinImpact.GameTask.AutoPathing.Model;
[Serializable]
public class PathingTask
{
///
/// 实际存储的文件名
///
[JsonIgnore]
public string FileName { get; set; } = string.Empty;
///
/// 实际存储的文件路径
///
[JsonIgnore]
public string FullPath { get; set; } = string.Empty;
public PathingTaskInfo Info { get; set; } = new();
public List Positions { get; set; } = [];
public bool HasAction(string actionName)
{
return Positions.Exists(p => p.Action == actionName);
}
///
/// 获取采集物名称
///
///
public string? GetMaterialName()
{
if (string.IsNullOrWhiteSpace(FullPath))
{
return null;
}
// 获取 MapPathingViewModel.PathJsonPath
var basePath = MapPathingViewModel.PathJsonPath;
// 获取 FullPath 相对于 basePath 的相对路径
var relativePath = Path.GetRelativePath(basePath, FullPath);
// 分割相对路径,获取第一个文件夹名称
var firstFolder = relativePath.Split(Path.DirectorySeparatorChar)[0];
return firstFolder;
}
public static PathingTask BuildFromFilePath(string filePath)
{
var json = File.ReadAllText(filePath);
var task = JsonSerializer.Deserialize(json, PathRecorder.JsonOptions) ?? throw new Exception("Failed to deserialize PathingTask");
task.FileName = Path.GetFileName(filePath);
task.FullPath = filePath;
// 比较版本号大小 BgiVersion
if (!string.IsNullOrWhiteSpace(task.Info.BgiVersion) && Global.IsNewVersion(task.Info.BgiVersion))
{
TaskControl.Logger.LogError("地图追踪任务 {Name} 版本号要求 {BgiVersion} 大于当前 BetterGI 版本号 {CurrentVersion} , 脚本可能无法正常工作,请更新 BetterGI 版本!", task.FileName, task.Info.BgiVersion, Global.Version);
}
return task;
}
public static PathingTask BuildFromJson(string json)
{
var task = JsonSerializer.Deserialize(json, PathRecorder.JsonOptions) ?? throw new Exception("Failed to deserialize PathingTask");
return task;
}
public void SaveToFile(string filePath)
{
var json = JsonSerializer.Serialize(this, PathRecorder.JsonOptions);
File.WriteAllText(filePath, json, Encoding.UTF8);
}
}