mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-15 17:30:27 +08:00
feat: 添加主任务进度条
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user