diff --git a/tasks/tactical_challenge/tactical_challenge.py b/tasks/tactical_challenge/tactical_challenge.py index 6250eb9..4be5a17 100644 --- a/tasks/tactical_challenge/tactical_challenge.py +++ b/tasks/tactical_challenge/tactical_challenge.py @@ -3,15 +3,9 @@ from enum import Enum from module.base.timer import Timer from module.logger import logger -from module.ocr.ocr import DigitCounter -from module.ui.switch import Switch from tasks.base.page import page_tactical_challenge -from tasks.base.ui import UI from tasks.tactical_challenge.assets.assets_tactical_challenge import * - -SWITCH_SKIP = Switch('Skip_switch') -SWITCH_SKIP.add_state('on', SKIP_ON) -SWITCH_SKIP.add_state('off', SKIP_OFF) +from tasks.tactical_challenge.ui import TacticalChallengeUI class TCStatus(Enum): @@ -31,51 +25,9 @@ class TCStatus(Enum): FINISHED = -1 -class TacticalChallenge(UI): +class TacticalChallenge(TacticalChallengeUI): select_players = (PLAYER_SELECT_FIRST, PLAYER_SELECT_SECOND, PLAYER_SELECT_THIRD) - def _get_ticket(self): - """ - Page: - in: page_tactical_challenge - """ - ocr = DigitCounter(OCR_TICKET).ocr_single_line(self.device.image) - # number of tickets remaining - ticket, _, total = ocr - if total == 0: - logger.warning('Invalid ticket') - return False, 5 - logger.attr('Ticket', ticket) - - return True, ticket - - def _get_reward(self): - if self.match_color(GET_REWARD_DAILY): - self.device.click(GET_REWARD_DAILY) - logger.info('Get tc daily reward') - return True - if self.match_color(GET_REWARD_CREDIT): - self.device.click(GET_REWARD_CREDIT) - logger.info('Get tc credit reward') - return True - if self.match_color(GOT_REWARD_DAILY) and self.match_color(GOT_REWARD_CREDIT): - logger.info('Both tc reward got') - return True - - return False - - def _set_skip(self): - """ - Set skip switch to on - :returns: True if switch is set, False if switch not found - """ - if not SWITCH_SKIP.appear(main=self): - logger.info('Skip switch not found') - return False - SWITCH_SKIP.set('on', main=self) - - return True - def _player_select(self, select): if select: return random.choice(self.select_players) @@ -85,10 +37,10 @@ class TacticalChallenge(UI): def _handle_challenge(self, status): match status: case TCStatus.REWARD: - if self._get_reward(): + if self.get_reward(): return TCStatus.OCR case TCStatus.OCR: - is_valid, ticket = self._get_ticket() + is_valid, ticket = self.get_ticket() if not is_valid: return status if ticket == 0: @@ -103,7 +55,7 @@ class TacticalChallenge(UI): if not self.appear(PREPARE_CHALLENGE): return TCStatus.SKIP case TCStatus.SKIP: - if not self._set_skip(): + if not self.set_skip(): return TCStatus.SKIP return TCStatus.START case TCStatus.START: @@ -118,7 +70,7 @@ class TacticalChallenge(UI): case TCStatus.WIN | TCStatus.LOSE: if self.appear_then_click(CHALLENGE_WIN) or self.appear_then_click(CHALLENGE_LOSE): return status - is_valid, ticket = self._get_ticket() + is_valid, ticket = self.get_ticket() if not is_valid: return status if ticket == 0: diff --git a/tasks/tactical_challenge/ui.py b/tasks/tactical_challenge/ui.py new file mode 100644 index 0000000..692fe33 --- /dev/null +++ b/tasks/tactical_challenge/ui.py @@ -0,0 +1,54 @@ +from module.logger import logger +from module.ocr.ocr import DigitCounter +from module.ui.switch import Switch +from tasks.base.ui import UI +from tasks.tactical_challenge.assets.assets_tactical_challenge import * + +SWITCH_SKIP = Switch('Skip_switch') +SWITCH_SKIP.add_state('on', SKIP_ON) +SWITCH_SKIP.add_state('off', SKIP_OFF) + + +class TacticalChallengeUI(UI): + def get_ticket(self): + """ + Page: + in: page_tactical_challenge + """ + ocr = DigitCounter(OCR_TICKET).ocr_single_line(self.device.image) + # number of tickets remaining + ticket, _, total = ocr + if total == 0: + logger.warning('Invalid ticket') + return False, 5 + logger.attr('Ticket', ticket) + + return True, ticket + + def get_reward(self): + if self.match_color(GET_REWARD_DAILY): + self.device.click(GET_REWARD_DAILY) + logger.info('Get tc daily reward') + return True + if self.match_color(GET_REWARD_CREDIT): + self.device.click(GET_REWARD_CREDIT) + logger.info('Get tc credit reward') + return True + if self.match_color(GOT_REWARD_DAILY) and self.match_color(GOT_REWARD_CREDIT): + logger.info('Both tc reward got') + return True + + return False + + def set_skip(self): + """ + Set skip switch to on + Returns: + True if switch is set, False if switch not found + """ + if not SWITCH_SKIP.appear(main=self): + logger.info('Skip switch not found') + return False + SWITCH_SKIP.set('on', main=self) + + return True