Skip to content

Commit 8914b83

Browse files
committed
Fix action farmer.
1 parent dc73704 commit 8914b83

File tree

2 files changed

+48
-19
lines changed

2 files changed

+48
-19
lines changed

SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_AuctionFarmer.cpp

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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
434458
void 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

SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_AuctionFarmer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class AuctionFarmer : public SingleSwitchProgramInstance{
5151
SectionDividerOption m_advanced_options;
5252
BooleanCheckBoxOption ONE_NPC;
5353

54-
std::vector<ImageFloatBox> detect_dialog_boxes(const ImageViewRGB32& screen);
54+
std::vector<ImagePixelBox> detect_dialog_boxes(const ImageViewRGB32& screen);
5555
void reset_auctions(SingleSwitchProgramEnvironment& env, BotBaseContext& context, bool do_full_reset, uint8_t& year);
5656
std::vector<std::pair<AuctionOffer, ImageFloatBox>> check_offers(SingleSwitchProgramEnvironment& env, BotBaseContext& context);
5757
void move_to_auctioneer(SingleSwitchProgramEnvironment& env, BotBaseContext& context, AuctionOffer wanted);

0 commit comments

Comments
 (0)