mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-15 09:17:13 +08:00
新增任务类属性和配置页面,优化日志记录 在 `BetterGenshinImpact.csproj` 文件中,添加了两个新文件夹路径 `GameTask\OneDragon\` 和 `User\AutoPathing\`。 在多个任务类文件中(如 `AutoDomainTask.cs`、`AutoFightTask.cs`、`AutoGeniusInvokationTask.cs`、`AutoMusicGameTask.cs`、`AutoWoodTask.cs`),新增了 `Name` 属性。 在 `PickAroundHandler.cs` 文件中,优化了 `RunAsync` 方法的日志记录,并添加了超时检查。 在 `ISoloTask.cs` 文件中,新增了 `Name` 属性和 `Start` 方法的接口定义。 在 `OneDragonTaskItem.cs` 文件中,新增了 `ViewModel` 属性。 在 `OneDragonFlowPage.xaml` 文件中,右侧配置部分从 `StackPanel` 改为 `ContentControl`,并添加了 `DataTemplate` 以支持不同任务类型的配置页面。 在 `IViewModel.cs` 文件中,将 `IViewModel` 接口的访问修饰符从 `internal` 改为 `public`。 在 `OneDragonFlowViewModel.cs` 文件中,初始化了任务项的 `ViewModel` 属性。 在 `ScriptControlViewModel.cs` 文件中,移除了构造函数的 `HomePageViewModel` 参数。 新增了 `LoginConfigViewModel.cs` 和 `MailConfigViewModel.cs` 文件,定义了相应的 ViewModel 类。 新增了 `LoginConfigPage.xaml` 和 `MailConfigPage.xaml` 文件,定义了相应的 XAML 布局及其交互逻辑。
42 lines
1.4 KiB
C#
42 lines
1.4 KiB
C#
using System;
|
|
using BetterGenshinImpact.Core.Simulator;
|
|
using BetterGenshinImpact.GameTask.Common;
|
|
using Microsoft.Extensions.Logging;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Vanara.PInvoke;
|
|
using static BetterGenshinImpact.GameTask.Common.TaskControl;
|
|
|
|
namespace BetterGenshinImpact.GameTask.AutoPathing.Handler;
|
|
|
|
/// <summary>
|
|
/// 采集任务到达点位后执行拾取操作
|
|
/// </summary>
|
|
public class PickAroundHandler : IActionHandler
|
|
{
|
|
public async Task RunAsync(CancellationToken ct)
|
|
{
|
|
var screen = CaptureToRectArea();
|
|
var angle = 0;
|
|
CameraRotateTask rotateTask = new(ct);
|
|
Logger.LogInformation("执行 {Text}", "小范围内自动拾取");
|
|
await rotateTask.WaitUntilRotatedTo(angle, 5);
|
|
Simulation.SendInput.Keyboard.KeyDown(User32.VK.VK_W);
|
|
var startTime = DateTime.UtcNow;
|
|
while (!ct.IsCancellationRequested)
|
|
{
|
|
angle = (5 + angle) % 360;
|
|
rotateTask.RotateToApproach(angle, screen);
|
|
Simulation.SendInput.Keyboard.KeyPress(User32.VK.VK_SPACE);
|
|
Simulation.SendInput.Keyboard.KeyPress(User32.VK.VK_F);
|
|
await Delay(100, ct);
|
|
if (DateTime.UtcNow - startTime > TimeSpan.FromSeconds(5))
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
Simulation.SendInput.Keyboard.KeyUp(User32.VK.VK_W);
|
|
}
|
|
}
|