diff --git a/src/MeoAssistant/InfrastControlTask.cpp b/src/MeoAssistant/InfrastControlTask.cpp index b05210eacf..3755ff3033 100644 --- a/src/MeoAssistant/InfrastControlTask.cpp +++ b/src/MeoAssistant/InfrastControlTask.cpp @@ -29,7 +29,6 @@ bool asst::InfrastControlTask::_run() return false; } click_clear_button(); - swipe_to_the_left_of_operlist(); if (!opers_detect_with_swipe()) { return false; @@ -40,6 +39,7 @@ bool asst::InfrastControlTask::_run() bool ret = opers_choose(); if (!ret) { m_all_available_opers.clear(); + swipe_to_the_left_of_operlist(); continue; } break; diff --git a/src/MeoAssistant/InfrastDormTask.cpp b/src/MeoAssistant/InfrastDormTask.cpp index 3c95e0cccc..b450f6ffa1 100644 --- a/src/MeoAssistant/InfrastDormTask.cpp +++ b/src/MeoAssistant/InfrastDormTask.cpp @@ -17,7 +17,6 @@ bool asst::InfrastDormTask::_run() }; m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg); - bool random_select = false; for (; m_cur_dorm_index < m_max_num_of_dorm; ++m_cur_dorm_index) { if (need_exit()) { return false; @@ -30,82 +29,76 @@ bool asst::InfrastDormTask::_run() return false; } click_clear_button(); - if (!random_select) { - swipe_to_the_left_of_operlist(); - } - else { - swipe_of_operlist(); - } - int num_of_selected = 0; - while (num_of_selected < MaxNumOfOpers) { + opers_choose(); + + click_confirm_button(); + click_return_button(); + + if (m_all_finished) { + break; + } + } + return true; +} + +bool asst::InfrastDormTask::opers_choose() +{ + int num_of_selected = 0; + while (num_of_selected < MaxNumOfOpers) { + if (need_exit()) { + return false; + } + const auto image = Ctrler.get_image(); + InfrastOperImageAnalyzer oper_analyzer(image); + const int without_skill = InfrastOperImageAnalyzer::All ^ InfrastOperImageAnalyzer::Skill; + oper_analyzer.set_to_be_calced(without_skill); + if (!oper_analyzer.analyze()) { + Log.error("mood analyze faild!"); + return false; + } + oper_analyzer.sort_by_mood(); + const auto& oper_result = oper_analyzer.get_result(); + + int num_of_resting = 0; + for (const auto& oper : oper_result) { if (need_exit()) { return false; } - const auto image = Ctrler.get_image(); - InfrastOperImageAnalyzer oper_analyzer(image); - const int without_skill = InfrastOperImageAnalyzer::All ^ InfrastOperImageAnalyzer::Skill; - oper_analyzer.set_to_be_calced(without_skill); - if (!oper_analyzer.analyze()) { - Log.error("mood analyze faild!"); - return false; - } - oper_analyzer.sort_by_mood(); - const auto& oper_result = oper_analyzer.get_result(); - - int num_of_resting = 0; - for (const auto& oper : oper_result) { - if (need_exit()) { - return false; - } - if (num_of_selected >= MaxNumOfOpers) { - Log.trace("num_of_selected:", num_of_selected, ", just break"); - break; - } - if (!random_select) { - switch (oper.smiley.type) { - case infrast::SmileyType::Rest: - // 如果当前页面休息完成的人数超过5个,说明已经已经把所有心情不满的滑过一遍、没有更多的了 - // 从这时候开始,随机选人,尽量把宿舍填满(游戏机制,可以加信赖,还有些别的加成什么的) - if (++num_of_resting > MaxNumOfOpers) { - Log.trace("num_of_resting:", num_of_resting, ", enable random"); - random_select = true; - continue; - } - break; - case infrast::SmileyType::Work: - case infrast::SmileyType::Distract: - // 干员没有被选择的情况下,且不在工作,就进驻宿舍 - if (oper.selected == false && oper.doing != infrast::Doing::Working) { - Ctrler.click(oper.rect); - if (++num_of_selected >= MaxNumOfOpers) { - Log.trace("num_of_selected:", num_of_selected, ", just break"); - break; - } - } - break; - default: - break; - } - } - else { - if (oper.selected == false && oper.doing != infrast::Doing::Working) { - Ctrler.click(oper.rect); - if (++num_of_selected >= MaxNumOfOpers) { - Log.trace("num_of_selected:", num_of_selected, ", just break"); - break; - } - } - } - } if (num_of_selected >= MaxNumOfOpers) { Log.trace("num_of_selected:", num_of_selected, ", just break"); break; } - swipe_of_operlist(); + switch (oper.smiley.type) { + case infrast::SmileyType::Rest: + // 如果当前页面休息完成的人数超过5个,说明已经已经把所有心情不满的滑过一遍、没有更多的了 + if (++num_of_resting > MaxNumOfOpers) { + Log.trace("num_of_resting:", num_of_resting, ", dorm finished"); + m_all_finished = true; + return true; + } + break; + case infrast::SmileyType::Work: + case infrast::SmileyType::Distract: + // 干员没有被选择的情况下,且不在工作,就进驻宿舍 + if (oper.selected == false && oper.doing != infrast::Doing::Working) { + Ctrler.click(oper.rect); + if (++num_of_selected >= MaxNumOfOpers) { + Log.trace("num_of_selected:", num_of_selected, ", just break"); + break; + } + } + break; + default: + break; + } + } - click_confirm_button(); - click_return_button(); + if (num_of_selected >= MaxNumOfOpers) { + Log.trace("num_of_selected:", num_of_selected, ", just break"); + break; + } + swipe_of_operlist(); } return true; } diff --git a/src/MeoAssistant/InfrastDormTask.h b/src/MeoAssistant/InfrastDormTask.h index f2847470ea..7883e6e86b 100644 --- a/src/MeoAssistant/InfrastDormTask.h +++ b/src/MeoAssistant/InfrastDormTask.h @@ -13,10 +13,12 @@ namespace asst const static int MaxNumOfOpers = 5; private: - virtual bool _run() override; + virtual bool _run() override; + bool opers_choose(); //virtual bool click_confirm_button() override; int m_cur_dorm_index = 0; - int m_max_num_of_dorm = 4; + int m_max_num_of_dorm = 4; + int m_all_finished = false; }; } diff --git a/src/MeoAssistant/InfrastOfficeTask.cpp b/src/MeoAssistant/InfrastOfficeTask.cpp index ea4dde3a10..066f4afd8c 100644 --- a/src/MeoAssistant/InfrastOfficeTask.cpp +++ b/src/MeoAssistant/InfrastOfficeTask.cpp @@ -26,7 +26,6 @@ bool asst::InfrastOfficeTask::_run() if (need_exit()) { return false; } - swipe_to_the_left_of_operlist(); if (!opers_detect_with_swipe()) { return false; } @@ -64,6 +63,7 @@ bool asst::InfrastOfficeTask::_run() bool ret = opers_choose(); if (!ret) { m_all_available_opers.clear(); + swipe_to_the_left_of_operlist(); continue; } } diff --git a/src/MeoAssistant/InfrastPowerTask.cpp b/src/MeoAssistant/InfrastPowerTask.cpp index 6196ee48d6..4c83ff6db0 100644 --- a/src/MeoAssistant/InfrastPowerTask.cpp +++ b/src/MeoAssistant/InfrastPowerTask.cpp @@ -33,7 +33,6 @@ bool asst::InfrastPowerTask::_run() } for (int i = 0; i <= OperSelectRetryTimes; ++i) { - swipe_to_the_left_of_operlist(); if (m_all_available_opers.empty()) { if (!opers_detect_with_swipe()) { @@ -76,6 +75,7 @@ bool asst::InfrastPowerTask::_run() bool ret = opers_choose(); if (!ret) { m_all_available_opers.clear(); + swipe_to_the_left_of_operlist(); continue; } } diff --git a/src/MeoAssistant/InfrastProductionTask.cpp b/src/MeoAssistant/InfrastProductionTask.cpp index 2a87f9d0fa..63c0be9d36 100644 --- a/src/MeoAssistant/InfrastProductionTask.cpp +++ b/src/MeoAssistant/InfrastProductionTask.cpp @@ -115,7 +115,6 @@ bool asst::InfrastProductionTask::shift_facility_list() return false; } click_clear_button(); - swipe_to_the_left_of_operlist(2); if (m_all_available_opers.empty()) { if (!opers_detect_with_swipe()) { @@ -130,6 +129,7 @@ bool asst::InfrastProductionTask::shift_facility_list() bool ret = opers_choose(); if (!ret) { m_all_available_opers.clear(); + swipe_to_the_left_of_operlist(2); continue; } break; diff --git a/src/MeoAssistant/InfrastReceptionTask.cpp b/src/MeoAssistant/InfrastReceptionTask.cpp index ac0b8b5141..879e14f06d 100644 --- a/src/MeoAssistant/InfrastReceptionTask.cpp +++ b/src/MeoAssistant/InfrastReceptionTask.cpp @@ -184,7 +184,6 @@ bool asst::InfrastReceptionTask::shift() return false; } click_clear_button(); - swipe_to_the_left_of_operlist(); if (!opers_detect_with_swipe()) { return false; @@ -195,6 +194,7 @@ bool asst::InfrastReceptionTask::shift() bool ret = opers_choose(); if (!ret) { m_all_available_opers.clear(); + swipe_to_the_left_of_operlist(); continue; } break;