From a2e4ee6d76112963baece0380e587bf5fff537f2 Mon Sep 17 00:00:00 2001 From: MistEO Date: Sun, 5 Jun 2022 03:06:27 +0800 Subject: [PATCH] =?UTF-8?q?perf.=E4=BC=98=E5=8C=96=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=88=98=E6=96=97=E4=BB=8E=E5=85=A5=E5=9C=BA=E5=88=B0=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=E8=AF=86=E5=88=AB=E5=B9=B2=E5=91=98=E4=B9=8B=E9=97=B4?= =?UTF-8?q?=E7=9A=84=E5=BB=B6=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 15 +++++-- resource/template/BattleOfficiallyBegin.png | Bin 0 -> 1685 bytes src/MeoAssistant/BattleProcessTask.cpp | 47 ++++++++++++++------ 3 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 resource/template/BattleOfficiallyBegin.png diff --git a/resource/tasks.json b/resource/tasks.json index 48adaef05d..d5bb44312d 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -4540,9 +4540,18 @@ 30 ] }, - "BattleWaitingToLoad": { - "algorithm": "JustReturn", - "rearDelay": 3000 + "BattleOfficiallyBegin": { + "action": "DoNothing", + "roi": [ + 1165, + 20, + 65, + 65 + ], + "maskRange": [ + 100, + 255 + ] }, "BattleSpeedUp": { "algorithm": "JustReturn", diff --git a/resource/template/BattleOfficiallyBegin.png b/resource/template/BattleOfficiallyBegin.png new file mode 100644 index 0000000000000000000000000000000000000000..7e60d424365118edb45177f1a088855af95dbd1b GIT binary patch literal 1685 zcmV;G25R|+|4Xp6#=;+x}>`WHE)|Aq>~gAT*^qQ2n+)4>^V zXn__;S}bX$K!GGJtxd9feAw(~?xweAl5F;Vob$V9&pjV^sWkl|BS79QfzbW<+QOsc zZ3uCd5l3A8M4_vn1a&*e9YB$jWDKN26@beC9%=#sx_eJ{D*+Hf>)y*56OoJ0>~z3= z@D3OQHWy|vTY)}L;}p0zO%u#4UzD#=?_vf4_~Oei@zvMgAbTW>R;wKW2hcPPM1{p~UmTg^%&;jTmZbs$t zW6a;Wr6dFZrcRthE|&u{+h56;dcBT~^>t;QlarH3rcymxmN^6AZ+rT56_1vel?7$9 zS&ZikFijIyNK+2AS}iM9l&7nFHkymZOs&@W^JY#u~t?eAmh;X`FX>2w;&R0=}Vr2Q6Ku$Xc8&K+f*V;_tm zlg)ytzv+l@gT;*HrH8HuIS_m%gWSjn01EK&o~X^ITB)Gjj*cCEipLWum&*qRYT=0S z4_v8M(Q38O>2wYhWEciMxp*-EnteA!cKldbsiN6zDuD-pe4)_G&nLqM&%s6p@N8`j z)k*~e0|QEe&X&*FkJw@0m&o?dcC(4MZ{H~K6GC8i?gDh(&0cyEK}L7OxEZMIZU4} z_O(&dGI9U@q7rZbNG20fFJ`0kYaae5?QO8Vy}bj42q7SZIKV~;%zUUwn@pxKIW^f6 zHv+PmZ6EJ`yTa>@2AYkAvan*Q1j8`ksQ`g108}eg> z$>oq59)>@z1S&LUuw~)zyXwJee0&_E$BsdefXsNLnkOQVAk5FtD+@}*;}{zo16xsA zwU@C{twv^`VT#3KIC0_xG);phiQrQ3%nZx2H?4}t0f0m@iDKzYz~u&@lfAjCl?v*I zNc?7IXF){L1q%vQ;Pzv;ZER(=iuFSj5@*Zh$UbJ}q|MCEAf3s;E2)FT%-G%A#naVQWuEbP9EM@QVu|LXCOI4T{-Ro75kepq8^Xlo zq&wG7M1UZHcB_qr1@+?Oy^#?dKYmpJXhaUsFpH=l<^A8=+r#35y4??_(-_a^-DD|z z)=2;?)54>rWu?T=q3P2_x3F=TMQWbNTg2MhKgvR4u^3Jli!e>IZ-A@So*n9l&z`N>X5zC!XC8qdG!5^M zj$&wN$dxDK?Huav@9*RF))pF#y7%6oANcS;?nch2mjDh>f6D6~8~G=a?^s)s2>H*F z9G>Kp@0@JwA)b<>WIvGp6b2G`WY_)am({Z~hMnSuf^`CSZC>T=M-Y_S%Z~s&j#5c@ fP9JU@^t=B9xWADJ@Uxap00000NkvXXu0mjfxd$<0 literal 0 HcmV?d00001 diff --git a/src/MeoAssistant/BattleProcessTask.cpp b/src/MeoAssistant/BattleProcessTask.cpp index cbd4207bfc..1575f21838 100644 --- a/src/MeoAssistant/BattleProcessTask.cpp +++ b/src/MeoAssistant/BattleProcessTask.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "Controller.h" #include "Resource.h" @@ -53,6 +54,8 @@ bool asst::BattleProcessTask::_run() bool asst::BattleProcessTask::get_stage_info() { + LogTraceFunction; + const auto& tile = Resrc.tile(); m_normal_tile_info = tile.calc(m_stage_name, false); @@ -84,38 +87,52 @@ bool asst::BattleProcessTask::analyze_opers_preview() callback(AsstMsg::SubTaskExtraInfo, info); } + MatchImageAnalyzer officially_begin_analyzer; + officially_begin_analyzer.set_task_info("BattleOfficiallyBegin"); + cv::Mat image; + while (!need_exit()) { + image = m_ctrler->get_image(); + officially_begin_analyzer.set_image(image); + if (officially_begin_analyzer.analyze()) { + break; + } + std::this_thread::yield(); + } + BattleImageAnalyzer oper_analyzer; oper_analyzer.set_target(BattleImageAnalyzer::Target::Oper); - - while (true) { - oper_analyzer.set_image(m_ctrler->get_image()); + while (!need_exit()) { + image = m_ctrler->get_image(); + oper_analyzer.set_image(image); if (oper_analyzer.analyze()) { break; } std::this_thread::yield(); } - // 干员头像出来之后,还要过 2 秒左右才可以点击,这里要加个延时 - sleep(Task.get("BattleWaitingToLoad")->rear_delay); - while (true) { - oper_analyzer.set_image(m_ctrler->get_image()); - if (oper_analyzer.analyze()) { + // 暂停游戏准备识别干员 + // 在刚进入游戏的时候(画面刚刚完全亮起来的时候),点暂停是没反应的 + // 所以这里一直点,直到真的点上了为止 + while (!need_exit()) { + battle_pause(); + image = m_ctrler->get_image(); + officially_begin_analyzer.set_image(image); + if (!officially_begin_analyzer.analyze()) { break; } std::this_thread::yield(); } - { + + auto draw_future = std::async(std::launch::async, [&]() { //#ifdef ASST_DEBUG - auto draw = m_ctrler->get_image(); + auto draw = image.clone(); for (const auto& [loc, info] : m_normal_tile_info) { std::string text = "( " + std::to_string(loc.x) + ", " + std::to_string(loc.y) + " )"; cv::putText(draw, text, cv::Point(info.pos.x - 30, info.pos.y), 1, 1.2, cv::Scalar(0, 0, 255), 2); } cv::imwrite("map.png", draw); - //#endif - } - battle_pause(); + }); auto opers = oper_analyzer.get_opers(); @@ -126,7 +143,7 @@ bool asst::BattleProcessTask::analyze_opers_preview() sleep(Task.get("BattleUseOper")->pre_delay); - auto image = m_ctrler->get_image(); + image = m_ctrler->get_image(); OcrWithPreprocessImageAnalyzer name_analyzer(image); name_analyzer.set_task_info("BattleOperName"); @@ -166,6 +183,8 @@ bool asst::BattleProcessTask::analyze_opers_preview() oper_analyzer.set_image(image); oper_analyzer.analyze(); } + + draw_future.wait(); battle_pause(); cancel_selection();