using System.Collections.Generic; using BetterGenshinImpact.GameTask.AutoFight.Model; using BetterGenshinImpact.Model; using Microsoft.Extensions.Logging; using System.Threading; using System.Threading.Tasks; using BetterGenshinImpact.GameTask.AutoPathing.Suspend; using BetterGenshinImpact.GameTask.Common.Job; using OpenCvSharp; using Wpf.Ui.Controls; using static BetterGenshinImpact.GameTask.Common.TaskControl; namespace BetterGenshinImpact.GameTask; /// /// 使用 TaskRunner 运行任务时的上下文 /// public class RunnerContext : Singleton { /// /// 是否是连续执行配置组的场景 /// public bool IsContinuousRunGroup { get; set; } /// /// 暂停逻辑 /// public bool IsSuspend { get; set; } /// /// 暂停实现 /// public Dictionary SuspendableDictionary = new(); /// /// 当前使用队伍名称 /// 游戏内定义的队伍名称 /// public string? PartyName { get; set; } /// /// 当前队伍角色信息 /// private CombatScenes? _combatScenes; public async Task GetCombatScenes(CancellationToken ct) { if (_combatScenes == null) { // 返回主界面再识别 var returnMainUiTask = new ReturnMainUiTask(); await returnMainUiTask.Start(ct); await Delay(200, ct); _combatScenes = new CombatScenes().InitializeTeam(CaptureToRectArea()); if (!_combatScenes.CheckTeamInitialized()) { Logger.LogError("队伍角色识别失败"); _combatScenes = null; } } return _combatScenes; } public void ClearCombatScenes() { _combatScenes = null; } /// /// 任务结束后的清理 /// public void Clear() { // 连续执行配置组的情况下,不清理当前队伍 if (!IsContinuousRunGroup) { PartyName = null; } _combatScenes = null; IsSuspend = false; SuspendableDictionary.Clear(); } /// /// 彻底恢复到初始状态 /// public void Reset() { IsContinuousRunGroup = false; PartyName = null; _combatScenes = null; IsSuspend = false; SuspendableDictionary.Clear(); } }