Files
better-genshin-impact/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.CheckRaiseHook.cs
FishmanTheMurloc 40cd76fbdc Feat/multi lan (#1364)
* 多语言下拉框挪到其他设置下

* 使用正经的Fixture写法,杜绝并行测试时paddle崩溃的问题

* 适配不同主城的合成台的不同法语名

* 修正语言资源的正则表达式,好久没用了写错了好多;为AutoDomainTask新增的“地脉异常”、“点击任意位置关闭”添加多语言适配
2025-03-29 12:54:27 +08:00

97 lines
4.0 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 BehaviourTree;
using BetterGenshinImpact.GameTask.AutoFishing.Model;
using BetterGenshinImpact.GameTask.AutoFishing;
using BetterGenshinImpact.GameTask.Model.Area.Converter;
using BetterGenshinImpact.GameTask.Model.Area;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BehaviourTree.Composites;
using BehaviourTree.FluentBuilder;
using Microsoft.Extensions.Time.Testing;
namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests
{
public partial class BehavioursTests
{
[Fact]
/// <summary>
/// 即使抛竿的瞬间、开始检测咬杆时遇到了假阳性CheckRaiseHook也能驳回这种情况返回失败
/// </summary>
public void CheckRaiseHook_BreakThrough_When_ThrowRod_ShouldFail()
{
//
Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\20250314164703100_FishBite_Succeeded_FP.png");
FakeInputSimulator input = new FakeInputSimulator();
FakeDrawContent drawContent = new FakeDrawContent();
FakeSystemInfo systemInfo = new FakeSystemInfo(new Vanara.PInvoke.RECT(0, 0, mat.Width, mat.Height), 1);
AutoFishingAssets autoFishingAssets = new AutoFishingAssets(systemInfo);
var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(input.Mouse), converter: new ScaleConverter(1d), drawContent);
var blackboard = new Blackboard(sleep: i => { }, autoFishingAssets: autoFishingAssets)
{
};
FakeTimeProvider timeProvider = new FakeTimeProvider();
FakeLogger logger = new FakeLogger();
//
var sut = FluentBuilder.Create<ImageRegion>()
.MySimpleParallel("下杆中", SimpleParallelPolicy.OnlyOneMustSucceed)
.PushLeaf(() => new CheckThrowRod("检查抛竿结果", blackboard, logger, false, timeProvider)) // todo 后面串联一个召回率高的下杆中检测方法
.PushLeaf(() => new FishBite("自动提竿", blackboard, logger, false, input, OcrService, drawContent))
.PushLeaf(() => new FishBiteTimeout("下杆超时检查", 15, logger, false, input, timeProvider))
.End()
.Build();
BehaviourStatus actual = sut.Tick(imageRegion);
//
Assert.Equal(BehaviourStatus.Succeeded, actual); // 此时下杆中状态瞬间完成,进入拉条
//
sut = FluentBuilder.Create<ImageRegion>()
.MySimpleParallel("拉条中", policy: SimpleParallelPolicy.OnlyOneMustSucceed)
.PushLeaf(() => new CheckRaiseHook("检查提竿结果", blackboard, logger, false, timeProvider))
.Sequence("拉条序列")
.PushLeaf(() => new GetFishBoxArea("等待拉条出现", blackboard, logger, false, timeProvider))
.PushLeaf(() => new Fishing("钓鱼拉条", blackboard, logger, false, input, timeProvider, drawContent))
.End()
.End()
.Build();
//
actual = sut.Tick(imageRegion);
//
Assert.Equal(BehaviourStatus.Running, actual);
//
timeProvider.Advance(TimeSpan.FromSeconds(1)); // 1秒后浮漂落入水面
mat = new Mat(@$"..\..\..\Assets\AutoFishing\20250306111749714_CheckThrowRod_Succeeded.png"); // 一张正常下杆的图片
imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(input.Mouse), converter: new ScaleConverter(1d), drawContent);
//
actual = sut.Tick(imageRegion);
//
Assert.Equal(BehaviourStatus.Running, actual);
//
timeProvider.Advance(TimeSpan.FromSeconds(2));
//
actual = sut.Tick(imageRegion);
//
Assert.Equal(BehaviourStatus.Failed, actual);
}
}
}