mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-18 02:10:21 +08:00
更新任务处理
This commit is contained in:
@@ -51,6 +51,7 @@ namespace asst {
|
||||
static void task_callback(TaskMsg msg, const json::value& detail, void* custom_arg);
|
||||
|
||||
void append_match_task(const std::vector<std::string>& tasks);
|
||||
void append_task(const json::value& detail);
|
||||
void clear_exec_times();
|
||||
|
||||
std::shared_ptr<WinMacro> m_window_ptr = nullptr;
|
||||
|
||||
@@ -237,48 +237,28 @@ void Assistance::task_callback(TaskMsg msg, const json::value& detail, void* cus
|
||||
DebugTrace(msg, detail.to_string());
|
||||
|
||||
Assistance* p_this = (Assistance*)custom_arg;
|
||||
json::value more_detail = detail;
|
||||
switch (msg)
|
||||
{
|
||||
case TaskMsg::ReadyToSleep:
|
||||
case TaskMsg::PtrIsNull:
|
||||
case TaskMsg::ImageIsEmpty:
|
||||
p_this->stop(false);
|
||||
break;
|
||||
case TaskMsg::EndOfSleep:
|
||||
case TaskMsg::WindowMinimized:
|
||||
p_this->m_window_ptr->showWindow();
|
||||
break;
|
||||
case TaskMsg::AppendMatchTask:
|
||||
{
|
||||
std::vector<std::string> next_vec;
|
||||
if (detail.exist("tasks")) {
|
||||
json::array next_arr = detail.at("tasks").as_array();
|
||||
for (const json::value& next_json : next_arr) {
|
||||
next_vec.emplace_back(next_json.as_string());
|
||||
}
|
||||
}
|
||||
else if (detail.exist("task")) {
|
||||
next_vec.emplace_back(detail.at("task").as_string());
|
||||
}
|
||||
if (next_vec.size() == 1 && next_vec.at(0) == "Stop") {
|
||||
break;
|
||||
}
|
||||
p_this->append_match_task(next_vec);
|
||||
}
|
||||
break;
|
||||
more_detail["type"] = "MatchTask";
|
||||
[[fallthrough]];
|
||||
case TaskMsg::AppendTask:
|
||||
{
|
||||
std::string task = detail.at("type").as_string();
|
||||
if (task == "ClickTask") {
|
||||
auto task_ptr = std::make_shared<ClickTask>(task_callback, custom_arg);
|
||||
json::array rect_json = detail.at("rect").as_array();
|
||||
Rect rect(rect_json[0].as_integer(), rect_json[1].as_integer(), rect_json[2].as_integer(), rect_json[3].as_integer());
|
||||
task_ptr->set_rect(std::move(rect));
|
||||
p_this->m_tasks_queue.emplace(task_ptr);
|
||||
} // else if // TODO
|
||||
}
|
||||
break;
|
||||
p_this->append_task(more_detail);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (p_this->m_callback) {
|
||||
p_this->m_callback(msg, detail, p_this->m_callback_arg);
|
||||
p_this->m_callback(msg, more_detail, p_this->m_callback_arg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,6 +269,32 @@ void asst::Assistance::append_match_task(const std::vector<std::string>& tasks)
|
||||
m_tasks_queue.emplace(task_ptr);
|
||||
}
|
||||
|
||||
void asst::Assistance::append_task(const json::value& detail)
|
||||
{
|
||||
std::string task_type = detail.at("type").as_string();
|
||||
if (task_type == "ClickTask") {
|
||||
auto task_ptr = std::make_shared<ClickTask>(task_callback, (void*)this);
|
||||
json::array rect_json = detail.at("rect").as_array();
|
||||
Rect rect(rect_json[0].as_integer(), rect_json[1].as_integer(), rect_json[2].as_integer(), rect_json[3].as_integer());
|
||||
task_ptr->set_rect(std::move(rect));
|
||||
m_tasks_queue.emplace(task_ptr);
|
||||
}
|
||||
else if (task_type == "MatchTask") {
|
||||
std::vector<std::string> next_vec;
|
||||
if (detail.exist("tasks")) {
|
||||
json::array next_arr = detail.at("tasks").as_array();
|
||||
for (const json::value& next_json : next_arr) {
|
||||
next_vec.emplace_back(next_json.as_string());
|
||||
}
|
||||
}
|
||||
else if (detail.exist("task")) {
|
||||
next_vec.emplace_back(detail.at("task").as_string());
|
||||
}
|
||||
append_match_task(next_vec);
|
||||
}
|
||||
// else if // TODO
|
||||
}
|
||||
|
||||
void Assistance::clear_exec_times()
|
||||
{
|
||||
for (auto&& pair : Configer::get_instance().m_all_tasks_info) {
|
||||
|
||||
@@ -168,6 +168,7 @@ bool MatchTask::run()
|
||||
// 前置固定延时
|
||||
sleep(task.pre_delay);
|
||||
|
||||
bool need_stop = false;
|
||||
switch (task.type) {
|
||||
case MatchTaskType::ClickRect:
|
||||
rect = task.specific_area;
|
||||
@@ -179,6 +180,7 @@ bool MatchTask::run()
|
||||
break;
|
||||
case MatchTaskType::Stop:
|
||||
m_callback(TaskMsg::MissionStop, json::value(), m_callback_arg);
|
||||
need_stop = true;
|
||||
break;
|
||||
case MatchTaskType::PrintWindow:
|
||||
{
|
||||
@@ -200,6 +202,10 @@ bool MatchTask::run()
|
||||
--Configer::get_instance().m_all_tasks_info[reduce].exec_times;
|
||||
}
|
||||
|
||||
if (need_stop) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 后置固定延时
|
||||
sleep(task.rear_delay);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user