@@ -22,10 +22,7 @@ namespace NintendoSwitch{
2222namespace PokemonSwSh {
2323
2424
25- namespace {
26- // This box covers all possible locations of the black triangle arrow
27- ImageFloatBox BLACK_TRIANGLE_BOX{0.771 , 0.901 , 0.031 , 0.069 };
28- }
25+
2926
3027class DialogTriangleMatcher : public ImageMatch ::WaterfillTemplateMatcher{
3128public:
@@ -53,20 +50,58 @@ const DialogTriangleMatcher& DialogTriangleMatcher::instance(){
5350
5451
5552
53+
5654DialogTriangleDetector::DialogTriangleDetector (
55+ Color color,
56+ ImageFloatBox box
57+ )
58+ : m_color(color)
59+ , m_box(box)
60+ {}
61+
62+ void DialogTriangleDetector::make_overlays (VideoOverlaySet& items) const {
63+ items.add (m_color, m_box);
64+ }
65+ bool DialogTriangleDetector::detect (const ImageViewRGB32& screen){
66+ const std::vector<std::pair<uint32_t , uint32_t >> filters = {
67+ {combine_rgb (0 , 0 , 0 ), combine_rgb (50 , 50 , 50 )}
68+ };
69+
70+ const double screen_rel_size = (screen.height () / 1080.0 );
71+ const size_t min_size = size_t (screen_rel_size * screen_rel_size * 500.0 );
72+
73+ return match_template_by_waterfill (
74+ screen.size (),
75+ extract_box_reference (screen, m_box),
76+ DialogTriangleMatcher::instance (),
77+ filters,
78+ {min_size, SIZE_MAX},
79+ 80 ,
80+ [](Kernels::Waterfill::WaterfillObject& object) -> bool { return true ; }
81+ );
82+ }
83+
84+
85+
86+
87+
88+ #if 0
89+
90+
91+ DialogTriangleWatcher::DialogTriangleWatcher(
5792 Logger& logger, VideoOverlay& overlay,
5893 bool stop_on_detected
5994)
60- : VisualInferenceCallback(" DialogTriangleDetector " )
95+ : VisualInferenceCallback("DialogTriangleWatcher ")
6196 , m_logger(logger)
6297 , m_stop_on_detected(stop_on_detected)
6398{}
6499
65100
66- void DialogTriangleDetector ::make_overlays (VideoOverlaySet& items) const {
101+ void DialogTriangleWatcher ::make_overlays(VideoOverlaySet& items) const{
67102 items.add(COLOR_RED, BLACK_TRIANGLE_BOX);
68103}
69- bool DialogTriangleDetector ::process_frame (const ImageViewRGB32& frame, WallClock timestamp){
104+ bool DialogTriangleWatcher ::process_frame(const ImageViewRGB32& frame, WallClock timestamp){
70105 const std::vector<std::pair<uint32_t, uint32_t>> filters = {
71106 {combine_rgb(0, 0, 0), combine_rgb(50, 50, 50)}
72107 };
@@ -100,7 +135,7 @@ bool DialogTriangleDetector::process_frame(const ImageViewRGB32& frame, WallCloc
100135 return detected && m_stop_on_detected;
101136}
102137
103-
138+ # endif
104139
105140
106141
0 commit comments