From 2053c5bf6ec88319626c401d24deefecdcc67ee3 Mon Sep 17 00:00:00 2001 From: youqii Date: Fri, 13 Oct 2023 17:20:16 +0800 Subject: [PATCH] =?UTF-8?q?pref:=20=E5=B0=86=E4=BB=A3=E7=A0=81=E6=AE=B5?= =?UTF-8?q?=E6=8B=86=E8=BF=9B=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Task/Miscellaneous/AutoRecruitTask.cpp | 36 +++++++++++-------- .../Task/Miscellaneous/AutoRecruitTask.h | 1 + 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp b/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp index eb7c6309a7..ea2f196079 100644 --- a/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.cpp @@ -574,20 +574,7 @@ asst::AutoRecruitTask::calc_task_result_type asst::AutoRecruitTask::recruit_calc return result; } - std::unordered_set final_select; - while (final_select.size() < 3) { - bool flag = false; - for (const asst::RecruitCombs& comb : result_vec) { - for (const std::string& tag : comb.tags) { - final_select.insert(tag); - if (final_select.size() == 3) { - flag = true; - break; - } - } - if (flag) break; - } - } + auto final_select = get_select_tags(result_vec); // select tags for (const std::string& final_tag_name : final_select) { @@ -600,7 +587,7 @@ asst::AutoRecruitTask::calc_task_result_type asst::AutoRecruitTask::recruit_calc { json::value cb_info = basic_info(); cb_info["what"] = "RecruitTagsSelected"; - cb_info["details"] = json::object { { "tags", json::array(get_tag_names(final_combination.tags)) } }; + cb_info["details"] = json::object { { "tags", json::array(get_tag_names(final_select)) } }; callback(AsstMsg::SubTaskExtraInfo, cb_info); } @@ -716,6 +703,25 @@ std::vector asst::AutoRecruitTask::get_tag_names(const std::vector< return names; } +std::vector asst::AutoRecruitTask::get_select_tags(const std::vector& conbinations) +{ + LogTraceFunction; + std::unordered_set unique_tags; + std::vector select; + + while (select.size() < 3) { + for (const asst::RecruitCombs& comb : conbinations) + for (const std::string& tag : comb.tags) { + if (unique_tags.find(tag) == unique_tags.cend()) { + unique_tags.insert(tag); + select.emplace_back(tag); + if (select.size() == 3) return select; + } + } + } + return select; +} + template void asst::AutoRecruitTask::upload_result(const Rng& tag_ids, const json::value& yituliu_details) { diff --git a/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.h b/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.h index bf20261dd3..7f13d19d55 100644 --- a/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.h +++ b/src/MaaCore/Task/Miscellaneous/AutoRecruitTask.h @@ -48,6 +48,7 @@ namespace asst bool hire_all(); bool initialize_dirty_slot_info(const cv::Mat&); std::vector get_tag_names(const std::vector& ids) const; + std::vector get_select_tags(const std::vector& combinations); static std::vector start_recruit_analyze(const cv::Mat& image); template