From 206a7042e2688cebd08e0ccb4e40cc1ca30551ba Mon Sep 17 00:00:00 2001 From: Lancarus Date: Sat, 7 Oct 2023 02:14:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A0=B9=E6=8D=AEreview=E5=B0=86`check?= =?UTF-8?q?=5Fskip=5Fplot=5Fbutton`=E7=A7=BB=E5=8A=A8=E5=88=B0BattleProces?= =?UTF-8?q?s=E9=87=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/BattleHelper.cpp | 1 - .../Task/Miscellaneous/BattleProcessTask.cpp | 27 ++++++++++++++++++- .../Task/Miscellaneous/BattleProcessTask.h | 3 +++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index 21c549c9e1..632aeb0c7e 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -408,7 +408,6 @@ bool asst::BattleHelper::check_skip_plot_button(const cv::Mat& reusable) bool asst::BattleHelper::check_in_battle(const cv::Mat& reusable, bool weak) { cv::Mat image = reusable.empty() ? m_inst_helper.ctrler()->get_image() : reusable; - check_skip_plot_button(image); if (weak) { BattlefieldMatcher analyzer(image); m_in_battle = analyzer.analyze().has_value(); diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp index 9eb544abfa..cb43eddd17 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp @@ -336,7 +336,10 @@ bool asst::BattleProcessTask::wait_condition(const Action& action) const std::string& name = get_name_from_group(action.name); update_image_if_empty(); while (!need_exit()) { - if (!update_deployment(false, image)) { + if (check_skip_plot_button(image)) { + speed_up(); + } + else if (!update_deployment(false, image)) { return false; } if (auto iter = m_cur_deployment_opers.find(name); @@ -375,3 +378,25 @@ void asst::BattleProcessTask::sleep_and_do_strategy(unsigned millisecond) std::this_thread::yield(); } } + +bool asst::BattleProcessTask::check_in_battle(const cv::Mat& reusable, bool weak) +{ + LogTraceFunction; + + cv::Mat image = reusable; + return check_skip_plot_button(image) ? speed_up() && false : BattleHelper::check_in_battle(image, weak); +} + +bool asst::BattleProcessTask::wait_until_end(bool weak) +{ + LogTraceFunction; + + cv::Mat image = ctrler()->get_image(); + while (!need_exit() && check_in_battle(image, weak)) { + do_strategic_action(image); + std::this_thread::yield(); + + image = ctrler()->get_image(); + } + return true; +} diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h index 5a69ce9d9a..13b575ba15 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h @@ -39,6 +39,9 @@ namespace asst bool enter_bullet_time(const std::string& name, const Point& location); void sleep_and_do_strategy(unsigned millisecond); + bool check_in_battle(const cv::Mat& reusable = cv::Mat(), bool weak = true); + bool wait_until_end(bool weak = true); + battle::copilot::CombatData m_combat_data; std::unordered_map m_oper_in_group;