diff --git a/resource/template/special/Listless.png b/resource/template/special/Listless.png index 86f4e26d07..014335c901 100644 Binary files a/resource/template/special/Listless.png and b/resource/template/special/Listless.png differ diff --git a/src/MeoAssistance/Assistance.cpp b/src/MeoAssistance/Assistance.cpp index e898567eee..c6a833e318 100644 --- a/src/MeoAssistance/Assistance.cpp +++ b/src/MeoAssistance/Assistance.cpp @@ -418,7 +418,7 @@ void Assistance::working_proc() if (!m_thread_idle && !m_tasks_deque.empty()) { - m_controller_ptr->set_idle(false); + //m_controller_ptr->set_idle(false); auto start_time = std::chrono::system_clock::now(); std::shared_ptr task_ptr = m_tasks_deque.front(); @@ -461,7 +461,7 @@ void Assistance::working_proc() else { m_thread_idle = true; - m_controller_ptr->set_idle(true); + //m_controller_ptr->set_idle(true); m_condvar.wait(lock); } } diff --git a/src/MeoAssistance/InfrastAbstractTask.cpp b/src/MeoAssistance/InfrastAbstractTask.cpp index 7fe0116294..ce88393e62 100644 --- a/src/MeoAssistance/InfrastAbstractTask.cpp +++ b/src/MeoAssistance/InfrastAbstractTask.cpp @@ -72,16 +72,15 @@ bool asst::InfrastAbstractTask::swipe(bool reverse) DebugTraceFunction; //#ifndef LOG_TRACE - bool ret = false; if (!reverse) { - ret = m_controller_ptr->swipe(m_swipe_begin, m_swipe_end, m_swipe_duration); + m_controller_ptr->swipe(m_swipe_begin, m_swipe_end, m_swipe_duration); ++m_swipe_times; } else { - ret = m_controller_ptr->swipe(m_swipe_end, m_swipe_begin, m_swipe_duration); + m_controller_ptr->swipe(m_swipe_end, m_swipe_begin, m_swipe_duration); --m_swipe_times; } - return ret && sleep(m_swipe_extra_delay); + return sleep(m_swipe_extra_delay); //#else // return sleep(SwipeExtraDelay); //#endif @@ -101,7 +100,9 @@ bool asst::InfrastAbstractTask::swipe_left() Configer::WindowWidthDefault * 0.1, Configer::WindowHeightDefault * 0.2); - return m_controller_ptr->swipe(left_rect, right_rect); + m_controller_ptr->swipe(left_rect, right_rect); + + return true; } bool asst::InfrastAbstractTask::swipe_right() @@ -118,7 +119,9 @@ bool asst::InfrastAbstractTask::swipe_right() Configer::WindowWidthDefault * 0.1, Configer::WindowHeightDefault * 0.2); - return m_controller_ptr->swipe(right_rect, left_rect); + m_controller_ptr->swipe(right_rect, left_rect); + + return true; } bool asst::InfrastAbstractTask::append_task_to_back_to_infrast_home() @@ -362,8 +365,8 @@ bool asst::InfrastAbstractTask::enter_station(const std::vector& te } }); - bool ret = m_controller_ptr->click(max_score_reslut.at(index).rect); - return ret && sleep(1000); + m_controller_ptr->click(max_score_reslut.at(index).rect); + return sleep(1000); } bool asst::InfrastAbstractTask::click_first_operator() diff --git a/src/MeoAssistance/InfrastDormTask.cpp b/src/MeoAssistance/InfrastDormTask.cpp index 0bdf883768..3fc629a61e 100644 --- a/src/MeoAssistance/InfrastDormTask.cpp +++ b/src/MeoAssistance/InfrastDormTask.cpp @@ -74,11 +74,10 @@ bool asst::InfrastDormTask::click_confirm_button() // 点完确定后,如果把工作中的干员撤下来了,会再弹出来一个确认的界面,如果没撤下来则不会弹出。先识别一下再决定要不要点击 auto&& [algorithm, score, second_confirm_rect] = m_identify_ptr->find_image(m_controller_ptr->get_image(), "DormConfirm"); - bool ret = false; if (score >= Configer::TemplThresholdDefault) { - ret = m_controller_ptr->click(second_confirm_rect); + m_controller_ptr->click(second_confirm_rect); } - return ret && sleep(2000); + return sleep(2000); } bool asst::InfrastDormTask::enter_next_dorm() @@ -99,12 +98,11 @@ bool asst::InfrastDormTask::enter_next_dorm() // 游戏bug,宿舍中如果“进驻信息”已被选中,直接进行滑动会被滑的很远 // 所以这里先检查一下,如果进驻信息被选中了,就先把它关了,再进行滑动 auto find_result = m_identify_ptr->find_image(m_controller_ptr->get_image(), "StationInfoSelected"); - bool ret = false; if (find_result.score >= 0.75) { - ret = m_controller_ptr->click(find_result.rect); + m_controller_ptr->click(find_result.rect); } - ret &= m_controller_ptr->swipe(swipe_down_begin, swipe_down_end, swipe_dwon_duration); + m_controller_ptr->swipe(swipe_down_begin, swipe_down_end, swipe_dwon_duration); static const Rect double_click_rect( Configer::WindowWidthDefault * 0.4, @@ -114,10 +112,10 @@ bool asst::InfrastDormTask::enter_next_dorm() ); // 游戏中的宿舍里,双击可以让当前设施回到正确的位置 - ret &= m_controller_ptr->click(double_click_rect); - ret &= m_controller_ptr->click(double_click_rect); + m_controller_ptr->click(double_click_rect); + m_controller_ptr->click(double_click_rect); - return ret; + return true; } bool asst::InfrastDormTask::enter_operator_selection() @@ -165,8 +163,8 @@ bool asst::InfrastDormTask::enter_operator_selection() // TODO 报错 return false; } - bool ret = m_controller_ptr->click(button_iter->rect); - return ret && sleep(2000); + m_controller_ptr->click(button_iter->rect); + return sleep(2000); } int asst::InfrastDormTask::select_operators(bool need_to_the_left) @@ -191,7 +189,9 @@ int asst::InfrastDormTask::select_operators(bool need_to_the_left) // 识别“注意力涣散”的干员 // TODO,这个阈值太低了,不正常,有时间再调整一下模板图片 - auto listless_result = m_identify_ptr->find_all_images(image, "Listless", 0.6); + //auto listless_result = m_identify_ptr->find_all_images(image, "Listless", 0.6); + const static std::array ListlessKeyword = { "注意力" }; + auto listless_result = text_search(m_identify_ptr->ocr_detect(image), ListlessKeyword); // 识别正在工作中的干员的心情状态 double mood_threshold = Configer::get_instance().m_infrast_options.dorm_threshold; auto work_mood_result = detect_mood_status_at_work(image, mood_threshold); @@ -267,7 +267,7 @@ std::vector InfrastDormTask::detect_mood_status_at_ #endif // 把工作中的那个黄色笑脸全抓出来 - auto smiley_result = m_identify_ptr->find_all_images(image, "SmileyAtWork", 0.8, false); + auto smiley_result = m_identify_ptr->find_all_images(image, "SmileyAtWork", 0.88, false); std::vector moods_vec; for (const auto& smiley : smiley_result) { @@ -341,7 +341,7 @@ std::vector InfrastDormTask::detect_mood_status_at_ cv::Rect on_shift_rect(mood_status.rect.x, mood_status.rect.y - HeightDiff, mood_status.rect.width, OnShiftHeight); // “休息中”的笑脸前面的模板匹配是对不上的,走不到这里,所以这里只匹配“工作中”即可 auto find_result = m_identify_ptr->find_image(image(on_shift_rect), "OnShift"); - if (find_result.score < 0.5) { + if (find_result.score < 0.45) { moods_vec.emplace_back(std::move(mood_status)); } } diff --git a/src/MeoAssistance/OcrAbstractTask.h b/src/MeoAssistance/OcrAbstractTask.h index 378c02c197..223adbfe93 100644 --- a/src/MeoAssistance/OcrAbstractTask.h +++ b/src/MeoAssistance/OcrAbstractTask.h @@ -38,6 +38,21 @@ namespace asst { } return dst; } + // 文字匹配,要求相等 + template + std::vector