From 9adaf92c5df23bed61c680ca6a6a91e85ba5b76b Mon Sep 17 00:00:00 2001 From: MistEO Date: Mon, 19 Dec 2022 22:30:21 +0800 Subject: [PATCH] fix: build error --- src/MaaCore/Common/AsstTypes.h | 2 + src/MaaCore/InstHelper.h | 2 +- src/MaaCore/Task/AbstractTask.h | 2 +- src/MaaCore/Task/BattleHelper.cpp | 48 +++++++++++-------- src/MaaCore/Task/BattleHelper.h | 8 ++-- .../Task/Miscellaneous/BattleProcessTask.cpp | 2 +- .../Task/Miscellaneous/BattleProcessTask.h | 2 +- 7 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/MaaCore/Common/AsstTypes.h b/src/MaaCore/Common/AsstTypes.h index 2caccbacc2..4d30b39dcf 100644 --- a/src/MaaCore/Common/AsstTypes.h +++ b/src/MaaCore/Common/AsstTypes.h @@ -61,6 +61,8 @@ namespace asst static constexpr Point up() { return { 0, -1 }; } static constexpr Point zero() { return { 0, 0 }; } bool empty() const noexcept { return x == 0 && y == 0; } + // for std::map + bool operator<(const Point& rhs) const noexcept { return x < rhs.x || (x == rhs.x && y < rhs.y); } int x = 0; int y = 0; diff --git a/src/MaaCore/InstHelper.h b/src/MaaCore/InstHelper.h index 2428dc7be4..ea7031fc67 100644 --- a/src/MaaCore/InstHelper.h +++ b/src/MaaCore/InstHelper.h @@ -10,7 +10,7 @@ namespace asst class InstHelper { - protected: + public: InstHelper() = default; InstHelper(const InstHelper&) = default; InstHelper(InstHelper&&) noexcept = default; diff --git a/src/MaaCore/Task/AbstractTask.h b/src/MaaCore/Task/AbstractTask.h index 0ae961deea..301dd05dd5 100644 --- a/src/MaaCore/Task/AbstractTask.h +++ b/src/MaaCore/Task/AbstractTask.h @@ -22,7 +22,7 @@ namespace asst class Status; class TaskData; - class AbstractTask : virtual protected InstHelper + class AbstractTask : protected InstHelper { public: AbstractTask(const AsstCallback& callback, Assistant* inst, std::string_view task_chain); diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index aafa64a1f5..5eb2fa3633 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -17,6 +17,8 @@ using namespace asst::battle; +asst::BattleHelper::BattleHelper(Assistant* inst) : m_inst_helper(inst) {} + bool asst::BattleHelper::set_stage_name(const std::string& name) { LogTraceFunction; @@ -70,7 +72,7 @@ bool asst::BattleHelper::analyze_deployment_opers(bool init) wait_for_start(); } - cv::Mat image = ctrler()->get_image(); + cv::Mat image = m_inst_helper.ctrler()->get_image(); if (init) { auto draw_future = std::async(std::launch::async, [&]() { save_map(image); }); @@ -105,8 +107,8 @@ bool asst::BattleHelper::analyze_deployment_opers(bool init) double max_socre = 0; - for (const auto& [name, avatars] : m_all_deployment_avatars) { - avatar_analyzer.set_templ(avatars); + for (const auto& [name, avatar] : m_all_deployment_avatars) { + avatar_analyzer.set_templ(avatar); if (!avatar_analyzer.analyze()) { continue; } @@ -138,12 +140,12 @@ bool asst::BattleHelper::analyze_deployment_opers(bool init) break; } std::this_thread::yield(); - } while (!need_exit()); + } while (!m_inst_helper.need_exit()); for (auto& oper : unknown_opers) { click_oper_on_deployment(oper.rect); - OcrWithPreprocessImageAnalyzer name_analyzer(ctrler()->get_image()); + OcrWithPreprocessImageAnalyzer name_analyzer(m_inst_helper.ctrler()->get_image()); name_analyzer.set_task_info("BattleOperName"); name_analyzer.set_replace(Task.get("CharsNameOcrReplace")->replace_map); if (name_analyzer.analyze()) { @@ -154,7 +156,7 @@ bool asst::BattleHelper::analyze_deployment_opers(bool init) const std::string& name = name_analyzer.get_result().front().text; oper.name = name; m_cur_deployment_opers.insert_or_assign(name, oper); - m_all_deployment_avatars.insert_or_assign(name, oper); + m_all_deployment_avatars.insert_or_assign(name, oper.avatar); } pause(); } @@ -187,10 +189,10 @@ bool asst::BattleHelper::deploy_oper(const std::string& name, const Point& loc, // 1000 是随便取的一个系数,把整数的 pre_delay 转成小数用的 int duration = static_cast(dist / 1000.0 * swipe_oper_task_ptr->pre_delay); - bool deploy_with_pause = ctrler()->support_swipe_with_pause(); - ctrler()->swipe(oper_rect, Rect(target_point.x, target_point.y, 1, 1), duration, false, - swipe_oper_task_ptr->special_params.at(1), swipe_oper_task_ptr->special_params.at(2), - deploy_with_pause); + bool deploy_with_pause = m_inst_helper.ctrler()->support_swipe_with_pause(); + m_inst_helper.ctrler()->swipe(oper_rect, Rect(target_point.x, target_point.y, 1, 1), duration, false, + swipe_oper_task_ptr->special_params.at(1), swipe_oper_task_ptr->special_params.at(2), + deploy_with_pause); // 拖动干员朝向 if (direction != DeployDirection::None) { @@ -207,12 +209,12 @@ bool asst::BattleHelper::deploy_oper(const std::string& name, const Point& loc, static const int coeff = swipe_oper_task_ptr->special_params.at(0); Point end_point = target_point + (direction_target * coeff); - ctrler()->swipe(target_point, end_point, swipe_oper_task_ptr->post_delay); - sleep(use_oper_task_ptr->post_delay); + m_inst_helper.ctrler()->swipe(target_point, end_point, swipe_oper_task_ptr->post_delay); + m_inst_helper.sleep(use_oper_task_ptr->post_delay); } if (deploy_with_pause) { - ctrler()->press_esc(); + m_inst_helper.ctrler()->press_esc(); } BattlefieldOper bf_oper { .name = name, .loc = loc }; @@ -279,7 +281,7 @@ bool asst::BattleHelper::check_pause_button() { MatchImageAnalyzer battle_flag_analyzer; battle_flag_analyzer.set_task_info("BattleOfficiallyBegin"); - battle_flag_analyzer.set_image(ctrler()->get_image()); + battle_flag_analyzer.set_image(m_inst_helper.ctrler()->get_image()); return battle_flag_analyzer.analyze(); } @@ -287,7 +289,7 @@ bool asst::BattleHelper::wait_for_start() { LogTraceFunction; - while (!need_exit() && !check_pause_button()) { + while (!m_inst_helper.need_exit() && !check_pause_button()) { std::this_thread::yield(); } return true; @@ -297,7 +299,7 @@ bool asst::BattleHelper::wait_for_end() { LogTraceFunction; - while (!need_exit() && check_pause_button()) { + while (!m_inst_helper.need_exit() && check_pause_button()) { use_all_ready_skill(); std::this_thread::yield(); } @@ -306,6 +308,7 @@ bool asst::BattleHelper::wait_for_end() bool asst::BattleHelper::use_all_ready_skill() { + bool used = false; for (const auto& [name, loc] : m_battlefield_opers | std::views::values) { auto& usage = m_skill_usage[name]; if (usage != SkillUsage::Possibly && usage != SkillUsage::Once) { @@ -314,10 +317,13 @@ bool asst::BattleHelper::use_all_ready_skill() if (!check_and_use_skill(loc)) { continue; } + used = true; if (usage == SkillUsage::Once) { usage = SkillUsage::OnceUsed; } } + + return used; } bool asst::BattleHelper::check_and_use_skill(const std::string& name) @@ -336,7 +342,7 @@ bool asst::BattleHelper::check_and_use_skill(const Point& loc) { LogTraceFunction; - BattleSkillReadyImageAnalyzer skill_analyzer(ctrler()->get_image()); + BattleSkillReadyImageAnalyzer skill_analyzer(m_inst_helper.ctrler()->get_image()); auto target_iter = m_normal_tile_info.find(loc); if (target_iter == m_normal_tile_info.end()) { @@ -386,8 +392,8 @@ bool asst::BattleHelper::click_oper_on_deployment(const Rect& rect) LogTraceFunction; const auto use_oper_task_ptr = Task.get("BattleUseOper"); - ctrler()->click(rect); - sleep(use_oper_task_ptr->pre_delay); + m_inst_helper.ctrler()->click(rect); + m_inst_helper.sleep(use_oper_task_ptr->pre_delay); return true; } @@ -417,8 +423,8 @@ bool asst::BattleHelper::click_oper_on_battlefiled(const Point& loc) } const Point& target_point = target_iter->second.pos; - ctrler()->click(target_point); - sleep(use_oper_task_ptr->pre_delay); + m_inst_helper.ctrler()->click(target_point); + m_inst_helper.sleep(use_oper_task_ptr->pre_delay); return true; } diff --git a/src/MaaCore/Task/BattleHelper.h b/src/MaaCore/Task/BattleHelper.h index d2382a9cab..0be032c59c 100644 --- a/src/MaaCore/Task/BattleHelper.h +++ b/src/MaaCore/Task/BattleHelper.h @@ -11,13 +11,14 @@ namespace asst { - class BattleHelper : virtual protected InstHelper + class BattleHelper { public: - using InstHelper::InstHelper; - virtual ~BattleHelper() override = default; + ~BattleHelper() = default; protected: + BattleHelper(Assistant* inst); + virtual bool set_stage_name(const std::string& name); bool calc_tiles_info(const std::string& stage_name); @@ -48,6 +49,7 @@ namespace asst std::optional get_oper_rect_on_deployment(const std::string& name) const; + InstHelper m_inst_helper; std::string m_stage_name; std::unordered_map m_side_tile_info; std::unordered_map m_normal_tile_info; diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp index a57519e116..410d874b04 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.cpp @@ -123,7 +123,7 @@ bool asst::BattleProcessTask::do_action(size_t action_index) return ret; } -bool asst::BattleProcessTask::notify_action(const battle::copilot::Action& action) +void asst::BattleProcessTask::notify_action(const battle::copilot::Action& action) { const static std::unordered_map ActionNames = { { ActionType::Deploy, "Deploy" }, { ActionType::UseSkill, "UseSkill" }, diff --git a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h index fd41223515..387dacc8b3 100644 --- a/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h +++ b/src/MaaCore/Task/Miscellaneous/BattleProcessTask.h @@ -21,7 +21,7 @@ namespace asst virtual bool _run() override; bool do_action(size_t action_index); - bool notify_action(const battle::copilot::Action& action); + void notify_action(const battle::copilot::Action& action); bool wait_condition(const battle::copilot::Action& action); bool enter_bullet_time_for_next_action(size_t next_index, const Point& location, const std::string& name); void sleep_with_use_ready_skill(unsigned millisecond);