1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-03-09 13:59:02 +08:00
AzurLaneAutoScript/module/island/ui.py

203 lines
5.9 KiB
Python
Raw Normal View History

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 *
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
2026-02-17 20:58:33 +08:00
def island_in_friend(self, interval=0):
"""
Args:
interval (int):
Returns:
bool: if in page ISLAND_FRIEND_CHECK
"""
return self.appear(ISLAND_FRIEND_CHECK, offset=(20, 20), interval=interval)
2025-10-04 22:26:48 +08:00
def island_management_enter(self):
"""
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
"""
logger.info('Island management enter')
2025-10-04 22:26:48 +08:00
self.interval_clear(ISLAND_MANAGEMENT_CHECK)
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
)
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.
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
2026-02-17 20:58:33 +08:00
def island_friend_enter(self):
"""
Enter island friend page.
Returns:
bool: if success
Pages:
in: page_island_phone
out: ISLAND_FRIEND_CHECK
"""
logger.info('Island friend enter')
self.ui_click(
click_button=ISLAND_FRIEND,
check_button=self.island_in_friend,
offset=(20, 20),
retry_wait=2,
skip_first_screenshot=True
)
return True
2025-10-14 22:44:08 +08:00
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,
2026-02-17 20:58:33 +08:00
check_button=[page_island_phone.check_button, ISLAND_FRIEND_LEAVE],
2025-10-04 22:26:48 +08:00
offset=(20, 20),
retry_wait=2,
skip_first_screenshot=True
)
2026-02-08 23:06:50 +08:00
def ui_ensure_management_page(self):
"""
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():
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
2026-02-17 20:58:33 +08:00
def ui_ensure_friend_page(self):
"""
Pages:
in: Any
out: ISLAND_FRIEND_CHECK
"""
logger.info('UI ensure friend page')
if not self.island_in_friend():
self.ui_ensure(page_island_phone)
self.island_friend_enter()
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)
2026-02-17 20:58:33 +08:00
def move_up(self, hold_time=0):
p1 = (217, 507)
p2 = (217, 507 - 36)
self.device.swipe(p1, p2, hold_time=hold_time)
def move_down(self, hold_time=0):
p1 = (217, 507)
p2 = (217, 507 + 36)
self.device.swipe(p1, p2, hold_time=hold_time)
def move_left(self, hold_time=0):
p1 = (217, 507)
p2 = (217 - 36, 507)
self.device.swipe(p1, p2, hold_time=hold_time)
def move_right(self, hold_time=0):
p1 = (217, 507)
p2 = (217 + 36, 507)
self.device.swipe(p1, p2, hold_time=hold_time)