Skip to content

Commit ac5ab05

Browse files
committed
more changes
1 parent c7d3c7e commit ac5ab05

File tree

1 file changed

+32
-21
lines changed

1 file changed

+32
-21
lines changed

SerialPrograms/Source/NintendoSwitch/Programs/NintendoSwitch_Navigation.cpp

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,40 @@ bool is_setting_selected(VideoStream& stream, ProControllerContext& context, Ima
3535
overlays.add(COLOR_BLUE, unselected_box2);
3636
context.wait_for_all_requests();
3737
context.wait_for(Milliseconds(250));
38-
VideoSnapshot snapshot = stream.video().snapshot();
39-
40-
ImageStats stats_unselected_box1 = image_stats(extract_box_reference(snapshot, unselected_box1));
41-
double unselected1_average_sum = stats_unselected_box1.average.sum();
42-
stream.log("unselected_average_sum1: " + std::to_string(unselected1_average_sum));
43-
44-
ImageStats stats_unselected_box2 = image_stats(extract_box_reference(snapshot, unselected_box2));
45-
double unselected2_average_sum = stats_unselected_box2.average.sum();
46-
stream.log("unselected_average_sum2: " + std::to_string(unselected2_average_sum));
47-
48-
double average_sum_unselected_diff = std::abs(unselected1_average_sum - unselected2_average_sum);
49-
50-
ImageStats stats_selected_box = image_stats(extract_box_reference(snapshot, selected_box));
51-
double selected_average_sum = stats_selected_box.average.sum();
52-
stream.log("selected_average_sum: " + std::to_string(selected_average_sum));
38+
size_t max_attempts = 5; // multiple attempts because the highlighted icon/setting pulses. and sometimes there isn't enough contrast at the exact moment you take the snapshot.
39+
bool is_selected = false;
40+
for (size_t i = 0; i < max_attempts; i++){
41+
VideoSnapshot snapshot = stream.video().snapshot();
42+
43+
ImageStats stats_unselected_box1 = image_stats(extract_box_reference(snapshot, unselected_box1));
44+
double unselected1_average_sum = stats_unselected_box1.average.sum();
45+
stream.log("unselected_average_sum1: " + std::to_string(unselected1_average_sum));
46+
47+
ImageStats stats_unselected_box2 = image_stats(extract_box_reference(snapshot, unselected_box2));
48+
double unselected2_average_sum = stats_unselected_box2.average.sum();
49+
stream.log("unselected_average_sum2: " + std::to_string(unselected2_average_sum));
50+
51+
double average_sum_unselected_diff = std::abs(unselected1_average_sum - unselected2_average_sum);
52+
53+
ImageStats stats_selected_box = image_stats(extract_box_reference(snapshot, selected_box));
54+
double selected_average_sum = stats_selected_box.average.sum();
55+
stream.log("selected_average_sum: " + std::to_string(selected_average_sum));
56+
57+
if (is_white_theme(stream, context)){ // light mode
58+
// unselected should be brighter than selected
59+
is_selected = selected_average_sum < std::min(unselected1_average_sum, unselected2_average_sum) - average_sum_unselected_diff - 20 ;
60+
}else{ // dark mode
61+
// selected should be brighter than unselected
62+
is_selected = selected_average_sum > std::max(unselected1_average_sum, unselected2_average_sum) + average_sum_unselected_diff + 20;
63+
}
5364

54-
if (is_white_theme(stream, context)){ // light mode
55-
// unselected should be brighter than selected
56-
return selected_average_sum < std::min(unselected1_average_sum, unselected2_average_sum) - average_sum_unselected_diff - 20 ;
57-
}else{ // dark mode
58-
// selected should be brighter than unselected
59-
return selected_average_sum > std::max(unselected1_average_sum, unselected2_average_sum) + average_sum_unselected_diff + 20;
65+
if(is_selected){
66+
return true;
67+
}
68+
context.wait_for(Milliseconds(200));
6069
}
70+
71+
return false;
6172
}
6273

6374
void home_to_date_time(VideoStream& stream, ProControllerContext& context, bool to_date_change, bool fast){

0 commit comments

Comments
 (0)