1
0
mirror of https://github.com/TheFunny/ArisuAutoSweeper synced 2025-12-16 22:05:12 +00:00
ArisuAutoSweeper/tasks/schedule/ui.py
2024-01-15 19:25:15 +08:00

93 lines
3.4 KiB
Python

import numpy as np
from module.base.decorator import Config
from module.base.timer import Timer
from module.logger import logger
from module.ocr.ocr import DigitCounter
from tasks.base.assets.assets_base_page import SCHEDULE_CHECK
from tasks.base.ui import UI
from tasks.schedule.assets.assets_schedule import *
from tasks.schedule.scroll_select import ScrollSelect
SCROLL_SELECT = ScrollSelect(window_button=SCROLL, first_item_button=FIRST_ITEM, expected_button=LOCATIONS, clickx=1116)
xs = np.linspace(299, 995, 3, dtype=int)
ys = np.linspace(268, 573, 3, dtype=int)
class ScheduleUI(UI):
@Config.when(Emulator_GameLanguage='jp')
def set_clickx(self):
SCROLL_SELECT.clickx = 1114
@Config.when(Emulator_GameLanguage=None)
def set_clickx(self):
pass
def select_then_check(self, dest_enter: ButtonWrapper, dest_check: ButtonWrapper):
timer = Timer(8, 10).start()
while 1:
self.device.screenshot()
self.appear_then_click(dest_enter, interval=1)
if self.handle_affection_level_up() or self.handle_location_level_up():
timer.reset()
if self.appear(dest_check):
return True
if timer.reached():
return False
def click_then_check(self, coords, dest_check: ButtonWrapper):
click_coords = self.device.click_methods.get(self.config.Emulator_ControlMethod, self.device.click_adb)
timer = Timer(3, 2).start()
wait = Timer(1).start()
while 1:
click_coords(*coords)
self.device.screenshot()
if self.appear_then_click(dest_check):
return True
while not wait.reached_and_reset():
pass
if timer.reached():
return False
def enter_location(self, location):
SCROLL_SELECT.select_location(self, location)
if not self.appear(LOCATIONS):
logger.error("Unable to navigate to page for location {}".format(location + 1))
return False
return self.select_then_check(LOCATIONS, LOCATIONS_POPUP)
def select_classrooms(self, ticket, classrooms):
for classroom in classrooms:
if ticket == 0:
return False
classroom = int(classroom) - 1
col = int(classroom % len(xs))
row = int((classroom - col) / len(ys))
targetloc = (xs[col], ys[row])
if not self.click_then_check(targetloc, START_LESSON):
logger.info(f"Classroom {classroom + 1} does not exist or has already been clicked")
continue
if self.select_then_check(START_LESSON, CONFIRM):
ticket -= 1
if not self.select_then_check(CONFIRM, LOCATIONS_POPUP):
logger.error(f"An unexpected error occurred. Skipping location")
break
return True
def get_ticket(self):
"""
Page:
in: page_bounty
"""
if not self.appear(SCHEDULE_CHECK):
logger.warning('OCR failed due to invalid page')
return False
ticket, _, total = DigitCounter(OCR_TICKET).ocr_single_line(self.device.image)
if total == 0:
logger.warning('Invalid ticket')
return False
logger.attr('ScheduleTicket', ticket)
# self.config.stored.BountyTicket.set(ticket)
return ticket