mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-29 10:25:50 +08:00
* AutoFishing为单元测试重构;一个简单的单元测试GetFishpondTest * 将鼠标操作的注入挪到DesktopRegion中;提供LoadAssetImage的一个不依赖配置的重载;ChooseBait的代码中将Bv的方法替换成不依赖配置的写法;完成ChooseBait的单元测试 * 使用TimeProvider改写ChooseBait以适用单元测试;添加假的绘图上下文类;添加抛竿行为的单元测试 * 选择鱼饵行为比对上次选择的鱼饵,如果相同则直接抛竿(之前的版本曾有此逻辑),但测下来有时会选错饵导致无限抛竿,调整了相关步骤的等待间隔,希望能简单地压制此bug * 获取鱼群时过滤“获得”界面的鱼图标:1、在Fishpond构造函数中实现。2、配有此类情况的单元测试。3、并由此降低鱼钓上后的等待时间; 修复绘制鱼群时索引不正确导致遗漏的bug;获取鱼群时绘制鱼群供分析
77 lines
3.2 KiB
C#
77 lines
3.2 KiB
C#
using BehaviourTree;
|
|
using BetterGenshinImpact.GameTask.AutoFishing.Model;
|
|
using BetterGenshinImpact.GameTask.AutoFishing;
|
|
using BetterGenshinImpact.GameTask.Model.Area.Converter;
|
|
using BetterGenshinImpact.GameTask.Model.Area;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Drawing;
|
|
using BetterGenshinImpact.Core.Config;
|
|
using Compunet.YoloV8;
|
|
|
|
namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests
|
|
{
|
|
public partial class BehavioursTests
|
|
{
|
|
[Theory]
|
|
[InlineData(@"20250225101304534_ThrowRod_Succeeded.png", "false worm bait")]
|
|
[InlineData(@"20250226162217468_ThrowRod_Succeeded.png", "fruit paste bait")]
|
|
/// <summary>
|
|
/// 测试各种抛竿,结果为成功
|
|
/// </summary>
|
|
public void ThrowRodTest_VariousFish_ShouldSuccess(string screenshot1080p, string selectedBaitName)
|
|
{
|
|
//
|
|
Bitmap bitmap = new Bitmap(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}");
|
|
var imageRegion = new GameCaptureRegion(bitmap, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent());
|
|
|
|
var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build();
|
|
|
|
var blackboard = new Blackboard(predictor, sleep: i => { })
|
|
{
|
|
selectedBaitName = selectedBaitName
|
|
};
|
|
|
|
//
|
|
ThrowRod sut = new ThrowRod("-", blackboard, new FakeLogger(), new FakeInputSimulator(), drawContent: new FakeDrawContent());
|
|
BehaviourStatus actual = sut.Tick(imageRegion);
|
|
|
|
//
|
|
Assert.False(blackboard.noTargetFish);
|
|
Assert.Equal(BehaviourStatus.Succeeded, actual);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(@"20250225101304534_ThrowRod_Succeeded.png", "fruit paste bait")]
|
|
[InlineData(@"20250225101304534_ThrowRod_Succeeded.png", "redrot bait")]
|
|
[InlineData(@"20250225101304534_ThrowRod_Succeeded.png", "fake fly bait")]
|
|
/// <summary>
|
|
/// 测试各种抛竿,结果为运行中
|
|
/// </summary>
|
|
public void ThrowRodTest_VariousFish_ShouldFail(string screenshot1080p, string selectedBaitName)
|
|
{
|
|
//
|
|
Bitmap bitmap = new Bitmap(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}");
|
|
var imageRegion = new GameCaptureRegion(bitmap, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent());
|
|
|
|
var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build();
|
|
|
|
var blackboard = new Blackboard(predictor, sleep: i => { })
|
|
{
|
|
selectedBaitName = selectedBaitName
|
|
};
|
|
|
|
//
|
|
ThrowRod sut = new ThrowRod("-", blackboard, new FakeLogger(), new FakeInputSimulator(), drawContent: new FakeDrawContent());
|
|
BehaviourStatus actual = sut.Tick(imageRegion);
|
|
|
|
//
|
|
Assert.False(blackboard.noTargetFish);
|
|
Assert.Equal(BehaviourStatus.Running, actual);
|
|
}
|
|
}
|
|
}
|