From 956d24f6271102408bf5f818f0a61719c4b5ace1 Mon Sep 17 00:00:00 2001 From: guoh064 <50830808+guoh064@users.noreply.github.com> Date: Sun, 14 Jun 2026 00:20:19 +0800 Subject: [PATCH] Add: Island UI base --- assets/cn/island/ISLAND_CLICK_SAFE_AREA.png | Bin 0 -> 7040 bytes assets/cn/island/ISLAND_LEVEL_UP.png | Bin 0 -> 9008 bytes .../ui_white/POPUP_CONFIRM_WHITE_ISLAND.png | Bin 0 -> 8612 bytes .../ui_white/POPUP_CONFIRM_WHITE_ISLAND.png | Bin 0 -> 8724 bytes module/island/assets.py | 8 ++ module/island/ui.py | 123 ++++++++++++++++++ module/ui_white/assets.py | 1 + 7 files changed, 132 insertions(+) create mode 100644 assets/cn/island/ISLAND_CLICK_SAFE_AREA.png create mode 100644 assets/cn/island/ISLAND_LEVEL_UP.png create mode 100644 assets/cn/ui_white/POPUP_CONFIRM_WHITE_ISLAND.png create mode 100644 assets/jp/ui_white/POPUP_CONFIRM_WHITE_ISLAND.png create mode 100644 module/island/assets.py create mode 100644 module/island/ui.py diff --git a/assets/cn/island/ISLAND_CLICK_SAFE_AREA.png b/assets/cn/island/ISLAND_CLICK_SAFE_AREA.png new file mode 100644 index 0000000000000000000000000000000000000000..f1eadcba7d73dc0a12d5b995289d45bc3f6e839b GIT binary patch literal 7040 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 0).sum(axis=1) + candidate_rows = row_white_width > threshold + min_continuous_height = 50 + count = 0 + for ok in candidate_rows: + if ok: + count += 1 + if count >= min_continuous_height: + return True + else: + count = 0 + return False + + def handle_island_get_items(self): + if self.appear(GET_ITEMS_1, offset=(20, 20), interval=3): + self.device.click(ISLAND_CLICK_SAFE_AREA) + return True + if self.has_white_band(): + self.device.click(ISLAND_CLICK_SAFE_AREA) + return True + return False + + def handle_island_level_up(self): + if self.appear(ISLAND_LEVEL_UP, offset=(20, 20), interval=3): + self.device.click(ISLAND_CLICK_SAFE_AREA) + return True + return False + + def handle_island_popup_confirm(self, name='', offset=None, interval=2): + if offset is None: + offset = self._popup_offset + if self.appear(POPUP_CONFIRM_WHITE_ISLAND, offset=offset, interval=interval): + POPUP_CONFIRM_WHITE_ISLAND.name = POPUP_CONFIRM_WHITE_ISLAND.name + '_' + name + self.device.click(POPUP_CONFIRM_WHITE_ISLAND) + POPUP_CONFIRM_WHITE_ISLAND.name = POPUP_CONFIRM_WHITE_ISLAND.name[:-len(name) - 1] + return True + return False + + def handle_island_additional(self): + if self.handle_island_get_items(): + return True + if self.handle_island_level_up(): + return True + return False + + def is_button_selected(self, button, color=(57, 189, 255), threshold=221, count=100): + """ + Detects if the button is surrounded by a blue border, + which indicates that the button is chosen. + + Args: + button (Button, tuple): Button instance or area. + + Returns: + bool: True if the button is chosen, False otherwise. + """ + if isinstance(button, np.ndarray): + image = button + else: + image = self.image_crop(button, copy=False) + mask = color_similarity_2d(image, color) + cv2.inRange(mask, threshold, 255, dst=mask) + mask[2:-2, 2:-2] = 0 + sum_ = cv2.countNonZero(mask) + return sum_ > count + + @cached_property + def _island_manage_side_navbar(self): + island_manage_side_navbar = ButtonGrid( + origin=(13, 107), delta=(0, 196/3), + button_shape=(128, 43), grid_shape=(1, 3) + ) + return Navbar(grids=island_manage_side_navbar, + active_color=(57, 189, 255), + inactive_color=(50, 52, 55), + active_count=500, + inactive_count=500) + + def island_manage_side_navbar_ensure(self, upper=1, skip_first_screenshot=True): + """ + Args: + upper (int): + 1 for production, + 2 for restaurant, + 3 for collect + bottom (int): + 1 for collect, + 2 for restaurant, + 3 for production + """ + return self._island_manage_side_navbar.set(self, upper=upper, skip_first_screenshot=skip_first_screenshot) \ No newline at end of file diff --git a/module/ui_white/assets.py b/module/ui_white/assets.py index 49d1087f2..cc392fe83 100644 --- a/module/ui_white/assets.py +++ b/module/ui_white/assets.py @@ -27,6 +27,7 @@ MISSION_NOTICE_WHITE = Button(area={'cn': (923, 657, 947, 671), 'en': (923, 657, POPUP_CANCEL_WHITE = Button(area={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, color={'cn': (214, 214, 214), 'en': (205, 206, 205), 'jp': (202, 203, 202), 'tw': (214, 214, 214)}, button={'cn': (487, 491, 531, 513), 'en': (471, 492, 547, 513), 'jp': (481, 490, 534, 516), 'tw': (487, 491, 531, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png', 'en': './assets/en/ui_white/POPUP_CANCEL_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CANCEL_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_CANCEL_WHITE.png'}) POPUP_CONFIRM_WHITE = Button(area={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, color={'cn': (133, 216, 255), 'en': (107, 207, 255), 'jp': (109, 207, 255), 'tw': (111, 207, 249)}, button={'cn': (746, 494, 791, 515), 'en': (727, 495, 810, 515), 'jp': (743, 491, 796, 518), 'tw': (744, 491, 794, 518)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE.png', 'en': './assets/en/ui_white/POPUP_CONFIRM_WHITE.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE.png', 'tw': './assets/tw/ui_white/POPUP_CONFIRM_WHITE.png'}) POPUP_CONFIRM_WHITE_BATTLEPASS = Button(area={'cn': (744, 490, 795, 513), 'en': (721, 492, 818, 510), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, color={'cn': (119, 211, 255), 'en': (149, 221, 255), 'jp': (103, 206, 255), 'tw': (119, 211, 255)}, button={'cn': (744, 490, 795, 513), 'en': (721, 492, 818, 510), 'jp': (739, 488, 800, 515), 'tw': (744, 490, 795, 513)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'en': './assets/en/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_BATTLEPASS.png'}) +POPUP_CONFIRM_WHITE_ISLAND = Button(area={'cn': (767, 496, 819, 523), 'en': (767, 496, 819, 523), 'jp': (767, 495, 820, 523), 'tw': (767, 496, 819, 523)}, color={'cn': (108, 206, 255), 'en': (108, 206, 255), 'jp': (108, 208, 255), 'tw': (108, 206, 255)}, button={'cn': (767, 496, 819, 523), 'en': (767, 496, 819, 523), 'jp': (767, 495, 820, 523), 'tw': (767, 496, 819, 523)}, file={'cn': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_ISLAND.png', 'en': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_ISLAND.png', 'jp': './assets/jp/ui_white/POPUP_CONFIRM_WHITE_ISLAND.png', 'tw': './assets/cn/ui_white/POPUP_CONFIRM_WHITE_ISLAND.png'}) POPUP_SINGLE_WHITE = Button(area={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, color={'cn': (131, 215, 255), 'en': (131, 215, 255), 'jp': (131, 215, 255), 'tw': (131, 215, 255)}, button={'cn': (623, 493, 668, 515), 'en': (623, 493, 668, 515), 'jp': (623, 493, 668, 515), 'tw': (623, 493, 668, 515)}, file={'cn': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'en': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'jp': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png', 'tw': './assets/cn/ui_white/POPUP_SINGLE_WHITE.png'}) REWARD_1_WHITE = Button(area={'cn': (437, 278, 496, 296), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, color={'cn': (255, 193, 97), 'en': (255, 212, 150), 'jp': (255, 195, 101), 'tw': (255, 199, 111)}, button={'cn': (437, 278, 496, 296), 'en': (411, 283, 523, 300), 'jp': (442, 279, 491, 305), 'tw': (441, 280, 490, 306)}, file={'cn': './assets/cn/ui_white/REWARD_1_WHITE.png', 'en': './assets/en/ui_white/REWARD_1_WHITE.png', 'jp': './assets/jp/ui_white/REWARD_1_WHITE.png', 'tw': './assets/tw/ui_white/REWARD_1_WHITE.png'}) REWARD_2_WHITE = Button(area={'cn': (436, 419, 497, 448), 'en': (411, 425, 523, 442), 'jp': (442, 421, 492, 446), 'tw': (439, 422, 490, 448)}, color={'cn': (255, 192, 94), 'en': (255, 212, 146), 'jp': (255, 196, 103), 'tw': (255, 198, 109)}, button={'cn': (436, 419, 497, 448), 'en': (411, 425, 523, 442), 'jp': (442, 421, 492, 446), 'tw': (439, 422, 490, 448)}, file={'cn': './assets/cn/ui_white/REWARD_2_WHITE.png', 'en': './assets/en/ui_white/REWARD_2_WHITE.png', 'jp': './assets/jp/ui_white/REWARD_2_WHITE.png', 'tw': './assets/tw/ui_white/REWARD_2_WHITE.png'})