Files
better-genshin-impact/BetterGenshinImpact/GameTask/AutoPathing/PathRecorder.cs
辉鸭蛋 1fd5320df2 auto pathing: update
- 移除了不必要的 `using` 语句,添加了新的 `using` 语句。
- 将 `Waypoints` 属性重命名为 `Positions`。
- 更新了 `BuildFromFilePath` 方法中的 `JsonOptions` 引用。
- 将 `Waypoint` 类移到单独的文件中,并添加了相关属性和注释。
- 添加了 `SaveToFile` 方法,用于将 `PathingTask` 对象保存到文件。
- 更新了 `PathExecutor` 中的 `TaskControl` 引用,简化了代码。
- 更新了 `PathRecorder` 的属性和方法,使用私有字段 `_pathingTask`。
- 更新了 `MapPathingPage.xaml` 的命令绑定。
- 更新了 `HotKeyPageViewModel` 和 `MapPathingViewModel` 的逻辑。
- 添加了新的 `PathingTaskConfig` 类,用于配置路径任务。
2024-09-08 02:23:45 +08:00

78 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 HHmmssffff}.json"));
}
}