1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-17 19:29:27 +08:00
Files
Alas/module/equipment/fleet_equipment.py

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)