using CommunityToolkit.Mvvm.ComponentModel; using System; using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; using BetterGenshinImpact.GameTask.AutoTrackPath.Model; using Range = OpenCvSharp.Range; namespace BetterGenshinImpact.GameTask.AutoTrackPath; public partial class TpConfig : ObservableValidator { [ObservableProperty] private bool _mapZoomEnabled = true; // 地图缩放开关 [ObservableProperty] [NotifyDataErrorInfo] [Range(600, Int32.MaxValue, ErrorMessage = "恰当的地图缩小的最小距离:>= 600")] private int _mapZoomOutDistance = 1000; // 地图缩小的最小距离,单位:像素 partial void OnMapZoomOutDistanceChanged(int value) { // 如果验证失败且当前值不是默认值 if (value < 600) { MapZoomOutDistance = 1000; } } [ObservableProperty] [NotifyDataErrorInfo] [Range(200, 600, ErrorMessage = "恰当的地图缩小的最小距离:200-600")] private int _mapZoomInDistance = 400; // 地图放大的最大距离,单位:像素 partial void OnMapZoomInDistanceChanged(int value) { if (value is < 200 or > 600) { MapZoomInDistance = 400; } } [ObservableProperty] [NotifyDataErrorInfo] [Range(2, 100, ErrorMessage = "恰当的鼠标移动时间间隔:2-100")] private int _stepIntervalMilliseconds = 20; // 鼠标移动时间间隔,单位:ms partial void OnStepIntervalMillisecondsChanged(int value) { if (value is < 2 or > 100) { StepIntervalMilliseconds = 20; } } [ObservableProperty] [NotifyDataErrorInfo] [Range(1.0, 6.0)] private double _maxZoomLevel = 5.0; // 最大缩放等级 [ObservableProperty] [NotifyDataErrorInfo] [Range(1.0, 6.0)] private double _minZoomLevel = 2.0; // 最小缩放等级 [ObservableProperty] private double _reviveStatueOfTheSevenPointX = 2296.4; // 七天神像点位X坐标 [ObservableProperty] private double _reviveStatueOfTheSevenPointY = -824.4; // 七天神像点位Y坐标 [ObservableProperty] private string _reviveStatueOfTheSevenArea = "道成林"; // 七天神像所在区域 [ObservableProperty] private string _reviveStatueOfTheSevenCountry = "须弥"; // 七天神像所在国家 [ObservableProperty] [property: JsonIgnore] private bool _isReviveInNearestStatueOfTheSeven = false; // 是否就近回复 [ObservableProperty] private GiTpPosition? _reviveStatueOfTheSeven; [ObservableProperty] [property: JsonIgnore] private bool _shouldMove = false; // 回血前是否需要移动 [ObservableProperty] [NotifyDataErrorInfo] [Range(1.0, 30.0, ErrorMessage = "恰当的回血等待时间:1.0-30.0")] private double _hpRestoreDuration = 5.0; // 回血等待时间 partial void OnHpRestoreDurationChanged(double value) { if (value is < 1.0 or > 30.0) { HpRestoreDuration = 5.0; } } // 地图缩放程度的按钮 间隔 35 和截图有关的,按钮高2 /// /// 缩放比例按钮的最上 y 坐标(地图最大化时、且坐标是按钮中心) /// [ObservableProperty] [property: JsonIgnore] private int _zoomStartY = 468; // y-coordinate for zoom start /// /// 缩放比例按钮的最下 y 坐标(地图最小化时、且坐标是按钮中心) /// [ObservableProperty] [property: JsonIgnore] private int _zoomEndY = 612; // y-coordinate for zoom end /// /// 缩放比例按钮的 x 坐标 /// [ObservableProperty] [property: JsonIgnore] private int _zoomButtonX = 47; // x-coordinate for zoom button [ObservableProperty] [NotifyDataErrorInfo] [Range(50, 500)] private double _tolerance = 200; // 允许的移动误差 [ObservableProperty] [NotifyDataErrorInfo] [Range(10, 500)] private int _maxIterations = 30; // 移动最大次数 [ObservableProperty] [NotifyDataErrorInfo] [Range(100, 2000)] private int _maxMouseMove = 300; // 单次移动最大距离 partial void OnMaxMouseMoveChanged(int value) { if (value is < 100 or > 2000) { MaxMouseMove = 300; } } [ObservableProperty] private double _mapScaleFactor = 2.361; // 游戏坐标和 mapZoomLevel=1 时的像素比例因子。 [ObservableProperty] [property: JsonIgnore] private double _precisionThreshold = 0.05; }