opt.游戏版本更新,基建设施进入时无需再额外滑动,优化掉滑动的逻辑

This commit is contained in:
MistEO
2021-12-28 16:19:20 +08:00
parent 5c44650b2a
commit 75475588b7
7 changed files with 70 additions and 75 deletions

View File

@@ -29,7 +29,6 @@ bool asst::InfrastControlTask::_run()
return false;
}
click_clear_button();
swipe_to_the_left_of_operlist();
if (!opers_detect_with_swipe()) {
return false;
@@ -40,6 +39,7 @@ bool asst::InfrastControlTask::_run()
bool ret = opers_choose();
if (!ret) {
m_all_available_opers.clear();
swipe_to_the_left_of_operlist();
continue;
}
break;

View File

@@ -17,7 +17,6 @@ bool asst::InfrastDormTask::_run()
};
m_callback(AsstMsg::TaskStart, task_start_json, m_callback_arg);
bool random_select = false;
for (; m_cur_dorm_index < m_max_num_of_dorm; ++m_cur_dorm_index) {
if (need_exit()) {
return false;
@@ -30,82 +29,76 @@ bool asst::InfrastDormTask::_run()
return false;
}
click_clear_button();
if (!random_select) {
swipe_to_the_left_of_operlist();
}
else {
swipe_of_operlist();
}
int num_of_selected = 0;
while (num_of_selected < MaxNumOfOpers) {
opers_choose();
click_confirm_button();
click_return_button();
if (m_all_finished) {
break;
}
}
return true;
}
bool asst::InfrastDormTask::opers_choose()
{
int num_of_selected = 0;
while (num_of_selected < MaxNumOfOpers) {
if (need_exit()) {
return false;
}
const auto image = Ctrler.get_image();
InfrastOperImageAnalyzer oper_analyzer(image);
const int without_skill = InfrastOperImageAnalyzer::All ^ InfrastOperImageAnalyzer::Skill;
oper_analyzer.set_to_be_calced(without_skill);
if (!oper_analyzer.analyze()) {
Log.error("mood analyze faild!");
return false;
}
oper_analyzer.sort_by_mood();
const auto& oper_result = oper_analyzer.get_result();
int num_of_resting = 0;
for (const auto& oper : oper_result) {
if (need_exit()) {
return false;
}
const auto image = Ctrler.get_image();
InfrastOperImageAnalyzer oper_analyzer(image);
const int without_skill = InfrastOperImageAnalyzer::All ^ InfrastOperImageAnalyzer::Skill;
oper_analyzer.set_to_be_calced(without_skill);
if (!oper_analyzer.analyze()) {
Log.error("mood analyze faild!");
return false;
}
oper_analyzer.sort_by_mood();
const auto& oper_result = oper_analyzer.get_result();
int num_of_resting = 0;
for (const auto& oper : oper_result) {
if (need_exit()) {
return false;
}
if (num_of_selected >= MaxNumOfOpers) {
Log.trace("num_of_selected:", num_of_selected, ", just break");
break;
}
if (!random_select) {
switch (oper.smiley.type) {
case infrast::SmileyType::Rest:
// 如果当前页面休息完成的人数超过5个说明已经已经把所有心情不满的滑过一遍、没有更多的了
// 从这时候开始,随机选人,尽量把宿舍填满(游戏机制,可以加信赖,还有些别的加成什么的)
if (++num_of_resting > MaxNumOfOpers) {
Log.trace("num_of_resting:", num_of_resting, ", enable random");
random_select = true;
continue;
}
break;
case infrast::SmileyType::Work:
case infrast::SmileyType::Distract:
// 干员没有被选择的情况下,且不在工作,就进驻宿舍
if (oper.selected == false && oper.doing != infrast::Doing::Working) {
Ctrler.click(oper.rect);
if (++num_of_selected >= MaxNumOfOpers) {
Log.trace("num_of_selected:", num_of_selected, ", just break");
break;
}
}
break;
default:
break;
}
}
else {
if (oper.selected == false && oper.doing != infrast::Doing::Working) {
Ctrler.click(oper.rect);
if (++num_of_selected >= MaxNumOfOpers) {
Log.trace("num_of_selected:", num_of_selected, ", just break");
break;
}
}
}
}
if (num_of_selected >= MaxNumOfOpers) {
Log.trace("num_of_selected:", num_of_selected, ", just break");
break;
}
swipe_of_operlist();
switch (oper.smiley.type) {
case infrast::SmileyType::Rest:
// 如果当前页面休息完成的人数超过5个说明已经已经把所有心情不满的滑过一遍、没有更多的了
if (++num_of_resting > MaxNumOfOpers) {
Log.trace("num_of_resting:", num_of_resting, ", dorm finished");
m_all_finished = true;
return true;
}
break;
case infrast::SmileyType::Work:
case infrast::SmileyType::Distract:
// 干员没有被选择的情况下,且不在工作,就进驻宿舍
if (oper.selected == false && oper.doing != infrast::Doing::Working) {
Ctrler.click(oper.rect);
if (++num_of_selected >= MaxNumOfOpers) {
Log.trace("num_of_selected:", num_of_selected, ", just break");
break;
}
}
break;
default:
break;
}
}
click_confirm_button();
click_return_button();
if (num_of_selected >= MaxNumOfOpers) {
Log.trace("num_of_selected:", num_of_selected, ", just break");
break;
}
swipe_of_operlist();
}
return true;
}

View File

@@ -13,10 +13,12 @@ namespace asst
const static int MaxNumOfOpers = 5;
private:
virtual bool _run() override;
virtual bool _run() override;
bool opers_choose();
//virtual bool click_confirm_button() override;
int m_cur_dorm_index = 0;
int m_max_num_of_dorm = 4;
int m_max_num_of_dorm = 4;
int m_all_finished = false;
};
}

View File

@@ -26,7 +26,6 @@ bool asst::InfrastOfficeTask::_run()
if (need_exit()) {
return false;
}
swipe_to_the_left_of_operlist();
if (!opers_detect_with_swipe()) {
return false;
}
@@ -64,6 +63,7 @@ bool asst::InfrastOfficeTask::_run()
bool ret = opers_choose();
if (!ret) {
m_all_available_opers.clear();
swipe_to_the_left_of_operlist();
continue;
}
}

View File

@@ -33,7 +33,6 @@ bool asst::InfrastPowerTask::_run()
}
for (int i = 0; i <= OperSelectRetryTimes; ++i) {
swipe_to_the_left_of_operlist();
if (m_all_available_opers.empty()) {
if (!opers_detect_with_swipe()) {
@@ -76,6 +75,7 @@ bool asst::InfrastPowerTask::_run()
bool ret = opers_choose();
if (!ret) {
m_all_available_opers.clear();
swipe_to_the_left_of_operlist();
continue;
}
}

View File

@@ -115,7 +115,6 @@ bool asst::InfrastProductionTask::shift_facility_list()
return false;
}
click_clear_button();
swipe_to_the_left_of_operlist(2);
if (m_all_available_opers.empty()) {
if (!opers_detect_with_swipe()) {
@@ -130,6 +129,7 @@ bool asst::InfrastProductionTask::shift_facility_list()
bool ret = opers_choose();
if (!ret) {
m_all_available_opers.clear();
swipe_to_the_left_of_operlist(2);
continue;
}
break;

View File

@@ -184,7 +184,6 @@ bool asst::InfrastReceptionTask::shift()
return false;
}
click_clear_button();
swipe_to_the_left_of_operlist();
if (!opers_detect_with_swipe()) {
return false;
@@ -195,6 +194,7 @@ bool asst::InfrastReceptionTask::shift()
bool ret = opers_choose();
if (!ret) {
m_all_available_opers.clear();
swipe_to_the_left_of_operlist();
continue;
}
break;