mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-19 10:32:19 +08:00
perf: 优化在定义基建获取房间信息的效率
perf https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/1914
This commit is contained in:
@@ -71,6 +71,7 @@ asst::infrast::CustomRoomConfig& asst::InfrastAbstractTask::current_room_config(
|
||||
{
|
||||
static infrast::CustomRoomConfig empty;
|
||||
if (!m_is_custom) {
|
||||
Log.error(__FUNCTION__, "custom is not enabled");
|
||||
return empty;
|
||||
}
|
||||
|
||||
@@ -78,7 +79,7 @@ asst::infrast::CustomRoomConfig& asst::InfrastAbstractTask::current_room_config(
|
||||
return m_custom_config[m_cur_facility_index];
|
||||
}
|
||||
else {
|
||||
Log.error("tab size is lager than config size", m_cur_facility_index, m_custom_config.size());
|
||||
Log.error(__FUNCTION__, "tab size is lager than config size", m_cur_facility_index, m_custom_config.size());
|
||||
return empty;
|
||||
}
|
||||
}
|
||||
@@ -160,11 +161,12 @@ bool asst::InfrastAbstractTask::swipe_and_select_custom_opers(bool is_dorm_order
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
auto& room_config = current_room_config();
|
||||
{
|
||||
json::value cb_info = basic_info_with_what("CustomInfrastRoomOperators");
|
||||
auto& details = cb_info["details"];
|
||||
details["names"] = json::array(current_room_config().names);
|
||||
details["candidates"] = json::array(current_room_config().candidates);
|
||||
details["names"] = json::array(room_config.names);
|
||||
details["candidates"] = json::array(room_config.candidates);
|
||||
callback(AsstMsg::SubTaskExtraInfo, cb_info);
|
||||
}
|
||||
|
||||
@@ -172,9 +174,8 @@ bool asst::InfrastAbstractTask::swipe_and_select_custom_opers(bool is_dorm_order
|
||||
ProcessTask(*this, { "InfrastOperListTabSkillUnClicked", "Stop" }).run();
|
||||
}
|
||||
|
||||
std::vector<std::string> opers_order = current_room_config().names;
|
||||
opers_order.insert(opers_order.end(), current_room_config().candidates.cbegin(),
|
||||
current_room_config().candidates.cend());
|
||||
std::vector<std::string> opers_order = room_config.names;
|
||||
opers_order.insert(opers_order.end(), room_config.candidates.cbegin(), room_config.candidates.cend());
|
||||
|
||||
std::vector<std::string> pre_partial_result;
|
||||
bool retried = false;
|
||||
@@ -188,8 +189,8 @@ bool asst::InfrastAbstractTask::swipe_and_select_custom_opers(bool is_dorm_order
|
||||
if (!select_custom_opers(partial_result)) {
|
||||
return false;
|
||||
}
|
||||
if (current_room_config().selected >= max_num_of_opers() ||
|
||||
(current_room_config().names.empty() && current_room_config().candidates.empty())) {
|
||||
if (room_config.selected >= max_num_of_opers() ||
|
||||
(room_config.names.empty() && room_config.candidates.empty())) {
|
||||
break;
|
||||
}
|
||||
if (partial_result == pre_partial_result) {
|
||||
@@ -225,24 +226,25 @@ bool asst::InfrastAbstractTask::swipe_and_select_custom_opers(bool is_dorm_order
|
||||
ProcessTask(*this, { "InfrastOperListTabWorkStatusUnClicked" }).run();
|
||||
}
|
||||
|
||||
if (current_room_config().sort || current_room_config().autofill) {
|
||||
if (room_config.sort || room_config.autofill) {
|
||||
swipe_to_the_left_of_operlist(swipe_times / 5 + 1);
|
||||
swipe_times = 0;
|
||||
}
|
||||
// 如果只选了一个人没必要排序
|
||||
if (current_room_config().sort && current_room_config().selected > 1) {
|
||||
if (room_config.sort && room_config.selected > 1) {
|
||||
click_clear_button();
|
||||
order_opers_selection(opers_order);
|
||||
}
|
||||
|
||||
return current_room_config().names.empty();
|
||||
return room_config.names.empty();
|
||||
}
|
||||
|
||||
bool asst::InfrastAbstractTask::select_custom_opers(std::vector<std::string>& partial_result)
|
||||
{
|
||||
LogTraceFunction;
|
||||
|
||||
if (current_room_config().names.empty() && current_room_config().candidates.empty()) {
|
||||
auto& room_config = current_room_config();
|
||||
if (room_config.names.empty() && room_config.candidates.empty()) {
|
||||
Log.warn("opers_name is empty");
|
||||
return false;
|
||||
}
|
||||
@@ -269,14 +271,14 @@ bool asst::InfrastAbstractTask::select_custom_opers(std::vector<std::string>& pa
|
||||
const std::string& name = name_analyzer.get_result().front().text;
|
||||
partial_result.emplace_back(name);
|
||||
|
||||
if (auto iter = ranges::find(current_room_config().names, name); iter != current_room_config().names.end()) {
|
||||
current_room_config().names.erase(iter);
|
||||
if (auto iter = ranges::find(room_config.names, name); iter != room_config.names.end()) {
|
||||
room_config.names.erase(iter);
|
||||
}
|
||||
else if (max_num_of_opers() - current_room_config().selected >
|
||||
current_room_config().names.size()) { // names中的数量,比剩余的空位多,就可以选备选的
|
||||
if (auto candd_iter = ranges::find(current_room_config().candidates, name);
|
||||
candd_iter != current_room_config().candidates.end()) {
|
||||
current_room_config().candidates.erase(candd_iter);
|
||||
else if (max_num_of_opers() - room_config.selected >
|
||||
room_config.names.size()) { // names中的数量,比剩余的空位多,就可以选备选的
|
||||
if (auto candd_iter = ranges::find(room_config.candidates, name);
|
||||
candd_iter != room_config.candidates.end()) {
|
||||
room_config.candidates.erase(candd_iter);
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
@@ -288,7 +290,7 @@ bool asst::InfrastAbstractTask::select_custom_opers(std::vector<std::string>& pa
|
||||
if (!oper.selected) {
|
||||
m_ctrler->click(oper.rect);
|
||||
}
|
||||
if (++current_room_config().selected >= max_num_of_opers()) {
|
||||
if (++room_config.selected >= max_num_of_opers()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user