@@ -105,7 +105,7 @@ AuctionFarmer::AuctionFarmer()
105105}
106106
107107
108- std::vector<ImageFloatBox > AuctionFarmer::detect_dialog_boxes (const ImageViewRGB32& screen){
108+ std::vector<ImagePixelBox > AuctionFarmer::detect_dialog_boxes (const ImageViewRGB32& screen){
109109 using namespace Kernels ::Waterfill;
110110
111111 uint32_t MIN_BORDER_THRESHOLD = 0xffc07000 ;
@@ -118,7 +118,7 @@ std::vector<ImageFloatBox> AuctionFarmer::detect_dialog_boxes(const ImageViewRGB
118118 size_t height = screen.height ();
119119
120120
121- std::vector<ImageFloatBox > dialog_boxes;
121+ std::vector<ImagePixelBox > dialog_boxes;
122122 {
123123 PackedBinaryMatrix border_matrix = compress_rgb32_to_binary_range (screen, MIN_BORDER_THRESHOLD, MAX_BORDER_THRESHOLD);
124124
@@ -134,12 +134,16 @@ std::vector<ImageFloatBox> AuctionFarmer::detect_dialog_boxes(const ImageViewRGB
134134 ){
135135 continue ;
136136 }
137+ dialog_boxes.emplace_back (object);
137138
139+ // static int c = 0;
140+ // extract_box_reference(screen, object).save("image-" + std::to_string(c++) + ".png");
141+
142+ #if 1
138143 // check for yellow inside the orange border
139144 ImagePixelBox border_pixel_box (object);
140- ImageFloatBox border_float_box = pixelbox_to_floatbox (screen, border_pixel_box);
145+ // ImageFloatBox border_float_box = pixelbox_to_floatbox(screen, border_pixel_box);
141146 ImageViewRGB32 dialog = extract_box_reference (screen, border_pixel_box);
142-
143147 PackedBinaryMatrix yellow_matrix = compress_rgb32_to_binary_range (dialog, MIN_YELLOW_THRESHOLD, MAX_YELLOW_THRESHOLD);
144148
145149 std::unique_ptr<WaterfillSession> yellow_session = make_WaterfillSession (yellow_matrix);
@@ -150,11 +154,21 @@ std::vector<ImageFloatBox> AuctionFarmer::detect_dialog_boxes(const ImageViewRGB
150154 if (object.width () < width * 0.0925 || object.height () < height * 0.0925 ){
151155 continue ;
152156 }
153- ImagePixelBox dialog_pixel_box (yellow_object);
157+
158+ // extract_box_reference(dialog, yellow_object).save("yellow-" + std::to_string(c++) + ".png");
159+
160+ // ImagePixelBox dialog_pixel_box(yellow_object);
161+ ImagePixelBox dialog_pixel_box;
162+ dialog_pixel_box.min_x = border_pixel_box.min_x + yellow_object.min_x ;
163+ dialog_pixel_box.min_y = border_pixel_box.min_y + yellow_object.min_y ;
164+ dialog_pixel_box.max_x = dialog_pixel_box.min_x + yellow_object.width ();
165+ dialog_pixel_box.max_y = dialog_pixel_box.min_y + yellow_object.height ();
154166
155- ImageFloatBox translated_dialog_box = translate_to_parent (screen, border_float_box, dialog_pixel_box);
156- dialog_boxes.emplace_back (translated_dialog_box);
167+ // ImageFloatBox translated_dialog_box = translate_to_parent(screen, border_float_box, dialog_pixel_box);
168+ // dialog_boxes.emplace_back(translated_dialog_box);
169+ dialog_boxes.emplace_back (dialog_pixel_box);
157170 }
171+ #endif
158172 }
159173 }
160174 return dialog_boxes;
@@ -193,7 +207,9 @@ std::vector<std::pair<AuctionOffer, ImageFloatBox>> AuctionFarmer::check_offers(
193207 context.wait_for_all_requests ();
194208
195209 VideoSnapshot screen = env.console .video ().snapshot ();
196- std::vector<ImageFloatBox> dialog_boxes = detect_dialog_boxes (screen);
210+ std::vector<ImagePixelBox> dialog_boxes = detect_dialog_boxes (screen);
211+ std::deque<OverlayBoxScope> bubbles_boxes;
212+ std::deque<OverlayBoxScope> offer_boxes;
197213 std::vector<std::pair<AuctionOffer, ImageFloatBox>> offers;
198214
199215 if (dialog_boxes.empty ()){
@@ -202,28 +218,35 @@ std::vector<std::pair<AuctionOffer, ImageFloatBox>> AuctionFarmer::check_offers(
202218 }
203219
204220 // read dialog bubble
205- for (ImageFloatBox dialog_box : dialog_boxes){
221+ for (ImagePixelBox dialog_box : dialog_boxes){
206222// std::cout << "dialog_box: ["
207- // << dialog_box.x << "," << dialog_box.y << "] - ["
208- // << dialog_box.width << "," << dialog_box.height << "]" << std::endl;
223+ // << dialog_box.min_x << "," << dialog_box.min_y << "] - ["
224+ // << dialog_box.max_x << "," << dialog_box.max_y << "]" << std::endl;
225+
226+ ImageFloatBox dialog_float_box = pixelbox_to_floatbox (screen, dialog_box);
227+ bubbles_boxes.emplace_back (env.console , dialog_float_box, COLOR_GREEN);
209228
210- OverlayBoxScope dialog_overlay (env.console , dialog_box, COLOR_DARK_BLUE);
211229
230+ // OverlayBoxScope dialog_overlay(env.console, dialog_box, COLOR_DARK_BLUE);
212231 ImageFloatBox offer_box (0.05 , 0.02 , 0.90 , 0.49 );
213232 ImageFloatBox translated_offer_box = translate_to_parent (
214233 screen,
215- dialog_box,
216- // TODO: Fix these casts as they always go to zero.
217- floatbox_to_pixelbox ((size_t )dialog_box.width , (size_t )dialog_box.height , offer_box)
234+ dialog_float_box,
235+ floatbox_to_pixelbox (dialog_box.width (), dialog_box.height (), offer_box)
218236 );
219237// std::cout << "translated_offer_box: ["
220238// << translated_offer_box.x << "," << translated_offer_box.y << "] - ["
221239// << translated_offer_box.width << "," << translated_offer_box.height << "]" << std::endl;
222- OverlayBoxScope offer_overlay (env.console , translated_offer_box, COLOR_BLUE);
240+
241+ offer_boxes.emplace_back (env.console , translated_offer_box, COLOR_BLUE);
242+
243+ // OverlayBoxScope offer_overlay(env.console, translated_offer_box, COLOR_BLUE);
223244
224245 ImageViewRGB32 dialog = extract_box_reference (screen, dialog_box);
225246 ImageViewRGB32 offer_image = extract_box_reference (dialog, offer_box);
226247
248+ // std::cout << offer_image.width() << " x " << offer_image.height() << std::endl;
249+
227250
228251 const double LOG10P_THRESHOLD = -1.5 ;
229252 std::string best_item;
@@ -240,11 +263,12 @@ std::vector<std::pair<AuctionOffer, ImageFloatBox>> AuctionFarmer::check_offers(
240263 best_item = iter->second .token ;
241264
242265 AuctionOffer offer{ best_item };
243- std::pair<AuctionOffer, ImageFloatBox> pair (offer, dialog_box );
266+ std::pair<AuctionOffer, ImageFloatBox> pair (offer, dialog_float_box );
244267 offers.emplace_back (pair);
245268 }
246269 }
247270 }
271+ context.wait_for (std::chrono::seconds (100 ));
248272 return offers;
249273}
250274
@@ -434,6 +458,11 @@ void AuctionFarmer::bid_on_item(SingleSwitchProgramEnvironment& env, BotBaseCont
434458void AuctionFarmer::program (SingleSwitchProgramEnvironment& env, BotBaseContext& context){
435459 assert_16_9_720p_min (env.logger (), env.console );
436460
461+ #if 0
462+ check_offers(env, context);
463+ return;
464+
465+ #else
437466 AuctionFarmer_Descriptor::Stats& stats = env.current_stats <AuctionFarmer_Descriptor::Stats>();
438467
439468 // Connect the controller.
@@ -501,7 +530,7 @@ void AuctionFarmer::program(SingleSwitchProgramEnvironment& env, BotBaseContext&
501530 context.wait_for_all_requests ();
502531 }
503532 }
504-
533+ # endif
505534}
506535
507536
0 commit comments