1
0
mirror of https://github.com/TheFunny/ArisuAutoSweeper synced 2025-12-17 00:15:13 +00:00

refactor(tc): separate ui operation

This commit is contained in:
YoursFunny 2023-11-20 22:10:40 +08:00
parent 8e29d7d2c0
commit e929a1efb1
Signed by: YoursFunny
GPG Key ID: 207EDC3CD5B40F9C
2 changed files with 60 additions and 54 deletions

View File

@ -3,15 +3,9 @@ from enum import Enum
from module.base.timer import Timer from module.base.timer import Timer
from module.logger import logger 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.page import page_tactical_challenge
from tasks.base.ui import UI
from tasks.tactical_challenge.assets.assets_tactical_challenge import * from tasks.tactical_challenge.assets.assets_tactical_challenge import *
from tasks.tactical_challenge.ui import TacticalChallengeUI
SWITCH_SKIP = Switch('Skip_switch')
SWITCH_SKIP.add_state('on', SKIP_ON)
SWITCH_SKIP.add_state('off', SKIP_OFF)
class TCStatus(Enum): class TCStatus(Enum):
@ -31,51 +25,9 @@ class TCStatus(Enum):
FINISHED = -1 FINISHED = -1
class TacticalChallenge(UI): class TacticalChallenge(TacticalChallengeUI):
select_players = (PLAYER_SELECT_FIRST, PLAYER_SELECT_SECOND, PLAYER_SELECT_THIRD) 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): def _player_select(self, select):
if select: if select:
return random.choice(self.select_players) return random.choice(self.select_players)
@ -85,10 +37,10 @@ class TacticalChallenge(UI):
def _handle_challenge(self, status): def _handle_challenge(self, status):
match status: match status:
case TCStatus.REWARD: case TCStatus.REWARD:
if self._get_reward(): if self.get_reward():
return TCStatus.OCR return TCStatus.OCR
case TCStatus.OCR: case TCStatus.OCR:
is_valid, ticket = self._get_ticket() is_valid, ticket = self.get_ticket()
if not is_valid: if not is_valid:
return status return status
if ticket == 0: if ticket == 0:
@ -103,7 +55,7 @@ class TacticalChallenge(UI):
if not self.appear(PREPARE_CHALLENGE): if not self.appear(PREPARE_CHALLENGE):
return TCStatus.SKIP return TCStatus.SKIP
case TCStatus.SKIP: case TCStatus.SKIP:
if not self._set_skip(): if not self.set_skip():
return TCStatus.SKIP return TCStatus.SKIP
return TCStatus.START return TCStatus.START
case TCStatus.START: case TCStatus.START:
@ -118,7 +70,7 @@ class TacticalChallenge(UI):
case TCStatus.WIN | TCStatus.LOSE: case TCStatus.WIN | TCStatus.LOSE:
if self.appear_then_click(CHALLENGE_WIN) or self.appear_then_click(CHALLENGE_LOSE): if self.appear_then_click(CHALLENGE_WIN) or self.appear_then_click(CHALLENGE_LOSE):
return status return status
is_valid, ticket = self._get_ticket() is_valid, ticket = self.get_ticket()
if not is_valid: if not is_valid:
return status return status
if ticket == 0: if ticket == 0:

View File

@ -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