1
0
mirror of https://gitee.com/sui-feng-cb/AzurLaneAutoScript1 synced 2026-03-09 18:39:04 +08:00
AzurLaneAutoScript/module/campaign/campaign_ui.py

153 lines
5.4 KiB
Python
Raw Normal View History

2020-03-29 01:22:46 +08:00
from module.campaign.assets import *
from module.campaign.campaign_event import CampaignEvent
from module.campaign.campaign_ocr import CampaignOcr
from module.exception import CampaignNameError, ScriptEnd
2020-03-29 01:22:46 +08:00
from module.logger import logger
from module.ui.assets import CAMPAIGN_CHECK
from module.ui.switch import Switch
2020-03-29 01:22:46 +08:00
MODE_SWITCH_1 = Switch('Mode_switch_1', offset=(30, 10))
MODE_SWITCH_1.add_status('normal', SWITCH_1_NORMAL)
MODE_SWITCH_1.add_status('hard', SWITCH_1_HARD)
MODE_SWITCH_2 = Switch('Mode_switch_2', offset=(30, 10))
MODE_SWITCH_2.add_status('hard', SWITCH_2_HARD)
MODE_SWITCH_2.add_status('ex', SWITCH_2_EX)
2020-03-29 01:22:46 +08:00
class CampaignUI(CampaignEvent, CampaignOcr):
ENTRANCE = Button(area=(), color=(), button=(), name='default_button')
2020-03-29 01:22:46 +08:00
def campaign_ensure_chapter(self, index):
"""
Args:
index (int, str): Chapter. Such as 7, 'd', 'sp'.
"""
index = self._campaign_get_chapter_index(index)
2020-03-29 01:22:46 +08:00
# A tricky way to use ui_ensure_index.
2020-05-27 21:29:32 +08:00
self.ui_ensure_index(index, letter=self.get_chapter_index,
2020-03-29 01:22:46 +08:00
prev_button=CHAPTER_PREV, next_button=CHAPTER_NEXT,
fast=True, skip_first_screenshot=True)
2020-03-29 01:22:46 +08:00
def campaign_ensure_mode(self, mode='normal'):
"""
Args:
2020-07-28 14:56:17 +08:00
mode (str): 'normal', 'hard', 'ex'
2020-03-29 01:22:46 +08:00
Returns:
bool: If mode changed.
"""
2020-07-28 14:56:17 +08:00
switch_2 = MODE_SWITCH_2.get(main=self)
if switch_2 == 'unknown':
2020-07-28 14:56:17 +08:00
if mode == 'ex':
logger.warning('Trying to goto EX, but no EX mode switch')
elif mode == 'normal':
MODE_SWITCH_1.set('hard', main=self)
elif mode == 'hard':
MODE_SWITCH_1.set('normal', main=self)
else:
logger.warning(f'Unknown campaign mode: {mode}')
else:
2020-07-28 14:56:17 +08:00
if mode == 'ex':
MODE_SWITCH_2.set('hard', main=self)
elif mode == 'normal':
MODE_SWITCH_2.set('ex', main=self)
MODE_SWITCH_1.set('hard', main=self)
elif mode == 'hard':
MODE_SWITCH_2.set('ex', main=self)
MODE_SWITCH_1.set('normal', main=self)
2020-07-28 14:56:17 +08:00
else:
logger.warning(f'Unknown campaign mode: {mode}')
2020-03-29 01:22:46 +08:00
def campaign_get_entrance(self, name):
"""
Args:
name (str): Campaign name, such as '7-2', 'd3', 'sp3'.
Returns:
Button:
"""
2020-05-27 21:29:32 +08:00
if name not in self.stage_entrance:
2020-03-29 01:22:46 +08:00
logger.warning(f'Stage not found: {name}')
raise CampaignNameError
entrance = self.stage_entrance[name]
entrance.name = name
return entrance
2020-03-29 01:22:46 +08:00
2022-03-24 18:59:08 +08:00
def campaign_set_chapter_main(self, chapter, mode='normal'):
2020-03-29 01:22:46 +08:00
if chapter.isdigit():
self.ui_goto_campaign()
2020-03-29 01:22:46 +08:00
self.campaign_ensure_mode('normal')
self.campaign_ensure_chapter(index=chapter)
if mode == 'hard':
self.campaign_ensure_mode('hard')
# info_bar shows: Hard mode for this map is not available yet.
# There's also a game bug in EN, HM12 shows not available but it's actually available.
self.handle_info_bar()
self.campaign_ensure_chapter(index=chapter)
2022-03-24 18:59:08 +08:00
return True
else:
return False
2020-03-29 01:22:46 +08:00
2022-03-24 18:59:08 +08:00
def campaign_set_chapter_event(self, chapter, mode='normal'):
if chapter in ['a', 'b', 'c', 'd', 'ex_sp', 'as', 'bs', 'cs', 'ds', 't']:
2021-10-11 11:38:10 +08:00
self.ui_goto_event()
if chapter in ['a', 'b', 'as', 'bs', 't']:
2020-03-29 01:22:46 +08:00
self.campaign_ensure_mode('normal')
elif chapter in ['c', 'd', 'cs', 'ds']:
2020-03-29 01:22:46 +08:00
self.campaign_ensure_mode('hard')
2020-07-28 14:56:17 +08:00
elif chapter == 'ex_sp':
self.campaign_ensure_mode('ex')
2020-03-29 01:22:46 +08:00
self.campaign_ensure_chapter(index=chapter)
2022-03-24 18:59:08 +08:00
return True
else:
return False
2020-03-29 01:22:46 +08:00
2022-03-24 18:59:08 +08:00
def campaign_set_chapter_sp(self, chapter, mode='normal'):
if chapter == 'sp':
2021-10-11 11:38:10 +08:00
self.ui_goto_sp()
2020-05-07 13:55:00 +08:00
self.campaign_ensure_chapter(index=chapter)
2022-03-24 18:59:08 +08:00
return True
else:
return False
def campaign_set_chapter(self, name, mode='normal'):
"""
Args:
name (str): Campaign name, such as '7-2', 'd3', 'sp3'.
mode (str): 'normal' or 'hard'.
"""
chapter, _ = self._campaign_separate_name(name)
2022-03-24 18:59:08 +08:00
if self.campaign_set_chapter_main(chapter, mode):
pass
elif self.campaign_set_chapter_event(chapter, mode):
pass
elif self.campaign_set_chapter_sp(chapter, mode):
pass
else:
logger.warning(f'Unknown campaign chapter: {name}')
def ensure_campaign_ui(self, name, mode='normal'):
for n in range(20):
try:
self.campaign_set_chapter(name, mode)
self.ENTRANCE = self.campaign_get_entrance(name=name)
return True
except CampaignNameError:
pass
self.device.screenshot()
logger.warning('Campaign name error')
raise ScriptEnd('Campaign name error')
def commission_notice_show_at_campaign(self):
"""
Returns:
bool: If any commission finished.
"""
return self.appear(CAMPAIGN_CHECK, offset=(20, 20)) and self.appear(COMMISSION_NOTICE_AT_CAMPAIGN)