mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-04-02 10:45:22 +08:00
- 移除了不必要的 `using` 语句,添加了新的 `using` 语句。 - 将 `Waypoints` 属性重命名为 `Positions`。 - 更新了 `BuildFromFilePath` 方法中的 `JsonOptions` 引用。 - 将 `Waypoint` 类移到单独的文件中,并添加了相关属性和注释。 - 添加了 `SaveToFile` 方法,用于将 `PathingTask` 对象保存到文件。 - 更新了 `PathExecutor` 中的 `TaskControl` 引用,简化了代码。 - 更新了 `PathRecorder` 的属性和方法,使用私有字段 `_pathingTask`。 - 更新了 `MapPathingPage.xaml` 的命令绑定。 - 更新了 `HotKeyPageViewModel` 和 `MapPathingViewModel` 的逻辑。 - 添加了新的 `PathingTaskConfig` 类,用于配置路径任务。
78 lines
2.9 KiB
C#
78 lines
2.9 KiB
C#
using BetterGenshinImpact.Core.Config;
|
||
using BetterGenshinImpact.GameTask.AutoPathing.Model;
|
||
using BetterGenshinImpact.GameTask.AutoPathing.Model.Enum;
|
||
using BetterGenshinImpact.GameTask.Common;
|
||
using BetterGenshinImpact.GameTask.Common.Map;
|
||
using BetterGenshinImpact.ViewModel.Pages;
|
||
using Microsoft.Extensions.Logging;
|
||
using System;
|
||
using System.IO;
|
||
using System.Text.Json;
|
||
using System.Text.Json.Serialization;
|
||
|
||
namespace BetterGenshinImpact.GameTask.AutoPathing;
|
||
|
||
public class PathRecorder
|
||
{
|
||
public static readonly JsonSerializerOptions JsonOptions = new()
|
||
{
|
||
NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals,
|
||
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
|
||
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower, // 下划线
|
||
AllowTrailingCommas = true,
|
||
ReadCommentHandling = JsonCommentHandling.Skip,
|
||
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
|
||
};
|
||
|
||
private PathingTask _pathingTask = new();
|
||
|
||
public void Start()
|
||
{
|
||
_pathingTask = new PathingTask();
|
||
TaskControl.Logger.LogInformation("开始路径点记录");
|
||
var waypoint = new Waypoint();
|
||
var screen = TaskControl.CaptureToRectArea();
|
||
var position = Navigation.GetPosition(screen);
|
||
position = MapCoordinate.Main2048ToGame(position);
|
||
waypoint.X = position.X;
|
||
waypoint.Y = position.Y;
|
||
waypoint.Type = WaypointType.Teleport.Code;
|
||
waypoint.MoveMode = MoveModeEnum.Walk.Code;
|
||
_pathingTask.Positions.Add(waypoint);
|
||
TaskControl.Logger.LogInformation("已创建初始路径点({x},{y})", waypoint.X, waypoint.Y);
|
||
}
|
||
|
||
public void AddWaypoint(string waypointType = "")
|
||
{
|
||
Waypoint waypoint = new();
|
||
var screen = TaskControl.CaptureToRectArea();
|
||
var position = Navigation.GetPosition(screen);
|
||
position = MapCoordinate.Main2048ToGame(position);
|
||
waypoint.X = position.X;
|
||
waypoint.Y = position.Y;
|
||
waypoint.Type = string.IsNullOrEmpty(waypointType) ? WaypointType.Path.Code : waypointType;
|
||
// var motionStatus = Bv.GetMotionStatus(screen);
|
||
// switch (motionStatus)
|
||
// {
|
||
// case MotionStatus.Fly:
|
||
// waypoint.MoveStatus = MoveStatusType.Fly.Code;
|
||
// break;
|
||
//
|
||
// case MotionStatus.Climb:
|
||
// waypoint.MoveStatus = MoveStatusType.Jump.Code;
|
||
// break;
|
||
//
|
||
// default:
|
||
// waypoint.MoveStatus = MoveStatusType.Walk.Code;
|
||
// break;
|
||
// }
|
||
_pathingTask.Positions.Add(waypoint);
|
||
TaskControl.Logger.LogInformation("已添加途径点({x},{y})", waypoint.X, waypoint.Y);
|
||
}
|
||
|
||
public void Save()
|
||
{
|
||
_pathingTask.SaveToFile(Path.Combine(MapPathingViewModel.PathJsonPath, $@"{DateTime.Now:yyyy-MM-dd HH:mm:ss:ffff}.json"));
|
||
}
|
||
}
|