2025-10-13 03:38:43 +08:00
|
|
|
from module.base.timer import Timer
|
2025-11-08 01:48:45 +08:00
|
|
|
from module.handler.assets import MAINTENANCE_ANNOUNCE, USE_DATA_KEY_NOTIFIED
|
2025-10-04 22:26:48 +08:00
|
|
|
from module.island.assets import *
|
2025-10-13 03:38:43 +08:00
|
|
|
from module.logger import logger
|
2026-02-08 23:06:50 +08:00
|
|
|
from module.ui.assets import SHOP_BACK_ARROW
|
|
|
|
|
from module.ui.page import page_island_phone
|
2025-10-04 22:26:48 +08:00
|
|
|
from module.ui.ui import UI
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IslandUI(UI):
|
|
|
|
|
def island_in_management(self, interval=0):
|
|
|
|
|
"""
|
|
|
|
|
Args:
|
|
|
|
|
interval (int):
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
bool: if in page ISLAND_MANAGEMENT_CHECK
|
|
|
|
|
"""
|
|
|
|
|
return self.appear(ISLAND_MANAGEMENT_CHECK, offset=(20, 20), interval=interval)
|
|
|
|
|
|
2025-10-14 22:44:08 +08:00
|
|
|
def island_in_transport(self, interval=0):
|
|
|
|
|
"""
|
|
|
|
|
Args:
|
|
|
|
|
interval (int):
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
bool: if in page ISLAND_TRANSPORT_CHECK
|
|
|
|
|
"""
|
2025-10-15 13:20:23 +08:00
|
|
|
return self.match_template_color(ISLAND_TRANSPORT_CHECK, offset=(20, 20), interval=interval)
|
2025-10-14 22:44:08 +08:00
|
|
|
|
2025-10-04 22:26:48 +08:00
|
|
|
def island_management_enter(self):
|
|
|
|
|
"""
|
2025-10-14 21:06:52 +08:00
|
|
|
Enter island management page.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
bool: if success
|
|
|
|
|
|
2025-10-04 22:26:48 +08:00
|
|
|
Pages:
|
|
|
|
|
in: page_island_phone
|
|
|
|
|
out: ISLAND_MANAGEMENT_CHECK
|
|
|
|
|
"""
|
2025-10-13 03:38:43 +08:00
|
|
|
logger.info('Island management enter')
|
2025-10-04 22:26:48 +08:00
|
|
|
self.interval_clear(ISLAND_MANAGEMENT_CHECK)
|
2025-10-14 21:06:52 +08:00
|
|
|
if self.appear(ISLAND_MANAGEMENT_LOCKED, offset=(20, 20)):
|
|
|
|
|
return False
|
2025-10-04 22:26:48 +08:00
|
|
|
self.ui_click(
|
|
|
|
|
click_button=ISLAND_MANAGEMENT,
|
|
|
|
|
check_button=self.island_in_management,
|
|
|
|
|
offset=(20, 20),
|
|
|
|
|
retry_wait=2,
|
|
|
|
|
skip_first_screenshot=True
|
|
|
|
|
)
|
2025-10-14 21:06:52 +08:00
|
|
|
return True
|
2025-10-04 22:26:48 +08:00
|
|
|
|
2025-10-14 22:44:08 +08:00
|
|
|
def island_transport_enter(self):
|
2025-10-04 22:26:48 +08:00
|
|
|
"""
|
2025-10-14 22:44:08 +08:00
|
|
|
Enter island management page.
|
2025-10-14 21:06:52 +08:00
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
bool: if success
|
|
|
|
|
|
2025-10-04 22:26:48 +08:00
|
|
|
Pages:
|
2025-10-14 22:44:08 +08:00
|
|
|
in: page_island_phone
|
|
|
|
|
out: ISLAND_MANAGEMENT_CHECK
|
|
|
|
|
"""
|
|
|
|
|
logger.info('Island transport enter')
|
|
|
|
|
self.ui_click(
|
|
|
|
|
click_button=ISLAND_TRANSPORT,
|
|
|
|
|
check_button=self.island_in_transport,
|
|
|
|
|
offset=(20, 20),
|
|
|
|
|
retry_wait=2,
|
|
|
|
|
skip_first_screenshot=True
|
|
|
|
|
)
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def island_ui_back(self):
|
|
|
|
|
"""
|
|
|
|
|
Pages:
|
|
|
|
|
in: any page with SHOP_BACK_ARROW
|
2025-10-04 22:26:48 +08:00
|
|
|
out: page_island_phone
|
|
|
|
|
"""
|
2025-10-14 22:44:08 +08:00
|
|
|
logger.info('Island UI back')
|
2025-10-04 22:26:48 +08:00
|
|
|
self.ui_click(
|
|
|
|
|
click_button=SHOP_BACK_ARROW,
|
|
|
|
|
check_button=page_island_phone.check_button,
|
|
|
|
|
offset=(20, 20),
|
|
|
|
|
retry_wait=2,
|
|
|
|
|
skip_first_screenshot=True
|
|
|
|
|
)
|
|
|
|
|
|
2026-02-08 23:06:50 +08:00
|
|
|
def ui_ensure_management_page(self):
|
2025-10-13 03:38:43 +08:00
|
|
|
"""
|
|
|
|
|
Pages:
|
|
|
|
|
in: page_island_phone or product page
|
|
|
|
|
out: ISLAND_MANAGEMENT_CHECK
|
|
|
|
|
"""
|
|
|
|
|
logger.info('UI ensure management page')
|
|
|
|
|
self.interval_clear(ISLAND_MANAGEMENT_CHECK)
|
|
|
|
|
confirm_timer = Timer(1, count=2).start()
|
2026-02-08 23:06:50 +08:00
|
|
|
for _ in self.loop():
|
2025-10-13 03:38:43 +08:00
|
|
|
if self.island_in_management():
|
|
|
|
|
if confirm_timer.reached():
|
|
|
|
|
break
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
confirm_timer.reset()
|
|
|
|
|
|
|
|
|
|
if self.appear_then_click(SHOP_BACK_ARROW, offset=(20, 20), interval=2):
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if self.appear_then_click(ISLAND_MANAGEMENT, offset=(20, 20), interval=2):
|
|
|
|
|
continue
|
2025-10-15 13:20:23 +08:00
|
|
|
|
|
|
|
|
def handle_get_items(self):
|
|
|
|
|
if self.appear_then_click(GET_ITEMS_ISLAND, offset=(20, 20), interval=2):
|
|
|
|
|
return True
|
|
|
|
|
return False
|
2025-11-08 01:48:45 +08:00
|
|
|
|
2026-02-08 23:06:50 +08:00
|
|
|
def ui_additional(self, get_ship=True):
|
|
|
|
|
# notify in page_dormmenu
|
|
|
|
|
if self.appear(MAINTENANCE_ANNOUNCE, offset=(100, 50)):
|
|
|
|
|
for _ in self.loop():
|
|
|
|
|
enabled = self.image_color_count(
|
|
|
|
|
USE_DATA_KEY_NOTIFIED, color=(140, 207, 66), threshold=180, count=10)
|
|
|
|
|
if enabled:
|
|
|
|
|
break
|
2025-11-08 01:48:45 +08:00
|
|
|
|
2026-02-08 23:06:50 +08:00
|
|
|
if self.appear(MAINTENANCE_ANNOUNCE, offset=(100, 50), interval=5):
|
|
|
|
|
self.device.click(USE_DATA_KEY_NOTIFIED)
|
|
|
|
|
continue
|
2025-11-08 01:48:45 +08:00
|
|
|
|
2026-02-08 23:06:50 +08:00
|
|
|
self.interval_clear(MAINTENANCE_ANNOUNCE)
|
|
|
|
|
self.appear_then_click(MAINTENANCE_ANNOUNCE, offset=(100, 50), interval=2)
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
# info in page_island
|
|
|
|
|
if self.appear_then_click(ISLAND_INFO_EXIT, offset=(30, 30), interval=3):
|
2025-11-08 01:48:45 +08:00
|
|
|
return True
|
|
|
|
|
|
2026-02-08 23:06:50 +08:00
|
|
|
return super().ui_additional(get_ship=False)
|