mirror of
https://github.com/0O0o0oOoO00/Alas.git
synced 2026-05-17 19:29:27 +08:00
272 lines
11 KiB
Python
272 lines
11 KiB
Python
import collections
|
|
|
|
import gl
|
|
from module.base.decorator import cached_property, Config
|
|
from module.base.utils import ApiCollectionSwitch
|
|
from module.equipment.assets import *
|
|
from module.equipment.equipment import Equipment, EquipmentOld
|
|
from module.equipment.equipment_change import EquipmentChange, EquipmentChangeOld, EquipmentChangeNew
|
|
from module.logger import logger
|
|
from module.ocr.ocr import Digit
|
|
from module.storage.storage import StorageHandler
|
|
from module.ui.assets import FLEET_CHECK
|
|
from module.ui.page import page_fleet
|
|
from module.config.config import AzurLaneConfig
|
|
from module.device.device import Device
|
|
from collections import deque
|
|
|
|
OCR_FLEET_INDEX = Digit(OCR_FLEET_INDEX, letter=(90, 154, 255), threshold=128, alphabet='123456')
|
|
|
|
|
|
class DailyEquipment(EquipmentChangeOld):
|
|
equipment_has_take_on = False
|
|
|
|
@property
|
|
def _fleet_daily(self):
|
|
fleet = self.config.FLEET_DAILY
|
|
if isinstance(fleet, list):
|
|
logger.info(f'Multiple daily fleets are set, change equipment only for the first one. fleet: {fleet}')
|
|
return fleet[0]
|
|
else:
|
|
return fleet
|
|
|
|
def equipment_take_on(self):
|
|
if self.config.FLEET_DAILY_EQUIPMENT is None:
|
|
return False
|
|
if self.equipment_has_take_on:
|
|
return False
|
|
|
|
self.ui_ensure(page_fleet)
|
|
self.ui_ensure_index(self._fleet_daily, letter=OCR_FLEET_INDEX, next_button=FLEET_NEXT, prev_button=FLEET_PREV)
|
|
super().equipment_take_on(enter=FLEET_ENTER, out=FLEET_CHECK, fleet=self.config.FLEET_DAILY_EQUIPMENT)
|
|
self.equipment_has_take_on = True
|
|
self.device.sleep(1)
|
|
return True
|
|
|
|
def equipment_take_off(self):
|
|
if self.config.FLEET_DAILY_EQUIPMENT is None:
|
|
return False
|
|
if not self.equipment_has_take_on:
|
|
return False
|
|
|
|
self.ui_ensure(page_fleet)
|
|
self.ui_ensure_index(self._fleet_daily, letter=OCR_FLEET_INDEX, next_button=FLEET_NEXT, prev_button=FLEET_PREV)
|
|
super().equipment_take_off(enter=FLEET_ENTER, out=FLEET_CHECK, fleet=self.config.FLEET_DAILY_EQUIPMENT)
|
|
self.equipment_has_take_on = False
|
|
self.device.sleep(1)
|
|
return True
|
|
|
|
|
|
class FleetEquipmentNew(EquipmentChangeNew):
|
|
def fleet_enter(self, fleet):
|
|
self.ui_ensure(page_fleet)
|
|
self.ui_ensure_index(fleet, letter=OCR_FLEET_INDEX,
|
|
next_button=FLEET_NEXT, prev_button=FLEET_PREV, skip_first_screenshot=True)
|
|
|
|
def fleet_equipment_take_on_preset(self, preset_record, enter=FLEET_DETAIL_ENTER_FLAGSHIP,
|
|
long_click=False, out=FLEET_DETAIL_CHECK):
|
|
self.ui_click(FLEET_DETAIL, appear_button=page_fleet.check_button,
|
|
check_button=FLEET_DETAIL_CHECK, skip_first_screenshot=True)
|
|
super().fleet_equipment_take_on_preset(preset_record=preset_record, enter=FLEET_DETAIL_ENTER_FLAGSHIP,
|
|
long_click=False, out=FLEET_DETAIL_CHECK)
|
|
self.ui_back(FLEET_CHECK)
|
|
|
|
def fleet_equipment_take_off(self, enter=FLEET_DETAIL_ENTER_FLAGSHIP, long_click=False, out=FLEET_DETAIL_CHECK):
|
|
self.ui_click(FLEET_DETAIL, appear_button=page_fleet.check_button,
|
|
check_button=FLEET_DETAIL_CHECK, skip_first_screenshot=True)
|
|
super().fleet_equipment_take_off(enter=enter, long_click=long_click, out=out)
|
|
self.ui_back(FLEET_CHECK)
|
|
|
|
def fleet_enter_ship(self, button):
|
|
self.ui_click(FLEET_DETAIL, appear_button=page_fleet.check_button,
|
|
check_button=FLEET_DETAIL_CHECK, skip_first_screenshot=True)
|
|
self.ship_info_enter(button, long_click=False)
|
|
|
|
def fleet_back(self):
|
|
self.ui_back(FLEET_DETAIL_CHECK)
|
|
self.ui_back(FLEET_CHECK)
|
|
|
|
|
|
class FleetEquipment(StorageHandler):
|
|
def __init__(self, config, device=None, task=None):
|
|
conf = AzurLaneConfig.build_azurlane_config(config, task)
|
|
dev = Device.build_device(conf, device)
|
|
|
|
self.fleet_equipment_old: DailyEquipment = DailyEquipment(config=conf, device=dev, task=task)
|
|
self.fleet_equipment_new: FleetEquipmentNew = FleetEquipmentNew(config=conf, device=dev, task=task)
|
|
StorageHandler.__init__(self, config=conf, device=dev, task=task)
|
|
|
|
self.fleet_equipment_switch_stack = collections.deque()
|
|
self.fleet_equipment_current_use = self.fleet_equipment_new
|
|
|
|
def switch_fleet_equipment_to_old(self):
|
|
self.fleet_equipment_switch_stack.append(self.fleet_equipment_current_use)
|
|
self.fleet_equipment_current_use = self.fleet_equipment_new
|
|
|
|
def switch_fleet_equipment_to_new(self):
|
|
self.fleet_equipment_switch_stack.append(self.fleet_equipment_current_use)
|
|
self.fleet_equipment_current_use = self.fleet_equipment_new
|
|
|
|
def switch_fleet_equipment_back(self):
|
|
if len(self.fleet_equipment_switch_stack) == 0:
|
|
self.fleet_equipment_current_use = self.fleet_equipment_new
|
|
return
|
|
self.fleet_equipment_current_use = self.fleet_equipment_switch_stack.pop()
|
|
|
|
'''
|
|
DailyEquipment
|
|
'''
|
|
|
|
@property
|
|
def _fleet_daily(self):
|
|
return self.fleet_equipment_old._fleet_daily
|
|
|
|
def equipment_take_on(self, *args, **kwargs):
|
|
if "index_list" in kwargs or "skip_first_screenshot" in kwargs:
|
|
return EquipmentChangeOld.equipment_take_on(self.fleet_equipment_old, *args, **kwargs)
|
|
elif len(args) == 3:
|
|
return EquipmentOld.equipment_take_off(self.fleet_equipment_old, *args, **kwargs)
|
|
else:
|
|
return self.fleet_equipment_old.equipment_take_on()
|
|
|
|
def equipment_take_off(self, *args, **kwargs):
|
|
if len(args) == 3:
|
|
return EquipmentOld.equipment_take_off(self.fleet_equipment_old, *args, **kwargs)
|
|
else:
|
|
return self.fleet_equipment_old.equipment_take_off()
|
|
|
|
'''
|
|
DailyEquipment.EquipmentChangeOld
|
|
'''
|
|
|
|
@cached_property
|
|
def equip_list(self):
|
|
return self.fleet_equipment_old.equip_list
|
|
|
|
@cached_property
|
|
def equipping_list(self):
|
|
return self.fleet_equipment_old.equipping_list
|
|
|
|
def get_equiping_list(self, skip_first_screenshot=True):
|
|
return self.fleet_equipment_old.get_equiping_list(skip_first_screenshot=skip_first_screenshot)
|
|
|
|
def record_equipment(self, index_list=range(0, 5)):
|
|
return self.fleet_equipment_old.record_equipment(index_list)
|
|
|
|
'''in DailyEquipment section'''
|
|
|
|
# def equipment_take_on(self, index_list=range(0, 5), skip_first_screenshot=True):
|
|
# ...
|
|
|
|
@Config.when(DEVICE_CONTROL_METHOD='minitouch')
|
|
def _equipment_swipe(self, distance=190):
|
|
return self.fleet_equipment_old._equipment_swipe(distance)
|
|
|
|
@Config.when(DEVICE_CONTROL_METHOD=None)
|
|
def _equipment_swipe(self, distance=300):
|
|
return self.fleet_equipment_old._equipment_swipe(distance)
|
|
|
|
'''in Public section'''
|
|
|
|
# def _equip_equipment(self, point, offset=(100, 100)):
|
|
# ...
|
|
|
|
def _find_equip(self, index):
|
|
return self.fleet_equipment_old._find_equip(index)
|
|
|
|
'''
|
|
DailyEquipment.EquipmentChangeOld.EquipmentOld
|
|
'''
|
|
|
|
@cached_property
|
|
def equipment_has_take_on(self):
|
|
return self.fleet_equipment_old.equipment_has_take_on
|
|
|
|
def equipping_set(self, enable=False):
|
|
return self.fleet_equipment_old.equipping_set(enable=enable)
|
|
|
|
def _equip_view_swipe(self, distance, check_button=EQUIPMENT_OPEN):
|
|
return self.fleet_equipment_old._equip_view_swipe(distance=distance, check_button=check_button)
|
|
|
|
def equip_view_next(self, check_button=EQUIPMENT_OPEN):
|
|
return self.fleet_equipment_old.equip_view_next(check_button=check_button)
|
|
|
|
def equip_view_prev(self, check_button=EQUIPMENT_OPEN):
|
|
return self.fleet_equipment_old.equip_view_prev(check_button=check_button)
|
|
|
|
def equip_enter(self, click_button, check_button=EQUIPMENT_OPEN, long_click=True, skil_first_screenshot=True):
|
|
return self.fleet_equipment_old.equip_enter(click_button=click_button, check_button=check_button,
|
|
long_click=long_click, skil_first_screenshot=skil_first_screenshot)
|
|
|
|
@cached_property
|
|
def _equip_side_navbar(self):
|
|
return self.fleet_equipment_old._equip_side_navbar
|
|
|
|
def equip_side_navbar_ensure(self, upper=None, bottom=None):
|
|
return self.fleet_equipment_old.equip_side_navbar_ensure(upper=upper, bottom=bottom)
|
|
|
|
def _equip_take_off_one(self, skip_first_screenshot=True):
|
|
return self.fleet_equipment_old._equip_take_off_one(skip_first_screenshot=skip_first_screenshot)
|
|
|
|
'''in DailyEquipment section'''
|
|
|
|
# def equipment_take_off(self, enter, out, fleet):
|
|
# ...
|
|
|
|
def _equip_take_on_one(self, index, skip_first_screenshot=True):
|
|
return self.fleet_equipment_old._equip_take_on_one(index=index, skip_first_screenshot=skip_first_screenshot)
|
|
|
|
'''in DailyEquipment section'''
|
|
# def equipment_take_on(self, enter, out, fleet):
|
|
# ...
|
|
|
|
'''
|
|
FleetEquipmentNew
|
|
'''
|
|
|
|
def fleet_enter(self, fleet):
|
|
return self.fleet_equipment_new.fleet_enter(fleet)
|
|
|
|
def fleet_equipment_take_on_preset(self, preset_record, enter=FLEET_DETAIL_ENTER_FLAGSHIP,
|
|
long_click=False, out=FLEET_DETAIL_CHECK):
|
|
return self.fleet_equipment_new.fleet_equipment_take_on_preset(preset_record=preset_record, enter=enter,
|
|
long_click=long_click, out=out)
|
|
|
|
def fleet_equipment_take_off(self, enter=FLEET_DETAIL_ENTER_FLAGSHIP, long_click=False, out=FLEET_DETAIL_CHECK):
|
|
return self.fleet_equipment_new.fleet_equipment_take_off(enter=enter, long_click=long_click, out=out)
|
|
|
|
def fleet_enter_ship(self, button):
|
|
return self.fleet_equipment_new.fleet_enter_ship(button)
|
|
|
|
def fleet_back(self):
|
|
return self.fleet_equipment_new.fleet_back()
|
|
|
|
@cached_property
|
|
def equipment_list(self):
|
|
return self.fleet_equipment_new.equipment_list
|
|
|
|
def ship_equipment_record_image(self, index_list=range(0, 5)):
|
|
return self.fleet_equipment_new.ship_equipment_record_image(index_list=index_list)
|
|
|
|
def ship_equipment_take_on_image(self, index_list=range(0, 5), skip_first_screenshot=True):
|
|
return self.fleet_equipment_new.ship_equipment_take_on_image(index_list=index_list,
|
|
skip_first_screenshot=skip_first_screenshot)
|
|
|
|
@Config.when(DEVICE_CONTROL_METHOD='minitouch')
|
|
def _equipment_swipe(self, distance=190):
|
|
return self.fleet_equipment_new._equipment_swipe(distance=distance)
|
|
|
|
@Config.when(DEVICE_CONTROL_METHOD=None)
|
|
def _equipment_swipe(self, distance=300):
|
|
return self.fleet_equipment_new._equipment_swipe(distance=distance)
|
|
|
|
def _find_equipment(self, index):
|
|
return self.fleet_equipment_new._find_equipment(index)
|
|
|
|
'''
|
|
Public
|
|
'''
|
|
|
|
def _equip_equipment(self, point, offset=(100, 100)):
|
|
return self.fleet_equipment_current_use._equip_equipment(point, offset)
|