mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 09:50:40 +08:00
opt.简单优化了下战斗任务
This commit is contained in:
@@ -29,7 +29,7 @@ bool asst::BattlePerspectiveImageAnalyzer::placed_analyze()
|
||||
cv::Mat hsv;
|
||||
cv::cvtColor(m_image, hsv, cv::COLOR_BGR2HSV);
|
||||
cv::Mat bin;
|
||||
cv::inRange(hsv, cv::Scalar(60, 100, 60), cv::Scalar(80, 150, 120), bin);
|
||||
cv::inRange(hsv, cv::Scalar(60, 100, 60), cv::Scalar(80, 150, 150), bin);
|
||||
|
||||
// 形态学降噪
|
||||
cv::Mat morph_dst = bin;
|
||||
@@ -64,13 +64,13 @@ bool asst::BattlePerspectiveImageAnalyzer::placed_analyze()
|
||||
cv::circle(m_image_draw, cv::Point(m_nearest_point.x, m_nearest_point.y), 3, cv::Scalar(255, 255, 0));
|
||||
#endif
|
||||
|
||||
// // 格子的边缘是没法上人的,往格子中间位置校正一下
|
||||
// Point home_center(home.x + home.width / 2, home.y + home.height / 2);
|
||||
// m_nearest_point.x += home_center.x < m_nearest_point.x ? 30 : -30;
|
||||
// m_nearest_point.y += home_center.y < m_nearest_point.y ? 20 : -20;
|
||||
//
|
||||
//#ifdef ASST_DEBUG
|
||||
// cv::circle(m_image_draw, cv::Point(m_nearest_point.x, m_nearest_point.y), 3, cv::Scalar(255, 255, 0), -1);
|
||||
//#endif
|
||||
// // 格子的边缘是没法上人的,往格子中间位置校正一下
|
||||
// Point home_center(home.x + home.width / 2, home.y + home.height / 2);
|
||||
// m_nearest_point.x += home_center.x < m_nearest_point.x ? 30 : -30;
|
||||
// m_nearest_point.y += home_center.y < m_nearest_point.y ? 20 : -20;
|
||||
//
|
||||
//#ifdef ASST_DEBUG
|
||||
// cv::circle(m_image_draw, cv::Point(m_nearest_point.x, m_nearest_point.y), 3, cv::Scalar(255, 255, 0), -1);
|
||||
//#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -27,30 +27,25 @@ bool asst::BattleTask::auto_battle()
|
||||
if (opers.empty()) {
|
||||
return true;
|
||||
}
|
||||
if (auto cur_home = oper_analyzer.get_homes();
|
||||
!cur_home.empty()) {
|
||||
m_home_cache = cur_home;
|
||||
}
|
||||
|
||||
static const std::array<Role, 9> RoleOrder = {
|
||||
Role::Medic,
|
||||
Role::Pioneer,
|
||||
Role::Sniper,
|
||||
Role::Support,
|
||||
Role::Warrior,
|
||||
Role::Support,
|
||||
Role::Caster,
|
||||
Role::Special,
|
||||
Role::Medic,
|
||||
Role::Tank,
|
||||
Role::Drone
|
||||
};
|
||||
const auto use_oper_task_ptr = Task.get("BattleUseOper");
|
||||
|
||||
// 点击当前最合适的干员
|
||||
|
||||
//auto oper_iter = std::find_first_of(
|
||||
// opers.cbegin(), opers.cend(), RoleOrder.cbegin(), RoleOrder.cend(),
|
||||
// [](const Oper& oper, const Role& role) -> bool {
|
||||
// return oper.available && oper.role == role;
|
||||
//});
|
||||
//if (oper_iter == opers.cend()) {
|
||||
// return true;
|
||||
//}
|
||||
Oper opt_oper;
|
||||
bool oper_found = false;
|
||||
for (auto role : RoleOrder) {
|
||||
@@ -74,7 +69,7 @@ bool asst::BattleTask::auto_battle()
|
||||
|
||||
// 将干员拖动到场上
|
||||
BattlePerspectiveImageAnalyzer placed_analyzer(Ctrler.get_image());
|
||||
placed_analyzer.set_src_homes(oper_analyzer.get_homes());
|
||||
placed_analyzer.set_src_homes(m_home_cache);
|
||||
if (!placed_analyzer.analyze()) {
|
||||
return true;
|
||||
}
|
||||
@@ -87,11 +82,19 @@ bool asst::BattleTask::auto_battle()
|
||||
Rect home = placed_analyzer.get_homes().front();
|
||||
Point home_center(home.x + home.width / 2, home.y + home.height / 2);
|
||||
|
||||
int dx = nearest_point.x - home_center.x;
|
||||
int dy = nearest_point.y - home_center.y;
|
||||
Point end_point;
|
||||
|
||||
switch (opt_oper.role) {
|
||||
case Role::Medic:
|
||||
case Role::Support:
|
||||
Ctrler.swipe(nearest_point, home_center, 300);
|
||||
break;
|
||||
{
|
||||
constexpr int coeff = 5;
|
||||
end_point.x = nearest_point.x - coeff * dx;
|
||||
end_point.y = nearest_point.y - coeff * dy;
|
||||
}
|
||||
break;
|
||||
case Role::Pioneer:
|
||||
case Role::Warrior:
|
||||
case Role::Sniper:
|
||||
@@ -101,12 +104,12 @@ bool asst::BattleTask::auto_battle()
|
||||
case Role::Drone:
|
||||
default:
|
||||
{
|
||||
Point reverse_point;
|
||||
reverse_point.x = nearest_point.x * 2 - home_center.x;
|
||||
reverse_point.y = nearest_point.y * 2 - home_center.y;
|
||||
Ctrler.swipe(nearest_point, reverse_point, 300);
|
||||
constexpr int coeff = 5;
|
||||
end_point.x = nearest_point.x + coeff * dx;
|
||||
end_point.y = nearest_point.y + coeff * dy;
|
||||
}
|
||||
break;
|
||||
}
|
||||
Ctrler.swipe(nearest_point, end_point, 300);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "AbstractTask.h"
|
||||
#include "AsstDef.h"
|
||||
|
||||
namespace asst
|
||||
{
|
||||
@@ -14,5 +15,7 @@ namespace asst
|
||||
virtual bool _run() override;
|
||||
|
||||
bool auto_battle();
|
||||
|
||||
std::vector<Rect> m_home_cache;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ bool asst::TaskData::parse(const json::value& json)
|
||||
for (const json::value& hash : task_json.at("hash").as_array()) {
|
||||
hash_task_info_ptr->hashs.emplace_back(hash.as_string());
|
||||
}
|
||||
hash_task_info_ptr->dist_threshold = task_json.get("threshold", 0.0);
|
||||
hash_task_info_ptr->dist_threshold = task_json.get("threshold", 0);
|
||||
if (task_json.exist("maskRange")) {
|
||||
hash_task_info_ptr->mask_range = std::make_pair(
|
||||
task_json.at("maskRange")[0].as_integer(),
|
||||
@@ -217,4 +217,4 @@ bool asst::TaskData::parse(const json::value& json)
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,14 +30,14 @@ int main(int argc, char** argv)
|
||||
|
||||
char ch = 0;
|
||||
while (ch != 'q') {
|
||||
AsstAppendDebug(ptr);
|
||||
// AsstAppendStartUp(ptr);
|
||||
AsstAppendFight(ptr, "CE-5", 0, 0, 99999);
|
||||
//AsstAppendFight(ptr, "CE-5", 0, 0, 99999);
|
||||
// AsstAppendVisit(ptr, true);
|
||||
//{
|
||||
// const int required[] = { 3, 4, 5, 6 };
|
||||
// AsstStartRecruitCalc(ptr, required, sizeof(required) / sizeof(int), true);
|
||||
// }
|
||||
// AsstAppendDebug(ptr);
|
||||
//{
|
||||
// const char* order[] = { "Trade", "Dorm" };
|
||||
// AsstAppendInfrast(ptr, 1, order, 2, "Money", 0.3);
|
||||
|
||||
Reference in New Issue
Block a user