feat: 添加主任务进度条

This commit is contained in:
uye
2024-10-29 16:06:38 +08:00
parent 82e2c2ad6d
commit 627fa36b69
2 changed files with 57 additions and 21 deletions

View File

@@ -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<AsstTaskId>()))
{
var taskType = _latestTaskId.First(i => i.Value == details["taskid"]?.ToObject<AsstTaskId>()).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<AsstTaskId[]>();
if (taskList?.Length > 0)
{
var mainTaskTypes = new HashSet<TaskType>
{
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<TaskType> _mainTaskTypes =
[
TaskType.StartUp,
TaskType.Fight,
TaskType.FightRemainingSanity,
TaskType.Recruit,
TaskType.Infrast,
TaskType.Mall,
TaskType.Award,
TaskType.Roguelike,
TaskType.Reclamation
];
private readonly Dictionary<TaskType, AsstTaskId> _latestTaskId = [];
private static JObject SerializeFightTaskParams(

View File

@@ -1111,6 +1111,36 @@ namespace MaaWpfGui.ViewModels.UI
return false;
}
public int MainTasksCompletedCount { get; set; }
public int MainTasksSelectedCount => TaskItemViewModels.Count(x => x.IsChecked);
/// <summary>
/// updates the main tasks progress.
/// </summary>
/// <param name="completedCount">已完成任务数,留空则代表 +1</param>
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;
}
}
/// <summary>
/// Starts.
/// </summary>
@@ -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);
}
}