Files
MaaAssistantArknights/src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.cpp
2022-03-13 19:19:19 +08:00

68 lines
1.9 KiB
C++

#include "RoguelikeSkillSelectionTaskPlugin.h"
#include "RoguelikeSkillSelectionImageAnalyzer.h"
#include "Controller.h"
#include "TaskData.h"
#include "Logger.hpp"
bool asst::RoguelikeSkillSelectionTaskPlugin::verify(AsstMsg msg, const json::value& details) const
{
if (msg != AsstMsg::SubTaskStart
|| details.get("subtask", std::string()) != "ProcessTask") {
return false;
}
if (details.at("details").at("task").as_string() == "Roguelike1StartAction") {
return true;
}
else {
return false;
}
}
void asst::RoguelikeSkillSelectionTaskPlugin::set_skill_map(SkillMap skill_mapping)
{
m_skill_mapping = std::move(skill_mapping);
}
bool asst::RoguelikeSkillSelectionTaskPlugin::_run()
{
//#ifdef ASST_DEBUG
// m_skill_mapping.clear();
// m_skill_mapping.reserve(4);
// m_skill_mapping.emplace("棘刺", 3);
// m_skill_mapping.emplace("芙蓉", 1);
// m_skill_mapping.emplace("梓兰", 1);
// m_skill_mapping.emplace("阿米娅", 3);
// m_skill_mapping.emplace("Unknown", 3);
//#endif
auto image = m_ctrler->get_image();
RoguelikeSkillSelectionImageAnalyzer analyzer(image);
if (!analyzer.analyze()) {
return false;
}
for (const auto& [name, skill_vec] : analyzer.get_result()) {
for (const auto& [req_name, req_skill] : m_skill_mapping) {
if (name.find(req_name) == std::string::npos) {
continue;
}
size_t index = 0;
if (skill_vec.size() < req_skill) {
index = skill_vec.size() - 1;
Log.info("skill", req_skill, "not exists, use skill", index);
}
else {
index = req_skill - 1;
}
Rect target = skill_vec.at(index);
m_ctrler->click(target);
break;
}
}
return true;
}