refactor: clean up code

This commit is contained in:
Horror Proton
2022-07-25 18:41:32 +08:00
parent 30e1ba0f44
commit 6fbe265d3d
3 changed files with 4 additions and 126 deletions

View File

@@ -5,7 +5,6 @@
#include "Controller.h"
#include "ProcessTask.h"
#include "RecruitImageAnalyzer.h"
#include "RecruitCalcTask.h"
#include "Logger.hpp"
namespace asst::recruit_calc
@@ -250,109 +249,6 @@ bool asst::AutoRecruitTask::recruit_one()
return true;
}
bool asst::AutoRecruitTask::calc_and_recruit()
{
LogTraceFunction;
int refresh_count = 0; // 点击刷新按钮的次数
int cur_retry_times = 0; // 重新识别的次数,参考下面的两个 continue
const int refresh_limit = 3; // 点击刷新按钮的次数上限
int maybe_level;
bool has_robot_tag;
while (cur_retry_times < m_retry_times) {
RecruitCalcTask recruit_task(m_callback, m_callback_arg, m_task_chain);
recruit_task.set_param(m_select_level, true, m_skip_robot)
.set_retry_times(m_retry_times)
.set_exit_flag(m_exit_flag)
.set_ctrler(m_ctrler)
.set_status(m_status)
.set_task_id(m_task_id);
// 识别错误,放弃这个公招位,直接返回
if (!recruit_task.run()) {
json::value info = basic_info();
info["what"] = "RecruitError";
info["why"] = "识别错误";
callback(AsstMsg::SubTaskError, info);
click_return_button();
return true;
}
has_robot_tag = recruit_task.get_has_robot_tag();
maybe_level = recruit_task.get_maybe_level();
if (need_exit()) {
return false;
}
// 尝试刷新
if (m_need_refresh && maybe_level == 3
&& !recruit_task.get_has_special_tag()
&& recruit_task.get_has_refresh()
&& !(m_skip_robot && has_robot_tag)) {
if (refresh()) {
if (++refresh_count > refresh_limit) {
// 按理来说不会到这里,因为超过三次刷新的时候上面的 recruit_task.get_has_refresh() 应该是 false
// 报个错,返回
json::value info = basic_info();
info["what"] = "RecruitError";
info["why"] = "刷新次数达到上限";
info["details"] = json::object{
{ "refresh_limit", refresh_limit }
};
callback(AsstMsg::SubTaskError, info);
click_return_button();
return true;
}
else {
json::value info = basic_info();
info["what"] = "RecruitTagsRefreshed";
info["details"] = json::object{
{ "count", refresh_count },
{ "refresh_limit", refresh_limit }
};
callback(AsstMsg::SubTaskExtraInfo, info);
Log.trace("recruit tags refreshed for the " + std::to_string(refresh_count) + "-th time, rerunning recruit task");
continue;
}
}
}
// 如果时间没调整过,那 tag 十有八九也没选,重新试一次
// 造成时间没调的原因可见: https://github.com/MaaAssistantArknights/MaaAssistantArknights/pull/300#issuecomment-1073287984
// 这里如果时间没调整过,但是 tag 点上了,再来一次是不是会又把 tag 点掉?
if (!check_time_reduced()) {
++cur_retry_times;
Log.warn("unreduced recruit check time detected, rerunning recruit task");
continue;
}
if (need_exit()) {
return false;
}
if (!(m_skip_robot && has_robot_tag) && std::find(m_confirm_level.cbegin(), m_confirm_level.cend(), maybe_level) != m_confirm_level.cend()) {
if (!confirm()) {
return false;
}
}
else {
click_return_button();
}
return true;
}
// 重试次数达到上限时报错并返回
json::value info = basic_info();
info["what"] = "RecruitError";
info["why"] = "重试次数达到上限";
info["details"] = json::object{
{ "m_retry_times", m_retry_times }
};
callback(AsstMsg::SubTaskError, info);
click_return_button();
return false;
}
bool asst::AutoRecruitTask::recruit_calc_task(bool& out_force_skip, int& out_selected)
{
LogTraceFunction;
@@ -597,6 +493,7 @@ bool asst::AutoRecruitTask::recruit_now()
bool asst::AutoRecruitTask::confirm()
{
// TODO: use RecruitImageAnalyzer::m_confirm_rect or remove it
// TODO: https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/902
ProcessTask confirm_task(*this, { "RecruitConfirm" });
return confirm_task.set_retry_times(5).run();

View File

@@ -6,16 +6,9 @@
asst::RecruitTask::RecruitTask(const AsstCallback& callback, void* callback_arg)
: PackageTask(callback, callback_arg, TaskType),
m_recruit_begin_task_ptr(std::make_shared<ProcessTask>(callback, callback_arg, TaskType)),
m_auto_recruit_task_ptr(std::make_shared<AutoRecruitTask>(callback, callback_arg, TaskType)),
m_recruit_only_calc_task_ptr(std::make_shared<RecruitCalcTask>(callback, callback_arg, TaskType))
m_auto_recruit_task_ptr(std::make_shared<AutoRecruitTask>(callback, callback_arg, TaskType))
{
m_recruit_begin_task_ptr->set_tasks({ "RecruitBegin" });
m_recruit_only_calc_task_ptr->set_enable(false);
m_subtasks.emplace_back(m_recruit_begin_task_ptr);
m_subtasks.emplace_back(m_auto_recruit_task_ptr)->set_retry_times(5);
m_subtasks.emplace_back(m_recruit_only_calc_task_ptr);
}
bool asst::RecruitTask::set_params(const json::value& params)
@@ -49,26 +42,16 @@ bool asst::RecruitTask::set_params(const json::value& params)
[[maybe_unused]] int expedite_times = params.get("expedite_times", 0);
bool skip_robot = params.get("skip_robot", true);
if (false) { // 仅识别的情况
m_recruit_begin_task_ptr->set_enable(false);
m_recruit_only_calc_task_ptr->set_enable(true);
m_auto_recruit_task_ptr->set_enable(false);
m_recruit_only_calc_task_ptr->set_param(std::move(select), set_time);
}
else {
m_recruit_begin_task_ptr->set_enable(false);
m_recruit_only_calc_task_ptr->set_enable(false);
m_auto_recruit_task_ptr->set_enable(true);
m_auto_recruit_task_ptr->set_enable(true);
m_auto_recruit_task_ptr->set_max_times(times)
m_auto_recruit_task_ptr->set_max_times(times)
.set_need_refresh(refresh)
.set_use_expedited(expedite)
.set_select_level(std::move(select))
.set_confirm_level(std::move(confirm))
.set_skip_robot(skip_robot)
.set_set_time(set_time).set_retry_times(0);
}
return true;
}

View File

@@ -18,8 +18,6 @@ namespace asst
static constexpr const char* TaskType = "Recruit";
private:
std::shared_ptr<ProcessTask> m_recruit_begin_task_ptr = nullptr;
std::shared_ptr<AutoRecruitTask> m_auto_recruit_task_ptr = nullptr;
std::shared_ptr<RecruitCalcTask> m_recruit_only_calc_task_ptr = nullptr;
};
}