using BetterGenshinImpact.GameTask;
using BetterGenshinImpact.GameTask.AutoCook;
using BetterGenshinImpact.GameTask.AutoDomain;
using BetterGenshinImpact.GameTask.AutoFight;
using BetterGenshinImpact.GameTask.AutoFishing;
using BetterGenshinImpact.GameTask.AutoGeniusInvokation;
using BetterGenshinImpact.GameTask.AutoPick;
using BetterGenshinImpact.GameTask.AutoSkip;
using BetterGenshinImpact.GameTask.AutoWood;
using BetterGenshinImpact.GameTask.QuickTeleport;
using BetterGenshinImpact.Service.Notification;
using CommunityToolkit.Mvvm.ComponentModel;
using Fischless.GameCapture;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace BetterGenshinImpact.Core.Config;
///
/// 更好的原神配置
///
[Serializable]
public partial class AllConfig : ObservableObject
{
///
/// 窗口捕获的方式
///
[ObservableProperty]
private string _captureMode = CaptureModes.BitBlt.ToString();
///
/// 详细的错误日志
///
[ObservableProperty]
private bool _detailedErrorLogs;
///
/// 不展示新版本提示的最新版本
///
[ObservableProperty]
private string _notShowNewVersionNoticeEndVersion = "";
///
/// 触发器触发频率(ms)
///
[ObservableProperty]
private int _triggerInterval = 50;
///
/// WGC使用位图缓存
/// 高帧率情况下,可能会导致卡顿
/// 云原神可能会出现黑屏
///
[ObservableProperty]
private bool _wgcUseBitmapCache = true;
///
/// 自动修复Win11下BitBlt截图方式不可用的问题
///
[ObservableProperty]
private bool _autoFixWin11BitBlt = true;
///
/// 推理使用的设备
///
[ObservableProperty]
private string _inferenceDevice = "CPU";
[ObservableProperty]
private List> _nextScheduledTask = [];
///
/// 一条龙选中使用的配置
///
[ObservableProperty]
private string _selectedOneDragonFlowConfigName = string.Empty;
///
/// 遮罩窗口配置
///
public MaskWindowConfig MaskWindowConfig { get; set; } = new();
///
/// 通用配置
///
public CommonConfig CommonConfig { get; set; } = new();
///
/// 原神启动配置
///
public GenshinStartConfig GenshinStartConfig { get; set; } = new();
///
/// 自动拾取配置
///
public AutoPickConfig AutoPickConfig { get; set; } = new();
///
/// 自动剧情配置
///
public AutoSkipConfig AutoSkipConfig { get; set; } = new();
///
/// 自动钓鱼配置
///
public AutoFishingConfig AutoFishingConfig { get; set; } = new();
///
/// 快速传送配置
///
public QuickTeleportConfig QuickTeleportConfig { get; set; } = new();
///
/// 自动烹饪配置
///
public AutoCookConfig AutoCookConfig { get; set; } = new();
///
/// 自动打牌配置
///
public AutoGeniusInvokationConfig AutoGeniusInvokationConfig { get; set; } = new();
///
/// 自动伐木配置
///
public AutoWoodConfig AutoWoodConfig { get; set; } = new();
///
/// 自动战斗配置
///
public AutoFightConfig AutoFightConfig { get; set; } = new();
///
/// 自动秘境配置
///
public AutoDomainConfig AutoDomainConfig { get; set; } = new();
///
/// 宏配置
///
public MacroConfig MacroConfig { get; set; } = new();
public RecordConfig RecordConfig { get; set; } = new();
///
/// 脚本配置
///
public ScriptConfig ScriptConfig { get; set; } = new();
///
/// 路径追踪配置
///
public PathingConditionConfig PathingConditionConfig { get; set; } = PathingConditionConfig.Default;
///
/// 快捷键配置
///
public HotKeyConfig HotKeyConfig { get; set; } = new();
///
/// 通知配置
///
public NotificationConfig NotificationConfig { get; set; } = new();
[JsonIgnore]
public Action? OnAnyChangedAction { get; set; }
public void InitEvent()
{
PropertyChanged += OnAnyPropertyChanged;
MaskWindowConfig.PropertyChanged += OnAnyPropertyChanged;
CommonConfig.PropertyChanged += OnAnyPropertyChanged;
GenshinStartConfig.PropertyChanged += OnAnyPropertyChanged;
NotificationConfig.PropertyChanged += OnAnyPropertyChanged;
NotificationConfig.PropertyChanged += OnNotificationPropertyChanged;
AutoPickConfig.PropertyChanged += OnAnyPropertyChanged;
AutoSkipConfig.PropertyChanged += OnAnyPropertyChanged;
AutoFishingConfig.PropertyChanged += OnAnyPropertyChanged;
QuickTeleportConfig.PropertyChanged += OnAnyPropertyChanged;
AutoCookConfig.PropertyChanged += OnAnyPropertyChanged;
MacroConfig.PropertyChanged += OnAnyPropertyChanged;
HotKeyConfig.PropertyChanged += OnAnyPropertyChanged;
AutoWoodConfig.PropertyChanged += OnAnyPropertyChanged;
AutoFightConfig.PropertyChanged += OnAnyPropertyChanged;
AutoDomainConfig.PropertyChanged += OnAnyPropertyChanged;
ScriptConfig.PropertyChanged += OnAnyPropertyChanged;
PathingConditionConfig.PropertyChanged += OnAnyPropertyChanged;
}
public void OnAnyPropertyChanged(object? sender, EventArgs args)
{
GameTaskManager.RefreshTriggerConfigs();
OnAnyChangedAction?.Invoke();
}
public void OnNotificationPropertyChanged(object? sender, PropertyChangedEventArgs args)
{
NotificationService.Instance().RefreshNotifiers();
}
}