From 627fa36b69f9c0bc04caf722441cf89cee2b2a52 Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Tue, 29 Oct 2024 16:06:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=B8=BB=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=BF=9B=E5=BA=A6=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaWpfGui/Main/AsstProxy.cs | 45 ++++++++++--------- .../ViewModels/UI/TaskQueueViewModel.cs | 33 ++++++++++++++ 2 files changed, 57 insertions(+), 21 deletions(-) diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 02f4cd0763..c85603a79c 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -735,6 +735,16 @@ namespace MaaWpfGui.Main break; case AsstMsg.TaskChainCompleted: + // 判断 _latestTaskId 中是否有元素的值和 details["taskid"] 相等,如果有再判断这个 id 对应的任务是否在 _mainTaskTypes 中 + if (_latestTaskId.Any(i => i.Value == details["taskid"]?.ToObject())) + { + var taskType = _latestTaskId.First(i => i.Value == details["taskid"]?.ToObject()).Key; + if (_mainTaskTypes.Contains(taskType)) + { + Instances.TaskQueueViewModel.UpdateMainTasksProgress(); + } + } + switch (taskChain) { case "Fight": @@ -800,27 +810,7 @@ namespace MaaWpfGui.Main var taskList = details["finished_tasks"]?.ToObject(); if (taskList?.Length > 0) { - var mainTaskTypes = new HashSet - { - TaskType.StartUp, - TaskType.Fight, - TaskType.FightRemainingSanity, - TaskType.Recruit, - TaskType.Infrast, - TaskType.Mall, - TaskType.Award, - TaskType.Roguelike, - TaskType.Reclamation, - }; - - // 仅有一个任务且为 CloseDown 时,不执行任务链结束后操作 - /* - if (taskList.Length == 1) - { - mainTaskTypes.Remove(TaskType.CloseDown); - } - */ - var latestMainTaskIds = _latestTaskId.Where(i => mainTaskTypes.Contains(i.Key)).Select(i => i.Value); + var latestMainTaskIds = _latestTaskId.Where(i => _mainTaskTypes.Contains(i.Key)).Select(i => i.Value); isMainTaskQueueAllCompleted = taskList.Any(i => latestMainTaskIds.Contains(i)); } @@ -1981,6 +1971,19 @@ namespace MaaWpfGui.Main Custom, } + private readonly HashSet _mainTaskTypes = + [ + TaskType.StartUp, + TaskType.Fight, + TaskType.FightRemainingSanity, + TaskType.Recruit, + TaskType.Infrast, + TaskType.Mall, + TaskType.Award, + TaskType.Roguelike, + TaskType.Reclamation + ]; + private readonly Dictionary _latestTaskId = []; private static JObject SerializeFightTaskParams( diff --git a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs index a06412d064..7cadadb231 100644 --- a/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs @@ -1111,6 +1111,36 @@ namespace MaaWpfGui.ViewModels.UI return false; } + public int MainTasksCompletedCount { get; set; } + + public int MainTasksSelectedCount => TaskItemViewModels.Count(x => x.IsChecked); + + /// + /// updates the main tasks progress. + /// + /// 已完成任务数,留空则代表 +1 + public void UpdateMainTasksProgress(int? completedCount = null) + { + var rvm = (RootViewModel)this.Parent; + if (MainTasksSelectedCount == 0) + { + rvm.Progress = 0; + return; + } + + MainTasksCompletedCount = completedCount ?? ++MainTasksCompletedCount; + + if (MainTasksCompletedCount >= MainTasksSelectedCount) + { + rvm.Progress = 0; + } + else + { + var progress = MainTasksCompletedCount / (double)MainTasksSelectedCount; + rvm.Progress = progress; + } + } + /// /// Starts. /// @@ -1122,6 +1152,8 @@ namespace MaaWpfGui.ViewModels.UI return; } + MainTasksCompletedCount = 0; + _runningState.SetIdle(false); // 虽然更改时已经保存过了,不过保险起见在点击开始之后再次保存任务和基建列表 @@ -2317,6 +2349,7 @@ namespace MaaWpfGui.ViewModels.UI FightTaskRunning = false; InfrastTaskRunning = false; + UpdateMainTasksProgress(0); } }